android.content.pm.PackageManager $ NameNotFoundException:何时使用2种产品口味?

时间:2016-05-19 03:58:32

标签: 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 premium的第二个应用程序会导致android.content.pm.PackageManager$NameNotFoundException。 然后我读了stackBuilder.addParentStack(<Class>)添加由manifest指定的活动父链的文档。如何解决这个问题?

2 个答案:

答案 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)