Android 编译版本升级target 33

这篇具有很好参考价值的文章主要介绍了Android 编译版本升级target 33。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

升级结果整理

升级步骤一:选择编译版本

应用编译版本:

compileSdk = 33
minSdk = 26
targetSdk = 33

环境编译版本:

kotlin版本未改变,仅升级了,gradle编译版本。

build.gradle配置:
classpath 'com.android.tools.build:gradle:7.2.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10"
gradle-wrapper.properties 配置:
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip

升级步骤二:解决library编译问题

1、修改 library 的 build.gradle 文件
  • 编译版本修改
android {
    namespace 'com.yunzhijia.common.ui.v10'
    compileSdk rootProject.ext.compileSdk

    defaultConfig {
        minSdk rootProject.ext.minSdk
    }
 }
  • kotlin配置修改,在build.gradle增加配置 viewBinding
buildFeatures {
    viewBinding true
}
* 在build.gradle增加配置 jvmTarget
kotlinOptions {
    jvmTarget = "1.8"
}

不过可以全部配置。

allprojects {
    gradle.projectsEvaluated {
        tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile.class){
            kotlinOptions {
                jvmTarget = "1.8"
            }
        }
    }
}
2、修改library编译异常问题

library:包括基础库,func库,biz库,还有其他未分类的库,即除app以外的所有库。

主要有以下几大类问题:

  • 问题1:namespace不一致,导致R文件路径异常,直接修改R文件路径即可。

  • 问题2:资源使用异常,部分lib 使用的是app里面或者其他lib里面的资源,但是他们又不会去依赖他。
    解决:增加依赖资源代码,把资源下沉。包括 string、dimen、drawable等等

  • 问题3:menifest export 文件修改,增加配置即可。
    https://developer.android.com/about/versions/12/behavior-changes-12?hl=zh-cn#exported

  • 问题4: library 冲突问题修改
    这里碰到的冲突问题,例如zoom和腾讯会议,存在lib冲突,目前是zoom未使用,问题未解决。其他的冲突,通过导入同一个版本去处理。

升级步骤三:解决app编译问题

1、修改build.gradle

同library,这里仅增加target的修改

2、修改menifest文件

主要修改 menifest export

3、修改部分类的R文件路径

升级步骤四:解决app运行崩溃问题

1、处理api 31导致的崩溃

仅有蓝牙获取崩溃。

java.lang.RuntimeException: Unable to create application com.kdweibo.android.config.KdweiboApplication: java.lang.SecurityException: Settings key: <bluetooth_name> is only readable to apps with targetSdkVersion lower than or equal to: 31
Caused by: java.lang.SecurityException: Settings key: <bluetooth_name> is only readable to apps with targetSdkVersion lower than or equal to: 31
2、其他崩溃异常 - 未处理

由于其他崩溃,不影响使用,暂时就不去处理了。

升级过程记录

升级策略

策略1: 最开始我是直接对整个应用,进行target 33升级,然后去处理问题,结果不尽理想,很多问题,找不到原因,浪费了不少时间。
策略2: 既然整体搞不定,我们就变个方式,从 library 一层一层的开始处理

升级模式
方式1:直接升级到最新版本,更换编译语言,同最新的 as 创建的demo
gradle & kotlin 版本,build.gradle:

plugins {
id 'com.android.application' version '8.1.1' apply false
    id 'org.jetbrains.kotlin.android' version '1.8.10' apply false
}

插件导入,移入到 setting.gradle

pluginManagement {
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}

rootProject.name = "My Application"
include ':app'

