首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有PreferenceFragment的PerferenceActivity在设备上出现故障,其proguard正常,但没有proguard

带有PreferenceFragment的PerferenceActivity在设备上出现故障,其proguard正常,但没有proguard
EN

Stack Overflow用户
提问于 2012-07-21 01:13:41
回答 2查看 1.5K关注 0票数 6

我正在编写我的第一个针对ICS (4.0.3 - level 15)的应用程序。我有动作条,我觉得它们很棒。但我是第一次尝试碎片,我仍然不确定我是否喜欢它们。我目前正在开发的应用程序不需要碎片,因为它在屏幕上的要求非常不动态。标准活动运行得很好。然而,最大的问题是我必须使用带有PreferencFragment和Headers的PreferenceActivity。直接到首选项定义xml文件的旧形式的活动已经折旧了。因此,我学会了在Google的强制下使用偏好片段来显示偏好。(顺便说一下,有没有人知道如何跳过显示标题。我使用了两个作为学习体验。一个指向单个片段类的代码就足够了。但如果只有一个标题就必须进行双重选择,这看起来很糟糕……)

我一直使用模拟器的东西,直到大约3天前,一切都在工作。当我将测试转移到设备上时,我可以获得显示标题的首选项屏幕(PreferenceActivity类)。但是,当我选择一个头文件(调用PreferencesFragment类)时,我收到了“对不起你的应用程序停止了”的消息。回到模拟器上,一切都正常工作。我终于意识到当我生成我的APK时,我正在使用PreferenceFragment。由于除了我的设置活动之外,所有的视图都是由标准活动驱动的,所以几乎所有的东西都可以工作。当我关闭Proguard时,所有的东西都工作了,包括设置。在我的Crittercism崩溃报告中,当Proguard打开时产生的错误是找不到类。找不到的类是内联的APK类。

例如,使用标头

代码语言:javascript
复制
android:fragment="com.mycompany.projectname.FragmentPreferences$SettingsFragment" 

设备上运行的安卓操作系统找不到内联类SettingsFragment。

关闭Proguard并重新安装APK,上面的头文件就可以正常工作。无论有没有Proguard,都会始终找到PreferenceActivity类FragmentPreferences并显示标头。选择显示的标题时失败(调用SettingsFragment)...

我试过-dontoptimize和-dontshrink,但我的应用程序仍然不能在Proguard on上工作。我的R20设置是标准的;即,当我使用Eclipse向导创建一个新的应用程序时生成的(ADT Proguard -最新和最好)。以下是我尝试运行的设置:

在project-properties中:

代码语言:javascript
复制
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设置?如果这个问题扩展到常规的片段使用,那么这些设置是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-21 01:16:08

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

请注意,我不是ProGuard专家,因此这可能是“用别克拍打苍蝇”,但它适用于我,包括我的PreferenceFragments

票数 5
EN

Stack Overflow用户

发布于 2014-08-19 14:29:59

将您的proguard-project.txt更改为

代码语言:javascript
复制
-keep public class * extends android.preference.Preference
-keep public class * extends android.preference.PreferenceFragment
-keep public class * extends android.preference.PreferenceActivity
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11584041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档