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