但是碰到的问题,接踵而至,语法有点不熟悉,写起来很费力,kotlin版本依赖不对,1.8太高了,之前都是用的1.6,而且最关键的问题是,jdk的版本问题,jdk8升级到jdk11,没多少语法&编译问题,但是使用 1.8,jdk要求17,
Android 编译版本升级target 33,android
这个把我坑的不要不要的。很多编译问题,解不完,根本解不完。
最后我放弃了。
对了,说明一下吧,放弃的根本原因是,我调研的差不多的时候,想起来,flutter我还没进行处理,项目里面有flutter,然后我就尝试编译flutter,郁闷的事情来了,kotlin的版本,还是什么问题,flutter根本编译不通过,具体原因,我记不得了。
对了,提供一些flutter只是:
flutter 3.7.12版本支持 target33,官方在这个版本做了支持,由于我写文档有点晚,链接资料,都不能提供了。

方式2:我们就按照官方提供的,flutter项目的最高版本作为参考
build.gradle 文件,大家用 as 自动生成flutter项目,就能看到了。

buildscript {
    ext.kotlin_version = '1.7.10'
    repositories {
        google()
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:7.2.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
    project.evaluationDependsOn(':app')
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
include ':app'

def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
def properties = new Properties()

assert localPropertiesFile.exists()
localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }

def flutterSdkPath = properties.getProperty("flutter.sdk")
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"

官方kotlin的版本,也就1.7.10,由于项目大量使用1.6.10,我这里对这个也没进行升级,所以,最终考虑,使用版本为:
kotlin:1.6.10
gradle:7.2.0

// 文件:build.gradle
classpath 'com.android.tools.build:gradle:7.2.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10"
        
// 文件:gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip

编译问题:

编译报错 1

错误日志1:

> A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable
   > Duplicate class com.tencent.kapalaiadapter.ReflecterHelper found in modules jetified-ilivesdk-1.9.6-runtime (com.tencent.ilivesdk:ilivesdk:1.9.6) and jetified-xcast-3.12.203.42-runtime (com.tencent.wemeet.third-party:xcast:3.12.203.42)

Android 编译版本升级target 33,android
错误日志2:
举例2:
Duplicate class androidx.window:window xxx
window里面的类的文件重复了。

解决方式: 查询模块之间的依赖关系
查询所有模块:

./gradlew :app:dependencies > deps.txt

查询单个模块:

./gradlew app:dependencyInsight > window.txt --configuration stgdebugRuntimeClasspath --dependency  androidx.window:window

第一个文件处理:
我这边查询到,这个类是2个第三方库导入的,但是我没想到什么好的解决方法,但是如果这个有问题,老版本应该也存在问题,最后查询到,老版本的导入的人,根本没处理这个问题,最后查询到,因为编译的时候,有一个模块根本不会编译到。尴尬了,我处理的时候,是都编译的,导致我浪费了不少时间。后续我在想想怎么处理。
Android 编译版本升级target 33,android

编译报错 2

同样到,我这边碰到一个问题:

Execution failed for task ':app:minifyMilDebugWithProguard'.
> java.io.IOException: proguard.ParseException: Expecting type and name instead of just 'setExtensionCallback' before '(' in line 19 of file '/Users/amanda/.gradle/caches/transforms-2/files-2.1/6c359c85096a730900e9d7d240d81a88/window-1.0.0/proguard.txt'

This occurs when minifyEnabled and shrinkResources are both enabled, and the file in the error refers to the following code (begins at line 18):

`-if class androidx.window.layout.SidecarCompat {
  public setExtensionCallback(androidx.window.layout.ExtensionInterfaceCompat$ExtensionCallbackInterface);
}
-keep class androidx.window.layout.SidecarCompat$TranslatingCallback,
 androidx.window.layout.SidecarCompat$DistinctSidecarElementCallback {
  public onDeviceStateChanged(androidx.window.sidecar.SidecarDeviceState);
  public onWindowLayoutChanged(android.os.IBinder, androidx.window.sidecar.SidecarWindowLayoutInfo);
}`

Android 编译版本升级target 33,android

同事回复:
https://groups.google.com/a/chromium.org/g/java/c/bf9if0l3VJ4/m/FY_NlzXUAwAJ

这个是人家说的解决方案,我在caches里的proguard.txt添加,能通过,但是在工程里添加,没用

解决办法:
方法1:

android.enableR8=false

改为true,或者删除,默认为true
我们担心改为true,有哪些隐藏问题,所以我们考虑有没有其他方法。

方法2:
开始查询了很久,网上没有很好的解决方法。
最终我的解决方法:
1、我查询window.aar 文件,发现错误地方是因为 aar 里面 proguard.txt 文件
2、然后我就在想,我要是把他修改了,问题是不是就解决了,所以
3、我对aar进行解压,然后修改,然后重打包,最后导入aar,编译

// 解压
unzip ×××.aar -d tmpDir
// 重打包
jar cvf ×××NewLib.aar -C tmpDir/ .

4、在一起都感觉 非常 nice的时候,我又遇到了类重复的问题。
有一个模块 androidx.window:window,你不知道哪里引入的,通过模块查询到

implementation project(path: ':flutter')

这里导入了,在这里 exclude即可。

编译报错 3

Execution failed for task ':app:processStgDebugMainManifest'.
> Manifest merger failed with multiple errors, see logs

如图
Android 编译版本升级target 33,android
Android 编译版本升级target 33,android报错的前后文,看不出来报错文案,增加编译条件:–stacktrace --debug --info --scan
前后文,也没有提示具体的错误信息。
Android 编译版本升级target 33,android
查询资料:
https://blog.csdn.net/EthanCo/article/details/120565856

使用命令编译:

 ./gradlew  processstgDebugMainManifest --stacktrace --debug

很轻松的就查看到具体的报错,我这边的错误是之前编译我做测试,修改了 JDK,忘记改回来了。这里修改编译环境的 jdk 版本。
Android 编译版本升级target 33,android

编译问题 4

mac版Android studio编译报错:Too many open files in system

Too many open files
 错误: 无法访问io

满满的屏幕,全是这个报错,看的我头皮发麻。
Android 编译版本升级target 33,android
Android 编译版本升级target 33,android
Android 编译版本升级target 33,android

1、开始我是先清空,然后编译,奇迹般,我成功了。
2、然后过了1-2次,又出现了,在清空 & 重启 n次,都没得用。
3、有去查询 dataBindingMergeDependencyArtifactsDebug kaptDebugKotlin 等报错问题,均没找到什么解决方法。

最后看到想起之前看到的文章,说的是文件数量过多的,可是当时我测试的时候,还是又问题,不过想想,可以试一下。
然后又去搜索了一下,找了一个博客:
https://blog.csdn.net/u014158743/article/details/125277209

查看 mac 支持的文件数量:

sysctl kern.maxfiles
sysctl kern.maxfilesperproc

修改数量:

sysctl -w kern.maxfiles=20480 (or whatever number you choose)
sysctl -w kern.maxfilesperproc=18000 (or whatever number you choose)

不过文章里面说的文件:/etc/sysctl.conf
我这边是没有的,所以,我最后仅仅执行命令:

sysctl -w kern.maxfilesperproc=60000

困扰我1天的问题,解决了。哎,好坑的问题。
Android 编译版本升级target 33,android

Android 编译版本升级target 33,android

编译问题 5

2023-09-20T17:13:48.795+0800 [ERROR] [com.android.build.gradle.tasks.ProcessApplicationManifest] /Users/80262786/workCode/teamtalk_android/app/src/main/AndroidManifest.xml:1009:9-1054:20 Error:
android:exported needs to be explicitly specified for element <activity#com.yunzhijia.contact.ThirstIntentToPersonContactActivity>. Apps targeting Android 12 and higher are required to specify an explicit value for android:exported when the corresponding component has an intent filter defined. See https://developer.android.com/guide/topics/manifest/activity-element#exported for details.
Android 编译版本升级target 33,android
这个问题就简单很多了,直接找到地方,修改即可。

运行导致崩溃的问题

问题1

java.lang.RuntimeException: Unable to create application com.kdweibo.android.config.KdweiboApplication: java.lang.SecurityException: Settings key: <bluetooth_name> is only readable to apps with targetSdkVersion lower than or equal to: 31
Caused by: java.lang.SecurityException: Settings key: <bluetooth_name> is only readable to apps with targetSdkVersion lower than or equal to: 31
Android 编译版本升级target 33,android

网上很多
https://github.com/expo/expo/pull/19666
Android 编译版本升级target 33,android
查询到其他人的修改,照抄一下。

问题2

java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx/xxxActivity}: java.lang.NullPointerException: Attempt to invoke virtual method ‘android.view.View androidx.databinding.ViewDataBinding.getRoot()’ on a null object reference
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method ‘android.view.View androidx.databinding.ViewDataBinding.getRoot()’ on a null object reference

