记录学习android遇到的坑

1.

Build command failed.
Error while executing process D:\AndroidSDK\cmake\3.6.4111459\bin\cmake.exe with arguments {--build E:\NK\AndroidProject\app\.externalNativeBuild\cmake\debug\arm64-v8a --target native-lib}
ninja: error: '../../../../build/intermediates/cmake/debug/obj/arm64-v8a/libmy-lib.so', needed by '../../../../build/intermediates/cmake/debug/obj/arm64-v8a/libfdk-lib.so', missing and no known rule to make it
 

项目说明,我引用的cMake是在moudle里面的,出现这个问题就表示链接时时候找不到对应架构的库,所以我在modle里面找到了这份cMakeLists.text文件,查看其中的内容发现没有什么错误是明显能看到,毕竟是一大堆add..set...,于是我找到了配置ndk对应架构库的build.gradle中发现对应的arm64-v8a这个so包并不存在build中的cmake/debug/obj中,所以我把配置的ndk架构库删掉了arm64-v8a这个,再build就不报错了,对应的,在build增加这个so库我估计也能解决问题

2.

Manifest merger failed with multiple errors, see logs

项目是接手公司项目所引发的错误,发生这个错误时需要再terminal控制台中输入gradlew processDebugManifest --stacktrace查看,当输入gradlew processDebugManifest --stacktrace时会出现错误信息,我截了一点错误信息如下:* What went wrong:
A problem occurred evaluating project ':DatePicker'.
> java.lang.UnsupportedClassVersionError: com/android/build/gradle/LibraryPlugin : Unsupported major.minor version 52.0

初看这个错误信息狠疑惑,查了一下发现根本原因是JDK版本与gradle版本没有对应上,对应的52.0的jdk对应版本应该是1.8,于是打开project Structure换上自己的jdk

然后重新clean一下运行,发现没问题了

3.
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object reference

这个问题的出现是我在android中加载h5的页面点击图片选择或者拍照出现的的,根本的原因就是在android版本7.0之后Android不再允许在app中把file://Uri暴露给其他app,因为这样事不安全的,所以geogle提供了解决方法给我们。

解决方法:

首先在AndroidManifest.xml中添加provider,配置属性,

  • android:authorities
    是用来标识provider的唯一标识,在同一部手机上一个"authority"串只能被一个app使用,冲突的话会导致app无法安装。
  • android:exported必须设置成false,后面异常会讲为什么
  • android:grantUriPermissions用来控制共享文件的访问权限,也可以在java代码中设置
<provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="{你的包名}.fileProvider"
            android:exported="false"
            android:grantUriPermissions="true"
            tools:replace="android:authorities">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths" />
</provider>

当我们配置完provider后就可以修改代码了

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            // android7.0注意uri的获取方式改变
            Uri photoOutputUri = FileProvider.getUriForFile(
                    context,
                    BuildConfig.APPLICATION_ID + ".fileProvider",
                    new File(mCameraFilePath));
            intent2.putExtra(MediaStore.EXTRA_OUTPUT, photoOutputUri);
        } else {
            intent2.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(mCameraFilePath)));
        }

异常处理

  • java.lang.SecurityException: Provider must not be exported
    解决方案:android:exported必须设置成false
  • Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.PackageItemInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object reference
    解决方案:AndroidManifest.xml处的android:authorities必须跟mActivity.getPackageName() + ".fileprovider"一样


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值