Вопрос:

Android приложение вылетает только с выпуском APK

android apk

1244 просмотра

3 ответа

67 Репутация автора

У меня есть любопытная проблема. Я построил приложение, которое отлично работает в режиме отладки (прямая отладка на моем телефоне и с установленным на моем телефоне отладочным 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 Snippet:

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'
    }
}

Я не могу отладить, чтобы найти проблему, потому что сбой не происходит во время отладки.

Может ли кто-нибудь помочь мне решить эту проблему?

Автор: yvi Источник Размещён: 14.01.2018 08:28

Ответы (3)


1 плюс

68 Репутация автора

За исключением SQLite, вы можете проверить файл proguard-rules.pro, он может привести к сбою release.apk. если вы хотите больше наклоняться, нажмите https://developer.android.com/studio/build/shrink-code.html

Автор: chen Размещён: 15.01.2018 03:05

2 плюса

67 Репутация автора

Решение

Я добавил debuggable = true в мой файл Gradle и нашел причину моей проблемы.

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'
}
}

Таблица "готово" не была создана, потому что я попытался поместить два оператора создания таблицы в один db.execSQL ()

Автор: yvi Размещён: 15.01.2018 02:52

0 плюса

234 Репутация автора

Проблема возникает только в том случае, если вы добавляете строку ниже в разделе релиза файла build.gradle:

 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

Используйте это вместо вышеупомянутого:

 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

Пример файла Gradle выглядит следующим образом, и это решило мою проблему:

buildTypes {
    release {
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    debug {
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

Надеюсь, это поможет вам! Удачного кодирования ...

Автор: Arjun G Размещён: 06.05.2019 04:12
Вопросы из категории :
32x32