PerferenceActivity与PreferenceFragment在设备出现故障时使用Pro

2019-09-19 22:39发布

我编码我的第一个应用程式指定ICS(4.0.3 - 15级)。 我得到的动作条,我认为他们是伟大的。 但我想片段,第一次,我仍然不知道我是否喜欢他们与否。 我目前正在对应用程序并不需要片段,因为它在屏幕上的要求相当undynamic。 标准活动工作的罚款。 最大的不过是,我必须使用PreferenceActivity与PreferencFragment和头。 直偏好定义XML文件,该活动的旧形式,现在已经贬值。 于是,我学会了谷歌的武力使用偏好片段的喜好显示。 (顺便说一下,有没有人想出如何跳过显示的标题。我用了两个用于学习的经验。一个指向一个片段类就已经足够了。但它看起来不好要翻一番,只有一个标题选择.. 。)

我一直在使用模拟器的事,直到大约3天前,一切都在工作。 当我移动测试设备,我能得到的喜好屏幕所显示的标题(PreferenceActivity类)。 但是,当我选择标题(它调用PreferencesFragment类),我收到了“对不起您的应用程序停止”消息。回到模拟器,一切运行正常。它最后我恍然大悟,我是使用ProGuard时我产生我的APK由于各方面的意见,通过标准的活动,除了我的设置活动最一切正常,当我关掉Proguard的驱动,一切工作,包括设置在我Crittercism崩溃报告,当Proguard的是上找不到类,类产生的错误没有发现是内联PreferenceFragment类。

例如,使用报头

android:fragment="com.mycompany.projectname.FragmentPreferences$SettingsFragment" 

内嵌类SettingsFragment不是由设备上运行的Android操作系统中。

关闭ProGuard,并将其重新安装APK和上面的头正常工作。 具有或不具有Proguard的,所述PreferenceActivity类FragmentPreferences总是发现和标题显示。 选择显示的标题(SettingsFragment的invokation),当它失败...

我试图-dontoptimize和-dontshrink,但我的应用程序使用ProGuard上仍然不会工作。 我的Proguard的设置标准; 即,产生当我创建使用Eclipse向导(ADT R20 - 最新和最伟大)的新应用程序。 下面是我试图与运行的设置:

在项目的属性:

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

target=Google Inc.:Google APIs:15

In proguard-project:

-keepattributes SourceFile, LineNumberTable

-dontshrink

-dontoptimize

所有标准活动(无碎片)正常工作的基本设置。 该-dont的是在试图限制Proguard的只是模糊加入。 当内嵌片段类被称为设置仍会爆破。

目前我正在生成APK使用ProGuard关闭。 当我准备去生产,我想打开它。

(顺便说一句,我感动PreferenceFragment类外部类,他们仍然被调用时Proguard的不工作。)

我已经进入足够多的东西这里还没有问我的问题。 好吧,我这样一个问题关闭下来:

有谁知道要共享的偏好片段类可见所需的正确的Proguard的设置? 如果这个问题延伸到经常使用的片段,那些是什么设置?

Answer 1:

我会用-keep class your.package.goes.here.** { *; } -keep class your.package.goes.here.** { *; } ,以确保ProGuard的不摆脱任何自己的类中,包括布局或其他资源,而不是代码中引用您的片段。

请注意,我不是ProGuard的专家,所以这可能是“乱打了别克飞”,但它为我,包括我的PreferenceFragments



Answer 2:

更改您的ProGuard,project.txt作为

-keep public class * extends android.preference.Preference
-keep public class * extends android.preference.PreferenceFragment
-keep public class * extends android.preference.PreferenceActivity


文章来源: PerferenceActivity with PreferenceFragment fails on device with proguard okay without proguard