Ash*_*bHi 5 android libphonenumber android-gradle-plugin
我在我的项目中添加了 com.googlecode.libphonenumber:libphonenumber:8.8.2。在调试模式下,它正常工作。但在签名的 apk 中,当调用库方法时会生成以下异常。
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
Run Code Online (Sandbox Code Playgroud)
也许您已经修复了它,但它可能对其他人有帮助。我遇到了同样的问题,并且已将其修复为库常见问题解答 - 如何在 Android 应用程序中加载 libphonenumber 资源?
一个可能的问题可能是您正在从主线程加载元数据。如果不是这种情况,那么您可以复制应用程序中包含元数据的数据文件夹。创建一个资产文件夹src/main/assets/data。在您首先想要读取数据的应用程序中,创建您自己的元数据加载器,该加载器将从新的目的地读取元数据。这在我发布的链接中进行了描述。库常见问题解答建议从库中删除元数据文件,以免文件重复。
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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1280 次 |
| 最近记录: |