ADT 20 でRelease用にビルドして設定を開いたらクラッシュする件
PreferenceActivity から PreferenceFragment を継承したクラスをロードするところで...。
AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx/xxx.activity.TabletSettingActivity}: android.app.Fragment$InstantiationException: Unable to instantiate fragment xxx.activity.SettingActivity$CheckFragment: make sure class name exists, is public, and has an empty constructor that is public : Caused by: java.lang.ClassNotFoundException: xxx.activity.SettingActivity$CheckFragment at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61) at java.lang.ClassLoader.loadClass(ClassLoader.java:501) at java.lang.ClassLoader.loadClass(ClassLoader.java:461) at android.app.Fragment.instantiate(Fragment.java:574)
いままで問題が無かったのにどうして問題が起こったのか...
ADT 18 の ${sdk.dir}\tools\proguard\proguard-android.txt には↓この行があったが、ADT 20 では無くなっていた。
-keep public class * extends android.app.Fragment
ADT 20 からは、xml から参照されているActivityやFragmentは勝手に -keep class されるようになったらしい。おかげで無駄に -keep class することがなくなり、以前に比べて apk のサイズが縮むようになった。
勝手に -keep class されたものは bin/proguard.txt で確認できた。
ただ、どういうわけか
とりあえず、手動で追加して対処。
-keep class * extends android.preference.PreferenceFragment