Android 开发异常总结

在开发过程中遇到各种不太常见的问题,在此记录.

运行时异常

Android 8.1 apk 安装权限问题 android.permission.ACCESS_ALL_DOWNLOADS

targetVersion 28 应用内更新安装 apk 如果没有添加flag将会引起以下错误,在华为 8.1.0(27) 系统遇到此问题,但是三星 8.0(26) 系统则没有,估计是内部处理逻辑不同吧.

1
2
3
4
5
6
7
Writing exception to parceljava.lang.SecurityException: Permission Denial: reading com.android.providers.downloads.DownloadProvider uri content://downloads/all_downloads/7 from pid=3633, uid=10037 requires android.permission.ACCESS_ALL_DOWNLOADS, or grantUriPermission()
at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:631)
at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:501)
at android.content.ContentProvider$Transport.enforceFilePermission(ContentProvider.java:492)
at android.content.ContentProvider$Transport.openTypedAssetFile(ContentProvider.java:420)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:302)
at android.os.Binder.execTransact(Binder.java:698)

解决办法: 添加intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
完整安装代码

1
2
3
4
5
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(downloadFileUri, "application/vnd.android.package-archive");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
mContext.startActivity(intent);

编译异常

SSL异常

电脑开着代理后,AS编译时有新的三方库更新时,会提示SSL错误
解决办法:关闭代理,重启AS(必须 command+q 退出AS)

app:transformNativeLibsWithStripDebugSymbolForProduceRelease, not found mips64el-linux-android-strip

项目环境 AS 3.2.1, Gradle 3.0.1, NDK 17, 配置 NDK 后出现如下异常打开异常里抛出的文件路径发现没有找到这个文件,原因是 17 里删除了这个配置.
解决办法:

  1. Gradle 版本升级到最新,现在是 3.2.1,但是这样做太麻烦了,如果版本较低要做大量的适配工作.
  2. 下载 NDK 16,将 ndk-bundle/ 文件夹下的文件全部替换掉
  3. 下载 NDK 16,将 mips64el-linux-android-strip 复制到抛错提示的文件路径里

PKIX path building failed

报错信息 sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
解决办法:
关闭代理,点击 File->invalidate Caches/Restart 重启 AS