Mac M1 Android Kotlin Mac and os.arch=aarch64错误

M1芯片Mac编译Kotlin项目报错解决方案

 换了m1跑旧kotlin项目编译报错

Execution failed for task ':app:kaptDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
   > java.lang.reflect.InvocationTargetException (no error message)

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

一定要点 Run with --info 看报错信息,错误信息如下:

Caused by: java.lang.Exception: No native library is found for os.name=Mac and os.arch=aarch64. path=/org/sqlite/native/Mac/aarch64
    at org.sqlite.SQLiteJDBCLoader.loadSQLiteNativeLibrary(SQLiteJDBCLoader.java:333)
    at org.sqlite.SQLiteJDBCLoader.initialize(SQLiteJDBCLoader.java:64)
    at androidx.room.verifier.DatabaseVerifier.<clinit>(DatabaseVerifier.kt:68)
    ... 49 more

解决方案

//引入这个包
kapt "org.xerial:sqlite-jdbc:3.34.0"

 

[versions] agp = "8.5.0" kotlin = "1.9.0" coreKtx = "1.10.1" junit = "4.13.2" junitVersion = "1.1.5" espressoCore = "3.5.1" lifecycleRuntimeKtx = "2.6.1" activityCompose = "1.8.0" composeBom = "2024.04.01" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } junit = { group = "junit", name = "junit", version.ref = "junit" } androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycleRuntimeKtx" } androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" } androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" } androidx-ui = { group = "androidx.compose.ui", name = "ui" } androidx-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" } androidx-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" } androidx-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" } androidx-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" } androidx-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" } androidx-material3 = { group = "androidx.compose.material3", name = "material3" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" } jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } 不想用这个8.5.0,要用低版本的3.4.0
最新发布
09-26
<think> 我们提供的配置文件中,通过版本目录(libs.versions.toml)定义了AGP版本为8.5.0。现在用户想要将AGP版本降级到3.4.0。需要注意的是,AGP 3.4.0是一个较旧的版本(2019年发布),而当前项目配置中使用了compileSdk 34(对应Android 14)以及Compose等现代特性,这些在AGP 3.4.0中可能不被支持。 ### 降级到AGP 3.4.0的步骤与注意事项 #### 1. **修改版本目录中的AGP版本** 在`libs.versions.toml`文件中,将`agp`的版本改为`3.4.0`: ```toml [versions] agp = "3.4.0" # 修改这里 ``` #### 2. **调整Gradle版本** AGP 3.4.0需要特定版本的Gradle支持。根据[官方兼容性矩阵](https://developer.android.com/studio/releases/gradle-plugin#updating-gradle),AGP 3.4.0需要Gradle 5.1.1+,但最高仅支持到5.6.4。因此,需要修改项目根目录下的`gradle-wrapper.properties`文件: ```properties distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip ``` #### 3. **调整项目配置以兼容旧版AGP** AGP 3.4.0的配置语法与8.x有很大不同,需要修改`app/build.gradle`文件: ```groovy // 旧版AGP使用apply plugin方式(在文件顶部) apply plugin: 'com.android.application' apply plugin: 'kotlin-android' android { compileSdkVersion 28 // 注意:3.4.0最高支持到API 28(Android 9) defaultConfig { applicationId "com.example.demo2" minSdkVersion 24 targetSdkVersion 28 // 必须<=compileSdkVersion // ... 其他配置 } // 旧版配置buildTypes和compileOptions的方式 buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } ``` #### 4. **移除或调整Compose配置** AGP 3.4.0发布时Compose尚未诞生,因此需要移除所有Compose相关配置: - 删除`buildFeatures { compose true }` - 删除`composeOptions` - 移除所有Compose依赖(如`androidx.compose`相关依赖) #### 5. **调整依赖项** 由于降级到AGP 3.4.0,很多现代库无法使用(如AndroidX Core KTX 1.10.1需要较高的编译环境),需要降低依赖版本甚至移除不兼容的库。 #### ⚠️ 重大兼容性问题 | 当前配置 | 降级到AGP 3.4.0的问题 | |----------------|------------------------------------------| | compileSdk 34 | 最高仅支持API 28(需降级) | | Kotlin 1.9.0 | 旧版AGP对Kotlin支持有限(需降级Kotlin插件) | | Compose | 完全不支持 | #### 💡 替代建议 如果必须使用旧版AGP,建议: 1. 新建一个基于旧版Android Studio(如3.4版本)的项目 2. 手动迁移代码,避免使用新特性 #### 降级后的`libs.versions.toml`示例(部分): ```toml [versions] agp = "3.4.0" kotlin = "1.3.41" # 必须降级Kotlin版本 [libraries] # 使用旧版支持库 androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version = "1.0.2" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" } jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } ``` ### 结论 **强烈不建议降级**,因为会导致: - 失去对新API的支持 - 无法使用Jetpack Compose等现代框架 - 安全风险(旧版AGP存在已知漏洞) §§相关问题§§ 1. 如何查询特定版本的Android Gradle Plugin所要求的Gradle版本范围? 2. 如果必须使用AGP 3.4.0,应该如何配置Kotlin插件版本以确保兼容性? 3. 在AGP 3.4.0环境下,如何替代Jetpack Compose实现UI? 4. 降级AGP后出现'java.lang.UnsupportedClassVersionError'错误应如何解决? 5. 是否有工具可以自动检测AGP版本与项目配置的兼容性问题? </think> ### 将 AGP 从 8.5.0 降级到 3.4.0 的操作指南 #### 🔧 修改步骤(需同步调整多个文件): 1. **修改版本目录 (`gradle/libs.versions.toml`)** 替换 AGP 版本定义: ```toml [versions] agp = "3.4.0" # 原值为"8.5.0" ``` 2. **调整根目录的 `settings.gradle`** 添加插件版本兼容声明: ```groovy pluginManagement { resolutionStrategy { eachPlugin { // 强制使用特定版本的 Kotlin 插件 if (requested.id.id == "org.jetbrains.kotlin.android") { useVersion("1.3.72") // AGP 3.4 兼容的 Kotlin 版本 } } } } ``` 3. **修改模块级 `build.gradle`** 适配旧版语法: ```groovy android { compileSdkVersion 28 // 必须≤28(Android 9) buildToolsVersion "28.0.3" // 必须显式声明 defaultConfig { targetSdkVersion 28 // 必须≤compileSdkVersion // 移除 vectorDrawables 配置(旧版不支持) } // 删除 composeOptions 配置块(AGP 3.4 不支持 Compose) } dependencies { // 移除所有 Compose 相关依赖 implementation 'androidx.appcompat:appcompat:1.0.2' // 添加传统 UI 支持 } ``` 4. **降级 Gradle 版本 (`gradle-wrapper.properties`)** ```properties distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip ``` #### ️ 关键兼容性限制: | 组件 | 支持范围 | 替代方案 | |------|----------|---------| | **Compose** | ❌ 完全不支持 | 使用传统 XML 布局 | | **Kotlin** | 最高 1.3.72 | 避免使用协程等新特性 | | **SDK 版本** | compileSdk ≤ 28 | Target Android 9 | | **构建特性** | 无 viewBinding/dataBinding | 使用 findViewById | #### 🔄 依赖版本对照表: ```toml [versions] kotlin = "1.3.72" # 必须降级 coreKtx = "1.0.2" # 原值1.10.1不可用 ``` #### ⚡ 降级后必须执行: ```bash # 清理构建缓存 ./gradlew cleanBuildCache # 移除 IDE 缓存 rm -rf ~/.gradle/caches ``` #### ⚠️ 风险警告: 1. **安全漏洞**:AGP 3.4.0 存在 [CVE-2019-8957](https://nvd.nist.gov/vuln/detail/CVE-2019-8957) 等未修复漏洞 2. **功能缺失**:不支持 AndroidX Navigation、动态功能模块等现代特性 3. **维护困难**:Google Play 从 2023 年起强制要求 targetSdk ≥ 33
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值