Отсутствуют метаданные в com.googlecode.libphonenumber:libphonenumber:8.8.2 при создании подписанного APK
Я добавил 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
0 ответов
Возможно, вы уже исправили это, но это может помочь другим. У меня была та же проблема, и я исправил ее, как часто задаваемые вопросы библиотеки - Как загрузить ресурсы libphonenumber в мое приложение для Android?
Возможная проблема может заключаться в том, что вы загружаете метаданные из основного потока. Если это не так, то вы можете скопировать папку данных с метаданными в вашем приложении. Создать папку ресурсов 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;
}