android - 构建签名 APK 时 com.googlecode.libphonenumber :libphonenumber:8. 8.2 中缺少元数据

标签 android android-gradle-plugin libphonenumber

我在我的项目中添加了 com.googlecode.libphonenumber:libphonenumber:8.8.2。在 Debug模式下,它正常工作。但是在签名的 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

最佳答案

可能您已经修复了它,但它可能会帮助其他人。我有同样的问题,我已将其修复为库 FAQs - How do I load libphonenumber resources in my Android app?

一个可能的问题是您正在从主线程加载元数据。如果不是这种情况,那么 您可以在您的应用程序中复制包含元数据的数据文件夹。创建 Assets 文件夹 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;
}

关于android - 构建签名 APK 时 com.googlecode.libphonenumber :libphonenumber:8. 8.2 中缺少元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51262519/

相关文章:

java - 如何从 java android 中的 Playstore 应用程序检索所需信息?

android - 将 Dialog 转换为 AlertDialog

android-studio - buildTypes 不能应用于 groovy.lang.Closure

android - 跳跃动画的问题

android - JobIntentService 被销毁,当应用程序被销毁时

带有即时应用程序的 android 架构组件

android - 在 Android Studio 中导入/刷新 Gradle 项目时出现问题

javascript - Google PhoneNumber Validator 未正确验证

java - [++]*+ 在正则表达式中代表什么

swift - libPhoneNumber-cCode2CNMap 方法上的 iOS 崩溃