构建签名 APK 时 com.googlecode.libphonenumber:libphonenumber:8.8.2 中缺少元数据
Missing Meta data in com.googlecode.libphonenumber:libphonenumber:8.8.2 while building signed APK
我在我的项目中添加了 com.googlecode.libphonenumber:libphonenumber:8.8.2。在调试模式下,它在已签名的 apk 中工作 normally.But,当调用库方法时会生成以下异常。
Caused by: java.lang.IllegalStateException: missing metadata: /com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BD
at com.google.i18n.phonenumbers.e.getMetadataFromSingleFileName(SourceFile:188)
at com.google.i18n.phonenumbers.e.getMetadataFromMultiFilePrefix(SourceFile:116)
at com.google.i18n.phonenumbers.g.getMetadataForRegion(SourceFile:64)
at com.google.i18n.phonenumbers.PhoneNumberUtil.getMetadataForRegion(SourceFile:2211)
at com.google.i18n.phonenumbers.PhoneNumberUtil.getMetadataForRegionOrCallingCode(SourceFile:1330)
at com.google.i18n.phonenumbers.PhoneNumberUtil.parseHelper(SourceFile:3197)
at com.google.i18n.phonenumbers.PhoneNumberUtil.parse(SourceFile:3025)
at com.google.i18n.phonenumbers.PhoneNumberUtil.parse(SourceFile:3015)
at com.revesoft.itelmobiledialer.util.aq.b(SourceFile:697)ode here
可能您已经修复了它,但它可能会对其他人有所帮助。我有同样的问题,我已将其修复为库 FAQs - 如何在我的 Android 应用程序中加载 libphonenumber 资源?
一个可能的问题是您正在从主线程加载元数据。如果不是这种情况,那么
您可以在您的应用程序中复制包含元数据的数据文件夹。创建资产文件夹 src/main/assets/data
。
在您首先要读取数据的应用程序中,创建您自己的元数据加载器,该加载器将从其新目标读取元数据。这在我发布的 link 中有描述。图书馆常见问题解答建议从图书馆中删除元数据文件,以免重复文件。
private static PhoneNumberUtil getPhoneNumberUtilInstance()
{
if(mPhoneNumberUtil == null)
{
mPhoneNumberUtil = PhoneNumberUtil.createInstance(new MetadataLoader()
{
@Override
public InputStream loadMetadata(String metadataFileName)
{
try
{
String[] stringPieces = metadataFileName.split("/");
String metadataName = stringPieces[stringPieces.length - 1];
InputStream is = Factory.get().getApplicationContext().getAssets().open("data/" + metadataName);
return is;
}
catch (IOException e)
{
// Handle somehow!
return null;
}
}
});
}
return mPhoneNumberUtil;
}
我在我的项目中添加了 com.googlecode.libphonenumber:libphonenumber:8.8.2。在调试模式下,它在已签名的 apk 中工作 normally.But,当调用库方法时会生成以下异常。
Caused by: java.lang.IllegalStateException: missing metadata: /com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BD
at com.google.i18n.phonenumbers.e.getMetadataFromSingleFileName(SourceFile:188)
at com.google.i18n.phonenumbers.e.getMetadataFromMultiFilePrefix(SourceFile:116)
at com.google.i18n.phonenumbers.g.getMetadataForRegion(SourceFile:64)
at com.google.i18n.phonenumbers.PhoneNumberUtil.getMetadataForRegion(SourceFile:2211)
at com.google.i18n.phonenumbers.PhoneNumberUtil.getMetadataForRegionOrCallingCode(SourceFile:1330)
at com.google.i18n.phonenumbers.PhoneNumberUtil.parseHelper(SourceFile:3197)
at com.google.i18n.phonenumbers.PhoneNumberUtil.parse(SourceFile:3025)
at com.google.i18n.phonenumbers.PhoneNumberUtil.parse(SourceFile:3015)
at com.revesoft.itelmobiledialer.util.aq.b(SourceFile:697)ode here
可能您已经修复了它,但它可能会对其他人有所帮助。我有同样的问题,我已将其修复为库 FAQs - 如何在我的 Android 应用程序中加载 libphonenumber 资源?
一个可能的问题是您正在从主线程加载元数据。如果不是这种情况,那么
您可以在您的应用程序中复制包含元数据的数据文件夹。创建资产文件夹 src/main/assets/data
。
在您首先要读取数据的应用程序中,创建您自己的元数据加载器,该加载器将从其新目标读取元数据。这在我发布的 link 中有描述。图书馆常见问题解答建议从图书馆中删除元数据文件,以免重复文件。
private static PhoneNumberUtil getPhoneNumberUtilInstance()
{
if(mPhoneNumberUtil == null)
{
mPhoneNumberUtil = PhoneNumberUtil.createInstance(new MetadataLoader()
{
@Override
public InputStream loadMetadata(String metadataFileName)
{
try
{
String[] stringPieces = metadataFileName.split("/");
String metadataName = stringPieces[stringPieces.length - 1];
InputStream is = Factory.get().getApplicationContext().getAssets().open("data/" + metadataName);
return is;
}
catch (IOException e)
{
// Handle somehow!
return null;
}
}
});
}
return mPhoneNumberUtil;
}