带有Proguard的应用程序类的onCreate(未知来源)(仅在三星设备上发生)

时间:2014-05-02 02:53:14

标签: android proguard samsung-mobile

我已经在索尼和Nexus设备以及多个仿真器(API 10 - 19)上测试我的应用程序已有好几周了,但事情看起来很好,但是,我的两个测试人员(远程直播)在启动时遇到崩溃并且ACRA没有提供发送崩溃日志电子邮件的选项,这让我相信它在ACRA实例化之前就已经崩溃了。 ACRA在我的设备和模拟器上按预期工作,并提供发送电子邮件(通过默认应用程序)。

三星手机是否进行了一些特殊的初始化?我是否在以下代码中执行任何可能导致崩溃的事情?

@ReportsCrashes(
        formKey = "", // This is required for backward compatibility but not used
        mailTo = "crash@mydomain.com",
        customReportContent = {
                ReportField.APP_VERSION_CODE,
                ReportField.APP_VERSION_NAME,
                ReportField.ANDROID_VERSION,
                ReportField.PHONE_MODEL,
                ReportField.CUSTOM_DATA,
                ReportField.STACK_TRACE,
                ReportField.LOGCAT }
)
public class AppState extends Application {

    private static final String DIRECTORY_ROOT = Environment.getExternalStorageDirectory();
    private static final String DIRECTORY_PICTURES_APP = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath() + File.separator + "MyApp";

    private static final LogConfigurator logConfigurator = new LogConfigurator();
    private static final Logger logger = Logger.getLogger(AppState.class);

    @Override
    public void onCreate() {
        super.onCreate();

        ACRA.init(this);

        // try to create log file and directory; if successful, configure ACRA to include last lines with crash report
        if (createLogFile()) {
            ACRAConfiguration config = ACRA.getConfig();
            config.setApplicationLogFile(LOGGER_FILENAME);
            ACRA.setConfig(config);
        }

        ...log4j, database init, etc...

项目的来源是located here on SourceForge

编辑#1:

最后得到三星远程测试实验室设备之一!屏幕仍然不可见,但我至少可以看到logcat。以下是崩溃的原因:

ERROR AndroidRuntime at org.dumpsterdiver.sync.AppState.onCreate(Unknown Source)

这意味着系统无法找到我的Application类?经过一些谷歌搜索类似的问题,我认为这可能是一个程序错误(叹息,再次),所以我一直在玩其他答案的各种建议。到目前为止,这些都没有帮助(仍在试验各种价值观):

-keep public class org.dumpsterdiver.sync.AppState
-keep public class * extends android.app.Application
-keep public class * extends com.actionbarsherlock.app.SherlockActivity

编辑#2:

将此行添加到我的proguard配置文件似乎可以解决问题:

-keep class * { *; }

但我的APK大500 KB(3.7 - > 4.2 MB),我怀疑这可能会在第一时间使用proguard失败一半?有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

经过大量的实验,这就是问题所在:

-keep public class org.dumpsterdiver.sync.AppState

改变它似乎已经成功了:

-keep public class * extends android.app.Application