Отсутствуют метаданные в 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;
}
Другие вопросы по тегам