共享时应用程序崩溃,使用调试模式测试时工作正常

时间:2017-01-18 10:09:44

标签: android

我已经在多个设备上测试了我的应用

  

Jelly bean,Kitkat,Lollipop,Marshmallow

直接从我的应用程序调试,也可以从一部手机分享到另一部手机。

它在所有手机中都可以完全正常工作(不包括一个)

我有一个 kitkat(4.4.4) Moto G手机应用程序在其他设备上工作正常但是当我分享此应用并运行时,应用崩溃< / strong>在它打开之前。

不知道该怎么办,因为我无法知道错误是什么,因为使用 usb调试运行正常。

我的Gradle Build

android {
    compileSdkVersion 24
    buildToolsVersion "25.0.1"

    defaultConfig {
        applicationId "com.abc.xyz"
        minSdkVersion 16
        targetSdkVersion 24

    }
    buildTypes {

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

}

2 个答案:

答案 0 :(得分:1)

我也遇到过这个问题,我能找到的唯一可行解决方案是从android studio中的设置中禁用instant run。然后执行干净的构建并生成新的app-debug.apk。与多个设备分享此apk

答案 1 :(得分:0)

这不是直接的解决方案,但是它可以帮助您找到应用崩溃的解决方案。

添加CustomExceptionHandler类,该类将为应用程序中的任何崩溃写入日志

public class CustomExceptionHandler implements UncaughtExceptionHandler {

private UncaughtExceptionHandler defaultUEH;

private String localPath;

private String url;

/* 
 * if any of the parameters is null, the respective functionality 
 * will not be used 
 */
public CustomExceptionHandler(String localPath) {
    this.localPath = localPath;
    this.defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
}

public void uncaughtException(Thread t, Throwable e) {
    String timestamp = TimestampFormatter.getInstance().getTimestamp();
    final Writer result = new StringWriter();
    final PrintWriter printWriter = new PrintWriter(result);
    e.printStackTrace(printWriter);
    String stacktrace = result.toString();
    printWriter.close();
    String filename = timestamp + ".stacktrace";

    if (localPath != null) {
        writeToFile(stacktrace, filename);
    }


    defaultUEH.uncaughtException(t, e);
}

private void writeToFile(String stacktrace, String filename) {
    try {
        BufferedWriter bos = new BufferedWriter(new FileWriter(
                localPath + "/" + filename));
        bos.write(stacktrace);
        bos.flush();
        bos.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

并在mainActivity中添加此代码

if(!(Thread.getDefaultUncaughtExceptionHandler() instanceof CustomExceptionHandler)) {
Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(
        "/sdcard/<desired_local_path>"));
}

希望这会对你有帮助......!