当前位置: 首页 > 知识库问答 >
问题:

应用程序在发布时崩溃,但在调试模式下运行良好

简烨烁
2023-03-14

我有应用程序上传在玩商店。它在调试模式下运行良好,但当我从play store下载相同的APK(发布模式)时,它就崩溃了。我无法确定堆栈跟踪没有给出准确的错误位置。

java.lang.RuntimeException:在Android.os.AsyncTask$3上完成(asynctask.java:318)在java.util.concurrent.FutureTask.FinishCompletion(futureTask.java:354)在java.util.concurrent.FutureTask.SetException(futureTask.java:223)在java.util.concurrent.FutureTask.Run(futureTask.java:242)在Android.os.AsyncTask$SerialExecutor$1上运行(asynctask.java:243)在java.util.concurrent.ThreadPoolExecutor.Runworker(在java.util.concurrent.ThreadPoolExecutor$worker.run(ThreadPoolExecutor.java:607)在java.lang.Thread.run(Thread.java:761)由以下原因引起:java.lang.NullPointerException:在com.biocare.fots.HomeActivity$GetEmpDetailStask.DoinBackground(HomeActivity.java)或在com.biocare.fots.HomeActivity$GetEmpDetailStask.DoinBackground(HomeActivity.java)在Android.os.AsyncTask$2。在java.util.concurrent.FutureTask.run(FU tureTask.java:237)在Android.os.AsyncTask$SerialExecutor$1上运行(asynctask.java:243)在java上运行.util.concurrent.ThreadPoolExecutor.RunWorker(ThreadPoolExecutor.java:1133)位于java.util.concurrent.ThreadPoolExecutor$worker.run(ThreadPoolExecutor.java:607)位于java.lang.Thread.run(Thread.java:761)

上面的堆栈跟踪是从Play Store Developer控制台复制的。在Firebase控制台中显示了相同的错误。

下面是我的AsyncTask代码

 private static class GetEmpDetailsTask extends AsyncTask<Void, Void, Void> {

    WeakReference<HomeActivity> mContext;

    GetEmpDetailsTask(HomeActivity context) {
        mContext = new WeakReference<>(context);
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... voids) {
        if(android.os.Debug.isDebuggerConnected())
            android.os.Debug.waitForDebugger();
        AppDatabase appDatabase = AppDatabase.getAppDatabaseInstance(
                mContext.get());
        Employee employee = appDatabase.employeeDAO().get();
        FotApplication.Employee.Id = employee.employeeId;
        FotApplication.Employee.Name = employee.firstName + " "
                + employee.lastName;
        FotApplication.Employee.Designation = employee.empDesignationName;
        FotApplication.Employee.DesignationDesc = employee.empDesignationName;
        FotApplication.Employee.Email = employee.email;
        return null;
    }


    @Override
    protected void onPostExecute(Void aVoid) {
        mContext.get().mTvEmpName.setText(FotApplication.Employee.Name);
        mContext.get().mTvEmpEmail.setText(FotApplication.Employee.Email);
    }
}

下面是我的build.gradle(模块:应用程序):

apply plugin: 'com.android.application'


android {
    signingConfigs {
        config {
            keyAlias 'abc'
            keyPassword 'test'
            storeFile file('path/to/keystore.jks')
            storePassword 'testpass'
        }
    }
    compileSdkVersion 29
    defaultConfig {
        applicationId "com.myapp.fats"
        minSdkVersion 22
        targetSdkVersion 29
        versionCode 38
        versionName "2.1.9"
        vectorDrawables.useSupportLibrary = true
    }
    buildTypes {
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    productFlavors {
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.google.android.material:material:1.0.0'
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'androidx.recyclerview:recyclerview:1.0.0'
    implementation 'com.google.android.gms:play-services-location:17.0.0'
    implementation 'com.google.android.gms:play-services-maps:17.0.0'
    implementation 'com.google.android.gms:play-services-places:17.0.0'
    implementation 'com.jakewharton:butterknife:8.6.0'
    implementation 'com.google.firebase:firebase-messaging:19.0.1'
    implementation 'com.google.firebase:firebase-core:17.0.1'
    implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'
    implementation 'androidx.vectordrawable:vectordrawable:1.0.1'
    annotationProcessor 'com.jakewharton:butterknife:8.6.0'
    annotationProcessor 'androidx.room:room-compiler:2.1.0'
    implementation 'androidx.room:room-runtime:2.1.0'
    implementation 'androidx.cardview:cardview:1.0.0'
    implementation 'com.google.android.material:material:1.0.0'
    implementation 'com.squareup.retrofit2:retrofit:2.3.0'
    implementation 'com.google.code.gson:gson:2.8.5'
    implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.4.1'
    implementation 'com.squareup.okhttp3:okhttp:3.10.0'
    implementation 'com.afollestad.material-dialogs:commons:0.9.6.0'
    implementation 'de.hdodenhof:circleimageview:2.2.0'
    implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'
    implementation 'androidx.lifecycle:lifecycle-viewmodel:2.0.0'
    implementation 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1'
    implementation 'com.wang.avi:library:2.1.3'
    implementation 'androidx.gridlayout:gridlayout:1.0.0'
    implementation ('com.crashlytics.sdk.android:crashlytics:2.10.1@aar') {
        transitive = true
    }
}
repositories {
    mavenCentral()
}

apply plugin: 'com.google.gms.google-services'
apply plugin: 'io.fabric'

来自Android Studio的Logcat:

 Process: com.biocare.fots, PID: 15978
java.lang.RuntimeException: An error occurred while executing doInBackground()
    at android.os.AsyncTask$3.done(AsyncTask.java:353)
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
    at java.util.concurrent.FutureTask.run(FutureTask.java:271)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
    at java.lang.Thread.run(Thread.java:764)
 Caused by: java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.biocare.database.n.b' on a null object reference
    at com.biocare.fots.HomeActivity$a.a(Unknown Source:20)
    at com.biocare.fots.HomeActivity$a.doInBackground(Unknown Source:2)
    at android.os.AsyncTask$2.call(AsyncTask.java:333)

共有1个答案

危文乐
2023-03-14

我想,如果您的DAO(F.E.Room)使用反射,那么当您使用minifyenable=true构建发行版apk时,您的DAO将无法找到某些内容。试着检查一下你的护卫。

是的,你有混淆的问题。java.lang.String com.biocare.database.n.b”这个“n.b”表示在模糊处理之前您有正确的路径,但在模糊处理之后,路径被更改为值“n”和“b”。您应该在proguard排除列表中添加这些文件(我不知道某些文件,因为我不知道您的代码)。

您可以在proguard文档中阅读更多内容。这也是有用的

 类似资料:
  • 我是编程新手,正在尝试制作一款android应用程序。最近几天我在使用调试器时遇到了麻烦。该应用程序在正常运行模式下工作正常。应用程序连接到firebase,所有数据都保存在那里。如果我尝试以学生身份在调试模式下登录,应用程序将立即崩溃。如果我以教授的身份登录,我会进入主页,但如果我单击“下一步”按钮,我会返回到登录页面,它会变为运行模式。我真的不知道问题出在哪里,但调试器和firebase有什么

  • 问题内容: 就像我在标题中说的那样,我正在为iPhone编写一个应用程序,该应用程序可以在调试模式下完美运行,但是当我将其构建为发行版并通过TestFlight安装时,它会崩溃。由于崩溃日志,它可能必须使用以下代码行: 我使用的是Brother的框架而不使用AirPrint进行打印,但是我认为这不是问题,因为应用程序在对框架执行某些操作之前便崩溃了。它仅在我执行这些行的ViewController

  • 我想减小应用程序的大小,因此我在发布模式下使用,但由于此应用程序崩溃。下面是我的 Build.Gradle 我添加了proguard-rules.pro。如果我移除它,它会给我多个警告。 我的清单是这样的: 我也尝试过使用,但它仍然在发布模式下崩溃,在调试模式下运行良好。 我还尝试在依赖项中添加。但没有运气

  • 当我在除我的计算机之外的任何计算机上运行此代码的发行版时,我得到“已经停止工作”错误:使用系统;使用System.Collections.Generic;使用System.ComponentModel;使用System.Data;使用System.Drawing;使用System.LINQ;使用System.Text;使用System.Threading.Tasks;使用System.Window

  • 这里是我的主要活动 } 我感觉runOnUiThread方法有问题。感谢你的帮助.