由于疫情原因以及公司要求 在家已经呆了快两个月了,作为大四快毕业的实习生来说,这两个月肯定没有静下心来好好学习。。。哈哈哈
但是要准备写毕业论文了,所以准备把以前写过的程序当做毕业设计,于是时隔七周重新打开As 但是将APK安装到手机上时 出现了闪退现象,但是在电脑模拟器上却能正常运行。
以前出现过一次这种情况
原因 res 路径下 有 drawable 和 mipmap 两个文件夹以及其他文件夹 将图片放到了 drawable 文件夹下出现报错
解决方法 将图片放到 mipmap 文件夹中。这里需要注意 后缀名为 .xml 的图片可以放到drawable文件夹里 问题解决
当然BUG千千万万 遇到其他问题解决方法:
1.直接用数据线连接电脑 进行真机测试 开启USB调试 以及允许USB安装程序 后 通过AS查看 报错日志
2.如果手机连接电脑时AS检测不了 或者说 手机连接电脑后只能充电 那么恭喜你 肯定比 直接连线麻烦
解决办法:
1.换新手机
2.只能通过AS打出APK安装包 然后 通过QQ 发到手机上去安装 注意!!!!
需要在你的代码中建立一个打印log的类 通过手机运行 将错误信息打印在 手机中 然后查看错误信息 将打印log的类需要的代码发到下面
//手机本地存储报错信息
public class MyCrashHandler implements Thread.UncaughtExceptionHandler {
@Override
public void uncaughtException(Thread t, Throwable e) {
//在这里处理异常信息
saveCrashInfoToFile(e);
}
/**
* 保存错误信息到文件中
* @param ex
*/
private void saveCrashInfoToFile(Throwable ex) {
Writer writer = new StringWriter();
PrintWriter printWriter = new PrintWriter(writer);
ex.printStackTrace(printWriter);
Throwable exCause = ex.getCause();
while (exCause != null) {
exCause.printStackTrace(printWriter);
exCause =exCause.getCause();
}
printWriter.close();
long timeMillis = System.currentTimeMillis();
//错误日志文件名称
String fileName = "crash-" + timeMillis + ".txt";
//判断sd卡可正常使用
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
//文件存储位置
String path = Environment.getExternalStorageDirectory().getPath() + "/crash_logInfo/";
//上述文件地址找不到可以试下这个
// String path = MyApplication.getContext().getExternalCacheDir().getAbsolutePath() + "/crash_logInfo/";
File fl = new File(path);
//创建文件夹
if(!fl.exists()) {
fl.mkdirs();
}
try {
FileOutputStream fileOutputStream = new FileOutputStream(path + fileName);
fileOutputStream.write(writer.toString().getBytes());
fileOutputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
还需要建立一个 启动类
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
mContext = this;
MyCrashHandler myCrashHandler = new MyCrashHandler();
Thread.setDefaultUncaughtExceptionHandler(myCrashHandler);
}
private static Context mContext;
public static Context getContext(){
return mContext;
}
}
最后在清单文件中注册
此时运行APP报错之后去文件管理去找对应的文件夹下的txt文档就能看到报错信息了