2013-04-17 50 views
6

我有幾個使用公共庫項目的應用程序項目。我最近嘗試將每個應用程序項目的AndroidManifest.xml中的一些常見Activity聲明移動到庫的清單中,並啓用了與中的project.properties清單合併。Proguard混淆混合庫清單中的活動名稱

在調試版本中一切正常,但發佈版本(由Proguard混淆)失敗,出現ActivityNotFoundException。這是因爲Proguard混淆了在庫清單中聲明的​​活動的名稱,而不是應用程序清單中的那些名稱。

我檢查了應用程序項目合併的bin/AndroidManifest.xml文件,並且它正確列出了活動名稱。

有人可以請建議一種解決方法嗎?

回答

2

標準的Ant構建過程調用aapt工具來創建一個保留必要類的ProGuard配置(bin/proguard.txt)(例如,它認爲使用的所有活動)。如果不爲你的項目結構(可能是錯誤或不支持的情況下)工作,你可以保存在你的ProGuard-project.txt自己的類:

-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Application 
-keep public class * extends android.app.Service 
-keep public class * extends android.content.BroadcastReceiver 
-keep public class * extends android.content.ContentProvider 

如果生成的應用程序仍然缺少其他類,您可以在ProGuard手冊>示例>A complete Android application中找到更多手動配置。

+0

@ Eric,我認爲這是構建系統中的一個錯誤(https://code.google.com/p/android/issues/detail?id=36077)。你有任何解決方法或建議? – user802421

+0

@ user802421明確添加上面的保留行應該解決它。 –

+0

@埃裏克,明確加入仍然沒有工作。只保留apk項目清單中的類定義。現在我需要關閉合並,並從lib項目中複製所有內容。 :( – user802421