我有一个奇怪的问题。我构建了一个在调试模式下工作正常的应用程序(直接调试我的手机并在我的手机上安装了调试APK)但是如果我使用发布版APK,应用程序会崩溃。 我发现应用程序与发布APK崩溃的点,但我不知道为什么以及我能做什么:
protected final String TABLE = "done";
protected final String COL_ID = "_id";
protected final String COL_TASK = "taskid";
protected final String COL_DATE = "donedate";
protected String getLastDoneDate(String id) {
String date = "";
String filter = COL_TASK + " LIKE ?";
String[] filterArgs = new String[] {id};
String sortOrder = COL_DATE + " DESC";
String[] columns = new String[] {COL_DATE};
Cursor c = MyTime.db.query(TABLE, columns, filter, filterArgs, null, null, sortOrder, "1");
if (c.moveToFirst()) {
date = c.getString(c.getColumnIndex(COL_DATE));
}
c.close();
return date;
}
如果我删除线Cursor c = ...(并且根据c全部)它可以工作。
数据库看起来像这样:
CREATE TABLE IF NOT EXISTS done (
_id INTEGER PRIMARY KEY autoincrement,
taskid INTEGER,
donedate TEXT DEFAULT '');
Gradle片段:
buildTypes {
release {
shrinkResources false
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
shrinkResources false
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
我无法调试以找到问题,因为在调试时不会发生崩溃。
有人可以帮我解决这个问题吗?
答案 0 :(得分:2)
我在我的gradle文件中添加了debuggable = true,找到了问题的原因。
buildTypes {
release {
shrinkResources false
debuggable true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
shrinkResources false
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
表“done”未创建,因为我试图将两个表create语句放入单个db.execSQL()
答案 1 :(得分:1)
除了SQLite,您可以检查proguard-rules.pro文件,它可能会使release.apk崩溃。如果您想要更多精益,请点击https://developer.android.com/studio/build/shrink-code.html
答案 2 :(得分:1)
我遇到了同样的问题,我通过将minifyEnabled和rinkleResources都设置为假来解决了
release {
minifyEnabled false
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
答案 3 :(得分:0)
仅当在build.gradle文件的release部分中添加以下行时,问题才会出现:
1
使用它代替上面的内容:
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
gradle文件示例如下所示,它解决了我的问题:
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
希望它对您有帮助!编码愉快...
答案 4 :(得分:0)
我也在https://medium.com/@aanshul16/android-app-crashes-in-release-mode-but-working-perfectly-in-debug-c051cc83a019中找到并提到了类似的问题 因此,您可以通过在调试风格中将“ minifyEnable”设置为true来进行检查,以确保问题也可以通过调试模式重现。