我有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 premium的第二个应用程序会导致android.content.pm.PackageManager$NameNotFoundException
。
然后我读了stackBuilder.addParentStack(<Class>)
添加由manifest指定的活动父链的文档。如何解决这个问题?
答案 0 :(得分:1)
<强> TL; DR 强> 将您的元数据更改为
/login/index.php
基本问题是gradle正在扩展您在元数据中编写的父活动类的包名称。
如果您有免费的产品风味,它会尝试在 com.free.android.ui.MainActivity
的位置找到课程如果您的付费风味,它会尝试在 com.premium.android.ui.MainActivity
位置找到课程但是当您为产品风格提及不同的applicationId并且该类仍位于 originalPackageName.ui.MainActivity 并且因此NameNotFoundException
其中 originalPackageName 是您为项目启动的软件包名称的占位符。
答案 1 :(得分:0)
看起来我找到了它。在AndroidManifest.xml上
<activity
android:name=".ui.ExpiryListActivity"
android:label="@string/voucher_expiry_list"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar.Slidable" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".ui.MainActivity" />
</activity>
我将元数据名称替换为:
<activity
android:name=".ui.ExpiryListActivity"
android:label="@string/voucher_expiry_list"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar.Slidable" >
<meta-data
android:name=".ui.ExpiryListActivity"
android:value=".ui.MainActivity" />
</activity>
它可以工作,但是当按下它时它无法返回到MainActivity。但是,我知道这不是最佳解决方案。如果还有其他更好的解决方案,请告诉我。 注意:这似乎只发生在Android Lollipop(5.0)
上