![](/img/trans.png)
[英]NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager
[英]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.