java - 安卓.content.pm.PackageManager$NameNotFoundException : when using 2 product flavors?

标签 java android

我有 2 种产品口味。比方说这样的例子:

productFlavors {
    free {
      applicationId 'com.free.android'

    }
    premium {
      applicationId 'com.premium.android'

    }

我的问题是当我使用

Intent resultIntent = new Intent(this, ExpiryListActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(ExpiryListActivity.class);
stackBuilder.addNextIntent(resultIntent);

问题发生在stackBuilder.addParentStack(ExpiryListActivity.class)时 第一个使用 productFlavor free 的应用程序不会导致 android.content.pm.PackageManager$NameNotFoundException错误。 但是第二个使用 productFlavor 溢价的应用程序会导致 android.content.pm.PackageManager$NameNotFoundException . 然后我阅读了 stackBuilder.addParentStack(<Class>) 的文档添加 manifest 指定的 Activity 父链。如何解决这个问题?

最佳答案

长话短说 将您的元数据更改为

<meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="originalPackageName.ui.MainActivity" />

基本问题是 gradle 正在扩展您在元数据中编写的父 Activity 类的包名称。

如果您的产品口味是免费的,它会尝试在 com.free.android.ui.MainActivity 位置找到一个类

如果是付费风格,它会尝试在 com.premium.android.ui.MainActivity 位置找到一个类

但是,当您为您的产品风格提及不同的 applicationId 时,gradle 实际上并没有重组包,并且该类仍然位于 originalPackageName.ui.MainActivity,因此 NameNotFoundException

其中 originalPackageName 是您开始项目时使用的包名称的占位符。

关于java - 安卓.content.pm.PackageManager$NameNotFoundException : when using 2 product flavors?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37313731/

相关文章:

java - 使 firebase 查询搜索不区分大小写

java - 设置 Quartz 设置的 'clustered' 属性会导致单台机器出现问题吗?

java - Neo4j Java OGM 带锁选择

java - Android:为什么后续代码阻止 TextView 的 .setText() 工作

java - 从 ArrayList<CustomObject> 中查找项目索引的更好方法

Java - 尝试在此 forLoop 的每次迭代上绘制图像

android - Jitpack与www合作。但并非只有我

android - 添加 Facebook SDK "appeventslogger.activateapp(this)"时显示已弃用

Android Jni.so 文件 ExceptionInInitializerError 和 UnsatisfiedLinkError : Library jniopencv_core not found

java - 有人有 MediaRecorder 与 ParcelFileDescriptor.fromDatagramSocket 一起使用吗?