2013-04-17 19 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明示的に上記の-keep行を追加すると回避できます。 –

+0

@ Ericは明示的に追加しても機能しませんでした。 apkプロジェクトのマニフェストのクラス定義のみが保持されました。今私は合併をオフにし、libプロジェクトからすべてをコピーする必要があります。 :( – user802421

関連する問題