切换Android studio北极狐版本遇到的坑

        近期因需要集成新的第三方库,发现其用的是jdk11,而且sdk版本较高,无法兼容之前的老项目代码,故抽时间把as更新升级到北极狐版本,重新进行适配。下面记录一下其中遇到的一些问题。

问题1:gradle版本不匹配。

        原来的as 3.0我的配置如下:

        gradle-wrapper.properties          gradle-4.1-all.zip

        build.gradle                                gradle:3.0.0      

        升级到北极狐之后,as提示需要将gradle-wrapper里面配置到4.8以上,其搭配使用的build.gradle里面版本号也需要更新。综合测试几个版本,最终配置如下:

        gradle-wrapper.properties          gradle-6.7.1-all.zip

        build.gradle                                 gradle:4.2.1  

  手动下载gradle的地址如下: Gradle Distributions

问题2:jdk11的安装

        参考如下: 2020最新java JDK11下载、安装与环境变量配置图文教程 - 知乎 (zhihu.com)

问题3:依赖库的变更

        因Jcenter服务关闭,切换到mavenCentral,参考如下:Jcenter服务即将关闭,改用mavenCentral

问题4:

        JNI的库报重复定义:

2 files found with path 'lib/armeabi-v7a/lib*****.so'.
If you are using jniLibs and CMake IMPORTED targets, see
https://developer.android.com/r/tools/jniLibs-vs-imported-targets

修改build.gradle如下:

sourceSets{
    main{
        jniLibs.srcDirs=[]//解决as更新到4.0以后的两个lib库的问题
        //jniLibs.srcDirs=['libs']
    }
}

或者增加如下:

packagingOptions {
    pickFirst 'lib/armeabi-v7a/lib****.so'
    pickFirst 'lib/armeabi-v7a/libiconv.so'
}

参考来源:Execution failed for task ':sdk:mergeDebugNativeLibs' - 长尾景虎 - 博客园 (cnblogs.com)

问题5.     

        Android8.0之后的服务启动方式变更。

adb shell am start-foreground-service -n com.xx.xxx/com.xx.xxx.MainService

问题6.   

        运行在加载JNI库的位置System.loadLibrary("****");崩溃,没有详细崩溃信息。能看到的报错如下:

05-29 11:33:02.855  1074  1116 I ActivityManager: Start proc 11437:com.**.**/u0a95 for service {com.**.**/com.**.**.MainService}
05-29 11:33:02.890 11437 11437 E AndroidRuntime: Process: com.**.**, PID: 11437
05-29 11:33:02.890 11437 11437 E AndroidRuntime:        at com.**.**.JniApi.<clinit>(JniApi.java:33)
05-29 11:33:02.890 11437 11437 E AndroidRuntime:        at com.**.**.JniApi.getInstance(JniApi.java:63)

很奇怪的错误,折腾了一整天的时间,后面实在没招了换到另一款RK芯片Android10的机型上跑,才出现较为详细的加载库报错信息。如下:

05-29 11:29:44.878 18148 18148 E AndroidRuntime: java.lang.UnsatisfiedLinkError: dlopen failed: library "libcutils.so" not found: needed by /data/app/~~UGG4vA7PaAc3XqhaCSnf-w==/com.***.***-lGjPNN8pdMCyliNwuJyWEA==/lib/arm/lib****.so in namespace classloader-namespace
05-29 11:29:44.878 18148 18148 E AndroidRuntime:        at com.***.***.JniApi.<clinit>(JniApi.java:33)

初步猜测是MTK平台或者次级开发商对系统进行了裁剪,导致报错不全。

add: 另一种处理方式:使用 objdump -p lib*****.so | grep NEEDED  查询出依赖库信息,然后逐个去设备里面找是否存在此库。

问题7 

        启动服务报错:Reason: Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord{

参考 Android Service 系列2. Android开机启动Service和“ did not then call Service.startForeground()”异常-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值