Android 使用Proguard为应用程序类创建onCreate(未知源)(仅在三星设备上发生)

Android 使用Proguard为应用程序类创建onCreate(未知源)(仅在三星设备上发生),android,proguard,samsung-mobile,Android,Proguard,Samsung Mobile,我已经在索尼和Nexus设备以及多个模拟器(API 10-19)上测试了我的应用程序好几个星期了,事情似乎很好,但是,我的两个测试人员(远程居住)在启动过程中遇到崩溃,ACRA不提供发送崩溃日志电子邮件的选项,这让我相信,在ACRA被实例化之前,它就已经崩溃了。ACRA在我的设备和模拟器上按预期工作,并提供发送电子邮件(通过默认应用程序) 三星手机正在进行一些特殊的初始化吗?我是否在以下代码中执行任何可能导致崩溃的操作 @ReportsCrashes( formKey = "",

我已经在索尼和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...
该项目的来源是

编辑#1:

终于有一台三星远程测试实验室设备开始工作了!屏幕仍然不可见,但我至少可以看到logcat。以下是坠机原因:

org.dumpsterdiver.sync.AppState.onCreate(未知源)上的AndroidRuntime错误

这意味着系统无法找到我的应用程序类?在谷歌搜索了一些类似的问题后,我认为这可能是一个proguard错误(再次叹息),所以我一直在尝试其他答案的各种建议。到目前为止,这些都没有起到任何作用(仍在尝试各种价值观):

编辑#2:

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

-keep class * { *; }
-keep public class org.dumpsterdiver.sync.AppState

但是我的APK要大500 KB(3.7->4.2 MB),我怀疑这可能会让使用proguard的一半优势落空?有更好的解决方案吗?

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

-keep class * { *; }
-keep public class org.dumpsterdiver.sync.AppState
将其更改为此似乎已成功:

-keep public class * extends android.app.Application

让测试人员安装adb,启用USB日志记录并捕获日志。最好是买个设备。应该更快。我的一个测试人员住在一个村庄,几乎没有互联网接入(我的4MB应用程序需要大约一个小时才能下载),也无法访问计算机。另一个情况类似,两人都不是很精通技术。我本来想买另一台设备,但我刚刚买了一台新的平板电脑和手机(两家不同的公司)进行测试,现在我手头出现了赤字。我正在四处逛逛,看看能不能找到一些二手设备,因为三星要650美元才能买到三星S4开发者版。顺便说一句,这是一个开源项目,我不会从中赚钱。如果它是开源的,那么提供一个到源代码的链接,并邀请其他开发人员帮助你。好的,添加了链接,但你所说的“其他开发人员”是谁?在过去的10年里,我在多个网站上公开了许多项目,但我还没有得到外界的帮助。我这个周末不在家,但我有半打三星设备——甚至是几款租赁前的型号——我会在周一看看是否能查到。你有足够的分数,你可以用大量的悬赏重新开始这个问题,希望这足够了。否则,请尝试为引起问题的类添加更多的“-keep public class”行。