android {
	defaultConfig {
		// 别写到这里面,我是从26升级上来的,开始写到这里,会报这个错
	}
    buildFeatures {
        dataBinding true
        viewBinding true
    }
 }

问题3 暂未解决

Failed to get FIS auth token
java.util.concurrent.ExecutionException: com.google.firebase.installations.FirebaseInstallationsException: Firebase Installations Service is unavailable. Please try again later.
at com.google.android.gms.tasks.Tasks.zza(com.google.android.gms:play-services-tasks@@18.0.1:5)
at com.google.android.gms.tasks.Tasks.await(com.google.android.gms:play-services-tasks@@18.0.1:8)
at com.google.firebase.messaging.GmsRpc.setDefaultAttributesToBundle(GmsRpc.java:260)
at com.google.firebase.messaging.GmsRpc.startRpc(GmsRpc.java:222)
at com.google.firebase.messaging.GmsRpc.getToken(GmsRpc.java:180)
at com.google.firebase.messaging.FirebaseMessaging.lambda$blockingGetToken$10$com-google-firebase-messaging-FirebaseMessaging(FirebaseMessaging.java:610)
at com.google.firebase.messaging.FirebaseMessaging$$ExternalSyntheticLambda6.start(Unknown Source:6)
at com.google.firebase.messaging.RequestDeduplicator.getOrStartGetTokenRequest(RequestDeduplicator.java:67)
at com.google.firebase.messaging.FirebaseMessaging.blockingGetToken(FirebaseMessaging.java:606)
 at com.google.firebase.messaging.SyncTask.maybeRefreshToken(SyncTask.java:121)
