我有 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/