由于疫情原因以及公司要求 在家已经呆了快两个月了,作为大四快毕业的实习生来说,这两个月肯定没有静下心来好好学习。。。哈哈哈
但是要准备写毕业论文了,所以准备把以前写过的程序当做毕业设计,于是时隔七周重新打开As 但是将APK安装到手机上时 出现了闪退现象,但是在电脑模拟器上却能正常运行。
以前出现过一次这种情况
原因 res 路径下 有 drawable 和 mipmap 两个文件夹以及其他文件夹 将图片放到了 drawable 文件夹下出现报错 解决方法 将图片放到 mipmap 文件夹中。这里需要注意 后缀名为 .xml 的图片可以放到drawable文件夹里 问题解决
当然BUG千千万万 遇到其他问题解决方法:
1.直接用数据线连接电脑 进行真机测试 开启USB调试 以及允许USB安装程序 后 通过AS查看 报错日志
2.如果手机连接电脑时AS检测不了 或者说 手机连接电脑后只能充电 那么恭喜你 肯定比 直接连线麻烦 解决办法: 1.换新手机 2.只能通过AS打出APK安装包 然后 通过QQ 发到手机上去安装 注意!!!! 需要在你的代码中建立一个打印log的类 通过手机运行 将错误信息打印在 手机中 然后查看错误信息 将打印log的类需要的代码发到下面 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210208184229227.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FzX3RoaW4=,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210208184241671.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FzX3RoaW4=,size_16,color_FFFFFF,t_70)
//手机本地存储报错信息
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();
}
}
}
}
还需要建立一个 启动类
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210208184422573.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FzX3RoaW4=,size_16,color_FFFFFF,t_70)
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;
}
}
最后在清单文件中注册
![在这里插入图片描述](https://img-blog.csdnimg.cn/93ef450ca27a445c84171e264956cbb0.png)
此时运行APP报错之后去文件管理去找对应的文件夹下的txt文档就能看到报错信息了
|