我正在编写我的第一个针对ICS (4.0.3 - level 15)的应用程序。我有动作条,我觉得它们很棒。但我是第一次尝试碎片,我仍然不确定我是否喜欢它们。我目前正在开发的应用程序不需要碎片,因为它在屏幕上的要求非常不动态。标准活动运行得很好。然而,最大的问题是我必须使用带有PreferencFragment和Headers的PreferenceActivity。直接到首选项定义xml文件的旧形式的活动已经折旧了。因此,我学会了在Google的强制下使用偏好片段来显示偏好。(顺便说一下,有没有人知道如何跳过显示标题。我使用了两个作为学习体验。一个指向单个片段类的代码就足够了。但如果只有一个标题就必须进行双重选择,这看起来很糟糕……)
我一直使用模拟器的东西,直到大约3天前,一切都在工作。当我将测试转移到设备上时,我可以获得显示标题的首选项屏幕(PreferenceActivity类)。但是,当我选择一个头文件(调用PreferencesFragment类)时,我收到了“对不起你的应用程序停止了”的消息。回到模拟器上,一切都正常工作。我终于意识到当我生成我的APK时,我正在使用PreferenceFragment。由于除了我的设置活动之外,所有的视图都是由标准活动驱动的,所以几乎所有的东西都可以工作。当我关闭Proguard时,所有的东西都工作了,包括设置。在我的Crittercism崩溃报告中,当Proguard打开时产生的错误是找不到类。找不到的类是内联的APK类。
例如,使用标头
android:fragment="com.mycompany.projectname.FragmentPreferences$SettingsFragment" 设备上运行的安卓操作系统找不到内联类SettingsFragment。
关闭Proguard并重新安装APK,上面的头文件就可以正常工作。无论有没有Proguard,都会始终找到PreferenceActivity类FragmentPreferences并显示标头。选择显示的标题时失败(调用SettingsFragment)...
我试过-dontoptimize和-dontshrink,但我的应用程序仍然不能在Proguard on上工作。我的R20设置是标准的;即,当我使用Eclipse向导创建一个新的应用程序时生成的(ADT Proguard -最新和最好)。以下是我尝试运行的设置:
在project-properties中:
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's是为了将Proguard限制为仅用于模糊处理。调用内联片段类时,设置仍会膨胀。
目前,我正在生成关闭了Proguard的APK。当我准备好投入生产时,我想重新打开它。
(顺便说一句,我将PreferenceFragment类移到了外部类,当调用Proguard时,它们仍然不起作用。)
我已经在这里输入了足够多的东西,但仍然没有问我的问题。好的,我会用这个问题来关闭它:
有没有人知道使共享首选项片段类可见所需的正确的Proguard设置?如果这个问题扩展到常规的片段使用,那么这些设置是什么?
发布于 2012-07-21 01:16:08
我会使用-keep class your.package.goes.here.** { *; },以确保ProGuard不会丢弃您自己的任何类,包括由布局或其他资源而不是代码引用的片段。
请注意,我不是ProGuard专家,因此这可能是“用别克拍打苍蝇”,但它适用于我,包括我的PreferenceFragments。
发布于 2014-08-19 14:29:59
将您的proguard-project.txt更改为
-keep public class * extends android.preference.Preference
-keep public class * extends android.preference.PreferenceFragment
-keep public class * extends android.preference.PreferenceActivityhttps://stackoverflow.com/questions/11584041
复制相似问题