簡體   English   中英

android.content.pm.PackageManager $ NameNotFoundException:何時使用2種產品口味?

[英]android.content.pm.PackageManager$NameNotFoundException: when using 2 product flavors?

我有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指定的活動父鏈。 如何解決這個問題呢?

TL; DR將您的元數據更改為

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

基本問題是gradle正在擴展您在元數據中編寫的父活動類的包名稱。

如果您有免費的產品風味,它會嘗試在com.free.android.ui.MainActivity位置找到一個類

如果您的付費風味,它會嘗試在com.premium.android.ui.MainActivity位置找到一個班級

但是,當您為產品風格提及不同的applicationId時,gradle實際上不會重新構建包,並且該類仍位於originalPackageName.ui.MainActivity ,因此NameNotFoundException

其中originalPackageName是您為項目啟動的包名稱的占位符。

看起來我找到了它。 在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。 但是,我知道這不是最佳解決方案。 如果還有其他更好的解決方案,請告訴我。 NB:這似乎只發生在Android Lollipop(5.0)上

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM