ColorMixer
で CommonsWareを使用しようとしていPreferenceActivity
ます。これは、エミュレーターにデプロイするとき、およびプロガードなしでエクスポートするときに正常に機能します。しかし、proguard を構成してエクスポートすると、アプリケーションがクラッシュします。
最新の Android SDK に付属する proguard 構成を使用しました。少なくともコードが「壊れる」場所を確認できるように 2 行を追加し、プロガードが CommonsWare のものをそのままにしておくようにするために 2 行を追加します。
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
-keep class com.commonsware.** { *; }
-keep interface com.commonsware.** { *; }
エラー:
08-17 12:58:13.199: E/AndroidRuntime(922): FATAL EXCEPTION: main
08-17 12:58:13.199: E/AndroidRuntime(922): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test/com.test.MainActivity}: android.view.InflateException: Binary XML file line #5: Error inflating class java.lang.reflect.Constructor
08-17 12:58:13.199: E/AndroidRuntime(922): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
08-17 12:58:13.199: E/AndroidRuntime(922): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
08-17 12:58:13.199: E/AndroidRuntime(922): at android.app.ActivityThread.access$600(ActivityThread.java:130)
08-17 12:58:13.199: E/AndroidRuntime(922): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
08-17 12:58:13.199: E/AndroidRuntime(922): at android.os.Handler.dispatchMessage(Handler.java:99)
08-17 12:58:13.199: E/AndroidRuntime(922): at android.os.Looper.loop(Looper.java:137)
08-17 12:58:13.199: E/AndroidRuntime(922): at android.app.ActivityThread.main(ActivityThread.java:4745)
08-17 12:58:13.199: E/AndroidRuntime(922): at java.lang.reflect.Method.invokeNative(Native Method)
08-17 12:58:13.199: E/AndroidRuntime(922): at java.lang.reflect.Method.invoke(Method.java:511)
08-17 12:58:13.199: E/AndroidRuntime(922): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
08-17 12:58:13.199: E/AndroidRuntime(922): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-17 12:58:13.199: E/AndroidRuntime(922): at dalvik.system.NativeStart.main(Native Method)
08-17 12:58:13.199: E/AndroidRuntime(922): Caused by: android.view.InflateException: Binary XML file line #5: Error inflating class java.lang.reflect.Constructor
08-17 12:58:13.199: E/AndroidRuntime(922): at android.preference.GenericInflater.createItem(GenericInflater.java:397)
08-17 12:58:13.199: E/AndroidRuntime(922): at android.preference.GenericInflater.createItemFromTag(GenericInflater.java:430)
08-17 12:58:13.199: E/AndroidRuntime(922): at android.preference.GenericInflater.rInflate(GenericInflater.java:481)
08-17 12:58:13.199: E/AndroidRuntime(922): at android.preference.GenericInflater.rInflate(GenericInflater.java:493)
08-17 12:58:13.199: E/AndroidRuntime(922): at android.preference.GenericInflater.inflate(GenericInflater.java:326)
08-17 12:58:13.199: E/AndroidRuntime(922): at android.preference.GenericInflater.inflate(GenericInflater.java:263)
08-17 12:58:13.199: E/AndroidRuntime(922): at android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:269)
08-17 12:58:13.199: E/AndroidRuntime(922): at android.preference.PreferenceActivity.addPreferencesFromResource(PreferenceActivity.java:1411)
08-17 12:58:13.199: E/AndroidRuntime(922): at com.test.MainActivity.onCreate(SourceFile:14)
08-17 12:58:13.199: E/AndroidRuntime(922): at android.app.Activity.performCreate(Activity.java:5008)
08-17 12:58:13.199: E/AndroidRuntime(922): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
08-17 12:58:13.199: E/AndroidRuntime(922): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
08-17 12:58:13.199: E/AndroidRuntime(922): ... 11 more
08-17 12:58:13.199: E/AndroidRuntime(922): Caused by: java.lang.reflect.InvocationTargetException
08-17 12:58:13.199: E/AndroidRuntime(922): at java.lang.reflect.Constructor.constructNative(Native Method)
08-17 12:58:13.199: E/AndroidRuntime(922): at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
08-17 12:58:13.199: E/AndroidRuntime(922): at android.preference.GenericInflater.createItem(GenericInflater.java:383)
08-17 12:58:13.199: E/AndroidRuntime(922): ... 22 more
08-17 12:58:13.199: E/AndroidRuntime(922): Caused by: java.lang.RuntimeException: Exception finding R class
08-17 12:58:13.199: E/AndroidRuntime(922): at com.commonsware.cwac.parcel.ParcelHelper.<init>(SourceFile:37)
08-17 12:58:13.199: E/AndroidRuntime(922): at com.commonsware.cwac.colormixer.ColorPreference.<init>(SourceFile:39)
08-17 12:58:13.199: E/AndroidRuntime(922): ... 25 more
08-17 12:58:13.199: E/AndroidRuntime(922): Caused by: java.lang.ClassNotFoundException: com.test.R
08-17 12:58:13.199: E/AndroidRuntime(922): at java.lang.Class.classForName(Native Method)
08-17 12:58:13.199: E/AndroidRuntime(922): at java.lang.Class.forName(Class.java:217)
08-17 12:58:13.199: E/AndroidRuntime(922): at java.lang.Class.forName(Class.java:172)
08-17 12:58:13.199: E/AndroidRuntime(922): at com.commonsware.cwac.parcel.ParcelHelper.<init>(SourceFile:34)
08-17 12:58:13.199: E/AndroidRuntime(922): ... 26 more
08-17 12:58:13.199: E/AndroidRuntime(922): Caused by: java.lang.NoClassDefFoundError: com/test/R
08-17 12:58:13.199: E/AndroidRuntime(922): ... 30 more
08-17 12:58:13.199: E/AndroidRuntime(922): Caused by: java.lang.ClassNotFoundException: com.test.R
08-17 12:58:13.199: E/AndroidRuntime(922): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
08-17 12:58:13.199: E/AndroidRuntime(922): at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
08-17 12:58:13.199: E/AndroidRuntime(922): at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
08-17 12:58:13.199: E/AndroidRuntime(922): ... 30 more
pref.xml:
<PreferenceCategory android:title="TitleCat" >
<com.commonsware.cwac.colormixer.ColorPreference
android:key="key"
android:summary="Summary2"
android:title="Title2" />
</PreferenceCategory>
ColorPreferenec.java の 39 行目
ParcelHelper parcel=new ParcelHelper("cwac-colormixer", ctxt);
CWAC-Parcel.jar を ColorMixer プロジェクトに追加し、ビルド パスに追加しました。com.test
テスト プロジェクト (パッケージ)のビルド パスに、必要に応じて ColorMixer プロジェクトを追加しました。
ColorMixerやParcelとは関係ないと思うので、proguardで動作させるためにどの設定を変更すればよいか、誰にもわかりません。(ColorPreference が R パッケージからのデータを「要求」していることを示しているため)