Caused by: com.google.firebase.installations.FirebaseInstallationsException: Firebase Installations Service is unavailable. Please try again later.

Android 编译版本升级target 33,android

java.lang.RuntimeException: Unable to create application com.kdweibo.android.config.KdweiboApplication: java.lang.SecurityException: listen
Caused by: java.lang.SecurityException: listen

Android 编译版本升级target 33,android

其他

开始不想写博客的,嫌麻烦,不过处理中,碰到很多问题,省的同路人也被坑吧,省点时间,就写一下吧。
还有很多编译问题,我随手就解决了,就不会在这里记录,花了好多时间,去升级版本,不容易啊。文章来源地址https://www.toymoban.com/news/detail-755548.html

到了这里,关于Android 编译版本升级target 33的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android.mk编译错误 FAILED: ninja: unknown target ‘MODULES-IN-packages-apps-XXXX‘

    Android源码中编译app时报如下错误: [ 91% 205/223] including system/sepolicy/Android.mk ... system/sepolicy/Android.mk:57: warning: BOARD_PLAT_PUBLIC_SEPOLICY_DIR has been deprecated. Use SYSTEM_EXT_PUBLIC_SEPOLICY_DIRS instead. system/sepolicy/Android.mk:62: warning: BOARD_PLAT_PRIVATE_SEPOLICY_DIR has been deprecated. Use SYSTEM_EXT_PRIVATE_SEPO

    2023年04月17日
    浏览(23)
  • flutter_inappwebview包引入后总要求Android SDK 33版本的问题

    今天想使用flutter_inappwebview来显示网页,直接在pubspec.yaml中引入包文件:  

    2023年04月20日
    浏览(26)
  • Android WebView版本升级的步骤

    Android WebView版本升级的步骤 WebView是Android平台上的一个重要组件,用于在应用程序中加载和显示Web页面。随着时间的推移,WebView版本的更新变得越来越重要,以确保应用程序的安全性和兼容性。本文将介绍在Android应用程序中升级WebView版本的方法,并提供相应的源代码。 检查

    2024年02月08日
    浏览(21)
  • Android WebView版本升级的方法

    Android WebView版本升级的方法 在Android应用程序开发中,WebView组件是一个重要的工具,用于在应用中显示网页内容。随着时间的推移,WebView的版本也会不断更新,以提供更好的性能和功能。本文将介绍如何升级Android应用程序中的WebView版本。 确定目标版本 首先,您需要确定要

    2024年02月07日
    浏览(23)
  • 【Android】app应用内版本更新升级(DownloadManager下载,适配Android6.0以上所有版本)

    版本的升级和更新是一个线上App所必备的功能,App的升级安装包主要通过 应用商店 或者 应用内下载 两种方式获得,大部分app这两种方式都会具备,应用商店只需要上传对应平台审核通过即可,而应用内更新一般是通过以下几种方式: 1.集成第三方库如 appupdateX、bugly 的更新

    2024年02月11日
    浏览(30)
  • Android升级WebView浏览器内核版本

    使用 AOSP 项目编译的 Android 系统,会发现在部分 APP 使用系统自带的浏览器内核来加载网页时会出现报错,加载不出网页的情况,其实这是由于 WebView 自带的 浏览器内核版本太旧 所导致的,只要更新成比较新的浏览器内核版本就行了。 一、环境准备 (1) Android系统源码编译

    2024年02月04日
    浏览(28)
  • Flutter & Android问题记录 - 升级Android Studio 2022.2.1版本后运行项目报错

    最近一个Flutter项目有新需求,开发时一直是在iOS设备上运行,花了几天做完后运行到Android设备测试,结果项目构建失败了。 Flutter: 3.7.11 Android Studio: 2022.2.1 Java: 17.0.6 Gradle: 7.4 Android Gradle Plugin (AGP): 4.1.3 项目构建报错日志: 报错有点眼熟,根据以往开发经验,应该是Gradle版本

    2023年04月24日
    浏览(21)
  • 【Android Studio插件升级以后kotlin jdk版本冲突】

    今天升级一些插件版本后无法编译,发现kotlin jdk 1.8.20和kotlin jdk 1.6.21重复冲突,网上找了挺多方法都没生效,千回百转才解决,发出来希望可以帮助到同样报错的同学 FAILURE: Build failed with an exception. What went wrong: Execution failed for task ‘:app:checkDebugDuplicateClasses’. A failure occurred while

    2024年02月12日
    浏览(22)
  • Android下载apk并安装apk(用于软件版本升级用途)

    软件版本更新是每个应用必不可少的功能,基本实现方案是请求服务器最新的版本号与本地的版本号对比,有新版本则下载apk并执行安装。请求服务器版本号与本地对比很容易,本文就不过多讲解,主要讲解下载apk到安装apk的内容。 (1)读写外部存储的权限需要动态申请,

    2024年02月01日
    浏览(29)
  • Android Studio升级后,编译出错FAILURE: Build completed with 3 failures.

    出错信息如下: Executing tasks: [:app:assembleDebug] in project D:AndroidStudioProjectscheckinsys Task :app:preBuild UP-TO-DATE Task :identify:preBuild UP-TO-DATE Task :identify:preDebugBuild UP-TO-DATE Task :identify:checkDebugManifest FAILED Task :identify:compileDebugAidl NO-SOURCE Task :identify:packageDebugRenderscript NO-SOURCE Task :app:prepa

    2024年02月03日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包