安卓:在释放模式后签约启动时应用崩溃 [英] Android: app crashed when starting after signing in release mode

查看:501
本文介绍了安卓:在释放模式后签约启动时应用崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

目前,我在释放模式签署后开始执行时面临崩溃的应用程序的问题,
但在调试模式下它工作得很好。

我不能马上找出问题,
即使我做了调查,并保留寻求解决办法,但我仍然不设法使它的工作原理

当应用程序崩溃不会在我的应用程序的logcat显示,而是显示在否过滤器

的误差是

  java.lang.NoSuchFieldError:NO_ACTION
        在java.lang.reflect.Method.getDefaultValue(本机方法)
        在java.lang.reflect.Method.getDefaultValue(Method.java:353)
        在libcore.reflect.AnnotationFactory.getElementsDescription(AnnotationFactory.java:75)
        在libcore.reflect.AnnotationFactory<&初始化GT;(AnnotationFactory.java:112)
        在libcore.reflect.AnnotationFactory.createAnnotation(AnnotationFactory.java:94)
        在java.lang.reflect.Field.getAnnotation(本机方法)
        在java.lang.reflect.Field.getAnnotation(Field.java:209)
        在com.a.g.a(来源不明)
        在com.a.b.a(来源不明)
        在com.a.b.a(来源不明)
        在com.a.b.onCreate(来源不明)
        在android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
        在android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
        在com.a.h.c(来源不明)
        在com.a.h.a(来源不明)
        在com.a.a.a(来源不明)
        在com.socialproperty.app.service.AppController.onCreate(来源不明)
        在android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)
        在com.lbe.security.service.core.client.b.x.callApplicationOnCreate(来源不明)
        在android.app.ActivityThread.handleBindApplication(ActivityThread.java:4361)
        在android.app.ActivityThread.access $ 1500(ActivityThread.java:138)
        在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1259)
        在android.os.Handler.dispatchMessage(Handler.java:102)
        在android.os.Looper.loop(Looper.java:136)
        在android.app.ActivityThread.main(ActivityThread.java:5034)
        在java.lang.reflect.Method.invokeNative(本机方法)
        在java.lang.reflect.Method.invoke(Method.java:515)
        在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:805)
        在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:621)
        在dalvik.system.NativeStart.main(本机方法)

摇篮配置

 应用插件:'机器人'安卓{
    signingConfigs {
        配置{
            keyAlias​​keyalias
            keyPasswordXXXXXXXXX
            storeFile文件(路径密钥库)
            storePasswordXXXXXXX
        }
    }
    compileSdkVersion 19
    buildToolsVersion '19 .1.0
    defaultConfig {
        14的minSdkVersion
        targetSdkVersion 19
        版本code 1
        的versionName1.0
    }
    buildTypes {
        发布 {
            minifyEnabled真
            signingConfig signingConfigs.config
            proguardFiles getDefaultProguardFile('proguard的-android.txt'),'proguard的-rules.txt
        }
    }
}依赖{
    编译文件树(导演:'库',包括:['的* .jar'])
    编译com.google.android.gms:播放服务:6.1 +。
    编译com.android.support:appcompat-v7:20.+
    编译com.android.support:support-v13:21.0.0
    编译com.android.support:support-v4:21.0.0    编译com.squareup.retrofit:改造:1.8.0
    编译com.squareup.picasso:毕加索:2.4.0
    编译com.squareup.okio:奥基奥:1.0.1
    编译com.squareup.okhttp:okhttp:2.1.0
    编译com.squareup.okhttp:okhttp-的URLConnection:2.1.0
}

的ProGuard

  -dontwarn改造。**
-dontwarn奥基奥。**
-dontwarn com.squareup.okhttp。**


解决方案

您的问题是,ProGuard的重新命名code和您使用的是反射。

最简单的解决将是禁用的ProGuard(集 minifyEnabled 假在的build.gradle 文件)。

如果你想保持启用ProGuard的,你需要添加 -keep yourclass 在你的ProGuard规则文件。
例如,如果我想保持活动类:

  -keep类android.app.Activity

如果我想保留所有的 android.app <​​/ code>包:

  -keep类android.app。**

在这里 proguard的更多信息。

Currently I am facing an issue of app crashing when starting after signing in release mode, but in debug mode it worked fine.

I could not figure out the problem right now, even though i did research and keep look for solutions but i still not managed to make it works

When the app crashed it doesn't show in my app logcat but shown in "No Filter"

The errors was

java.lang.NoSuchFieldError: NO_ACTION
        at java.lang.reflect.Method.getDefaultValue(Native Method)
        at java.lang.reflect.Method.getDefaultValue(Method.java:353)
        at libcore.reflect.AnnotationFactory.getElementsDescription(AnnotationFactory.java:75)
        at libcore.reflect.AnnotationFactory.<init>(AnnotationFactory.java:112)
        at libcore.reflect.AnnotationFactory.createAnnotation(AnnotationFactory.java:94)
        at java.lang.reflect.Field.getAnnotation(Native Method)
        at java.lang.reflect.Field.getAnnotation(Field.java:209)
        at com.a.g.a(Unknown Source)
        at com.a.b.a(Unknown Source)
        at com.a.b.a(Unknown Source)
        at com.a.b.onCreate(Unknown Source)
        at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
        at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
        at com.a.h.c(Unknown Source)
        at com.a.h.a(Unknown Source)
        at com.a.a.a(Unknown Source)
        at com.socialproperty.app.service.AppController.onCreate(Unknown Source)
        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)
        at com.lbe.security.service.core.client.b.x.callApplicationOnCreate(Unknown Source)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4361)
        at android.app.ActivityThread.access$1500(ActivityThread.java:138)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1259)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5034)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:805)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:621)
        at dalvik.system.NativeStart.main(Native Method)

Gradle Configuration

apply plugin: 'android'

android {
    signingConfigs {
        config {
            keyAlias 'keyalias'
            keyPassword 'xxxxxxxxx'
            storeFile file('path to keystore')
            storePassword 'xxxxxxx'
        }
    }
    compileSdkVersion 19
    buildToolsVersion '19.1.0'
    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled true
            signingConfig signingConfigs.config
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.google.android.gms:play-services:6.1.+'
    compile 'com.android.support:appcompat-v7:20.+'
    compile 'com.android.support:support-v13:21.0.0'
    compile 'com.android.support:support-v4:21.0.0'

    compile 'com.squareup.retrofit:retrofit:1.8.0'
    compile 'com.squareup.picasso:picasso:2.4.0'
    compile 'com.squareup.okio:okio:1.0.1'
    compile 'com.squareup.okhttp:okhttp:2.1.0'
    compile 'com.squareup.okhttp:okhttp-urlconnection:2.1.0'
}

ProGuard

-dontwarn retrofit.**
-dontwarn okio.**
-dontwarn com.squareup.okhttp.**

解决方案

Your problem is that proguard is renaming your code and that you're using reflection.

The easiest fix would be to disable proguard (set minifyEnabled to false in your build.gradlefile).

If you want to keep proguard enabled, you need to add -keep yourclass in your proguard rules file. Example if I want to keep the Activity class:

-keep class android.app.Activity

If I want to keep all the android.app package:

-keep class android.app.**

More informations on proguard here.

这篇关于安卓:在释放模式后签约启动时应用崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