本帖子是个人开发中遇到的错误,会在此处做一个记录,会持续更新。
1. 导入依赖时,有时会报错(类似下列错误)
More than one file was found with OS independent path ‘META-INF/DEPENDENCIES’
解决方式:
在build.gradle 中 添加下列代码(根据个人情况自行修改):
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/notice.txt'
exclude 'META-INF/ASL2.0'
}
2. WebView加载过程中 对于Https 资源的加载问题。 可能会出现 https 相关的图片无法显示、 或者 相关的css 样文件无法显示等
重写webViewClient的以下方法即解决
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){
handler.proceed();
}
3. DexArchiveMergerException: Unable to merge dex
这个错误,困扰了我几个小时,在网上看了好多博客,有删除.gradle 然后 clean的, 也有其他的,但多半不能解决问题。 我这边是通过 检测重复的依赖,或者重复的包 解决的。
检测一下是否导入了重复的依赖 或则 jar包。
4.AES 加密中 AES/CBC/NoPadding 情况下, 当不足 16字节 或者 16 * n 个字节的情况下, 会导致加密失败 即 null 。我们可以对不足部分进行 补充, 可以是不可见字符 , 或者… 自己定义吧。当然,解密的过程也会出现不可见字符, 这个自己处理一下便可以了
/**
* 使用 noPadding 加密 不足16位部分 使用 0x00 不可见字符填充
* @param beforeStr
* @return
*/
private static String processString(String beforeStr) {
if (beforeStr == null)return null;
int length = beforeStr.getBytes().length;
int otherLength = 16 - length % 16;
byte[] bytes = beforeStr.getBytes();
byte[] newBytes = new byte[length + otherLength];
for (int i = 0; i < newBytes.length; i++) {
if (i < length){
newBytes[i] = bytes[i];
}else {
newBytes[i] = 0x00;
}
}
return new String(newBytes);
}
5. 关于Gson解析异常:Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $
检测json 字符串,乱码 或者 包含空格、 不可见字符等。都会导致解析失败。
6. 遇到 release 版本与 debug 版本表现不一样的情况下, 如果你的项目里面有混淆,八成是混淆代码部分出了问题 。检测表现不同或者是奔溃的地方,找到对于的 类或者 代码 块, 看是否在混淆文件里面进行的处理。(因为半信半疑的想法,在这个不起眼的小问题上面浪费了 数个小时)
7.报错: 无法保存裁剪过的图片
对于调用系统裁剪的代码中由以下这样一行
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri1);
这行代码的意思是将图片保存到 我们所提供的uri1 中。
android4.4以下,可以正常, 4.4以上 当uri 是 应用内目录就会有这样的问题。等于是 一个应用要往另外一个应用保存数据,这显然是不被允许的。
解决方式:
1.删除该行。
2.intent.putExtra(“return-data”, true);
3.在onActivityResult 的回调中
Bitmap bitmap = data.getParcelableExtra("data");
来获取图片,然后就可以做我们想做的操作了。
Parcelable 报错
Unmarshalling unknown type code 3670065 at offset 724
出现这样的错误时因为序列化和反序列话的顺序不一致导致的
Gradle 报错 unable to Merge dex
目前预测 两个原因:
1. 添加了重复的依赖 或者 jar 包 会报这个错。
2. 方法数越界 65535问题。 可以在gradle Console 中 run -info 查看详细的报错信息。
WebView 定位问题
需要添加如下代码,即可定位:
//webview定位相关设置
settings.setDomStorageEnabled(true);
settings.setGeolocationEnabled(true);
//settings.setGeolocationDatabasePath(getFilesDir().getPath());
progressWebView.setWebChromeClient(new WebChromeClient() {
@Override
public void onGeolocationPermissionsShowPrompt(String origin, Callback callback) {
callback.invoke(origin, true, true);
super.onGeolocationPermissionsShowPrompt(origin, callback);
}
});