IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android Studio最近升级了大黄蜂版,旧项目搬到新项目的一些纠错记录 -> 正文阅读

[移动开发]Android Studio最近升级了大黄蜂版,旧项目搬到新项目的一些纠错记录

引言
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`.

这是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']; }
}
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)

接着就是把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'
}

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

tools:ignore="ProtectedPermissions"

加完后就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

使用OKHttp请求则出现

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

解决方法:来自《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>

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

 android:networkSecurityConfig="@xml/network_security_config"

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

    android:usesCleartextTraffic="true"

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

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-04-28 12:00:36  更:2022-04-28 12:02:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 23:23:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码