当前位置:   article > 正文

Android Studio最近升级了大黄蜂版,旧项目搬到新项目的一些纠错记录_the project uses gradle 4.6 which is incompatible

the project uses gradle 4.6 which is incompatible with java 11 or newer.

引言
AS一直也没升级,最近在做一些尝试的时候因为gradle版本太低而被迫终止,所幸升级了算了,升完级后旧项目自然运行不了,AS版本差异太大,断代严重,导致项目结构差异也非常大,直接新建个包名一致的项目,将旧项目搬到新项目中,搬完后就开始改gradle,改引用,改清单文件。

之前运行旧项目时,报

Unable to start the daemon process. The project uses Gradle 4.6 which is incompatible with Java 11 or newer.
An exception occurred applying plugin request [id: 'com.android.application']
> Failed to apply plugin 'com.android.internal.application'.
   > Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.
     You can try some of the following options:
       - changing the IDE settings.
       - changing the JAVA_HOME environment variable.
       - changing `org.gradle.java.home` in `gradle.properties`.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

这是jdk版本选择的问题,File—Settings—Build—Build Tools—Gradle选jdk11就好。

app\build.gradle
当初root开发时,用C++实现了和屏幕交互的逻辑,编成了so文件,为了兼容这部分手机,就要加ndk和sourceSets这两块配置,否则就告知找不到so文件,奇怪的是旧版AS就不需要加ndk。

android {
    defaultConfig {
        ndk{
            abiFilters "armeabi"
        }
    }
    sourceSets.main { jniLibs.srcDirs = ['libs']; }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
get PatchStore::createDisableExceptionQarthFile method fail.
E/AndroidRuntime: FATAL EXCEPTION: main
    java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/-5iJvy2PSAdbDsylEPznshQ==/base.apk"],nativeLibraryDirectories=[/data/app/-5iJvy2PSAdbDsylEPznshQ==/lib/arm64, /system/lib64, /product/lib64]]] couldn't find "App.so"
        at java.lang.Runtime.loadLibrary0(Runtime.java:1012)
        at java.lang.System.loadLibrary(System.java:1672)
        at .main..<clinit>(.java:57)
        at java.lang.Class.newInstance(Native Method)
        at android.app.AppComponentFactory.instantiateApplication(AppComponentFactory.java:50)
        at androidx.core.app.CoreComponentFactory.instantiateApplication(CoreComponentFactory.java:52)
        at android.app.Instrumentation.newApplication(Instrumentation.java:1127)
        at android.app.LoadedApk.makeApplication(LoadedApk.java:1175)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6688)
        at android.app.ActivityThread.access$2000(ActivityThread.java:273)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2020)
        at android.os.Handler.dispatchMessage(Handler.java:112)
        at android.os.Looper.loop(Looper.java:216)
        at android.app.ActivityThread.main(ActivityThread.java:7625)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

接着就是把implementation fileTree(include: [‘*.jar’], dir: ‘libs’)和gson、okhttp等第三方搬过来了,其它都不需要搬过来。

dependencies {
    implementation 'androidx.appcompat:appcompat:1.3.0'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
    //以下就是从旧项目中搬过来的
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.google.code.gson:gson:2.8.5'
    implementation 'com.squareup.okhttp3:okhttp:3.2.0'
    implementation 'com.alibaba:fastjson:1.2.73'
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

main\AndroidManifest.xml
以前添加的权限中有几个警告,按Alt+回车后提示加

tools:ignore="ProtectedPermissions"
  • 1

加完后就OK了,因为改变系统设置的权限一般只有系统APP才有,所以编译器会有警告,加上这个后就忽略掉警告了。

Android P以后的应用程序要求默认使用加密连接,意味着 Android P 将禁止 App 使用所有未加密的连接,因此运行 Android P 系统的安卓设备无论是接收或者发送流量,未来都不能明码传输,需要使用下一代(Transport Layer Security)传输层安全协议,如果应用使用的是非加密的明文流量的http网络请求,则会导致该应用无法进行网络请求,https则不会受影响,同样地,如果应用嵌套了webview,webview也只能使用https请求。而 Android Nougat 和 Oreo 则不受影响。在Android P 使用HttpUrlConnection进行http请求会出现以下异常

 W/System.err: java.io.IOException: Cleartext HTTP traffic to **** not permitted
  • 1

使用OKHttp请求则出现

java.net.UnknownServiceException: CLEARTEXT communication ** not permitted by network security policy
  • 1

解决方法:来自《Android高版本联网失败报错:Cleartext HTTP traffic to xxx not permitted解决方法https://blog.csdn.net/gengkui9897/article/details/82863966》
1,APP改用https请求。
2,targetSdkVersion 降到27以下。
3,更改网络安全配置:
在res文件夹下创建一个xml文件夹,然后创建一个network_security_config.xml文件,文件内容如下:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>
  • 1
  • 2
  • 3
  • 4

接着,在AndroidManifest.xml文件下的application标签增加以下属性:

 android:networkSecurityConfig="@xml/network_security_config"
  • 1

4,在AndroidManifest.xml配置文件的标签中直接插入

    android:usesCleartextTraffic="true"
  • 1

改引用
升级大黄蜂后,一些引用的方式也变了,还挺多的,之前是android打头,现在是androidx打头,具体可以去这里查看《support 迁移androidx,或androidx回退androidx 对比https://blog.csdn.net/frank7023/article/details/124426681》

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/746890
推荐阅读
相关标签
  

闽ICP备14008679号