Flutter之androidx.versionedparcelable.CustomVersionedParcelable

在将Flutter原生项目打包成Android应用时遇到版本冲突错误。通过降低barcode_scan库版本、支持AndroidX和调整Gradle版本解决。具体步骤包括参照StackOverflow和优快云文章进行设置,如注释project.evaluationDependsOn(':app'),更新Gradle到3.6.1等。

flutter原生项目,ios运行没有问题,生成Android包时报错:

Error: “Program type already present: androidx.versionedparcelable.CustomVersionedParcelable”

有两种方法,第一种降低pubspec.yaml中barcode_scan的版本,此方法未测试,大家自行查看解决:

https://blog.youkuaiyun.com/weixin_33816946/article/details/91416644

第二种,亲自测试可用,让flutter生成的Android包支持AndroidX,以下为具体步骤:

step1:参考https://stackoverflow.com/questions/53570454/error-program-type-already-present-androidx-versionedparcelable-customversiongradle.properties文件中加入以下两句代码

android.useAndroidX=true
android.enableJetifier=true

运行测试后,如果报错信息如下,继续看step2:

 Android dependency ‘androidx.core:core’ has different version for the compile (1.0.0) and runtime (1.0.1) cla
<think>我们在处理Flutter项目时,有时需要移除一些不必要的文件或配置以减小应用体积。`com.android.tools.build:debugsymbols`是Android构建工具中的一个依赖项,它用于生成调试符号文件(通常用于NDK调试)。在发布版本中,如果不使用NDK,可以考虑移除它以减少APK大小。 移除方法: 1.Flutter项目中,打开Android模块的`build.gradle`文件(位于`android/app/build.gradle`)。 2. 在`dependencies`部分,查找是否有`debugImplementation`或`implementation`引用了`com.android.tools.build:debugsymbols`。通常,这个依赖是由Flutter自动添加的,但有时可能被显式添加。 3. 如果没有显式添加,那么我们可以通过配置构建类型(build types)来禁用调试符号的生成。 另一种方法是禁用调试符号的生成,这可以通过在`build.gradle`文件中设置`buildTypes`来实现: 例如,在`android`块内的`buildTypes`中,为release类型设置: ``` android { buildTypes { release { // 禁用调试符号 debuggable false jniDebuggable false // 如果你使用的是Android Gradle插件4.1.0或更高版本,可以设置: ndk { debugSymbolLevel 'NONE' } } } } ``` 注意:`ndk.debugSymbolLevel`属性在Android Gradle插件4.1.0及以上版本中可用。如果你的项目使用的是较旧的插件版本,你可能需要升级。 但是,在Flutter项目中,默认的`build.gradle`文件可能没有配置`ndk`块,所以你可以添加它。 另外,如果你根本不需要NDK支持,你也可以考虑移除Flutter项目中不必要的NDK依赖。但请注意,Flutter引擎本身使用了NDK,所以不能完全移除NDK支持。 如果上述方法不能移除`debugsymbols`文件,你还可以尝试在构建后删除这些文件。但这种方法比较麻烦,通常不推荐。 另外,在Flutter 2.2之后,Flutter默认会为Android构建生成符号文件(用于崩溃分析)。如果你不需要上传到Google Play或其他地方,可以禁用此功能: 在`android/gradle.properties`文件中添加: ``` android.enableDebugSymbols=false ``` 但是请注意,这个属性在较新的Android Gradle插件版本中可能已被弃用,具体取决于你使用的插件版本。 总结步骤: 方法1(推荐): 1. 打开`android/app/build.gradle`。 2. 在`android` -> `buildTypes` -> `release`(或其他构建类型)中添加: ``` ndk { debugSymbolLevel 'NONE' } ``` 方法2: 在`android/gradle.properties`中添加: ``` android.enableDebugSymbols=false ``` 注意:在应用这些更改后,需要重新构建项目。 如果问题仍未解决,请检查是否还有其他地方引用了调试符号文件。 相关问题: 1. 如何减小Flutter应用的APK大小? 2.Flutter中,如何配置Android构建类型? 3. 什么是NDK调试符号文件?在什么情况下需要保留它们? 4. 如何升级Flutter项目中的Android Gradle插件版本?</think>### 在 Flutter 项目中移除 `com.android.tools.build:debugsymbols` 文件的方法 在 Flutter 项目中,`com.android.tools.build:debugsymbols` 是 Android 构建工具自动生成的调试符号文件(位于 `android/app/build/intermediates/debug_symbols`)。移除它可以减小应用体积,以下是具体步骤: --- #### 方法 1:通过 Gradle 配置禁用(推荐) 1. 打开 Android 模块的构建配置文件: ```gradle android/app/build.gradle ``` 2. 在 `android` 块内添加以下配置: ```gradle android { buildTypes { release { debuggable false // 禁用调试符号生成 ndk { debugSymbolLevel 'NONE' } } debug { debuggable true // 可选:调试版本也禁用 ndk { debugSymbolLevel 'NONE' } } } } ``` 3. 在 `gradle.properties` 文件中添加: ```properties android.enableDebugSymbols=false ``` --- #### 方法 2:清理构建缓存 运行以下命令强制清理缓存并重新构建: ```bash flutter clean && rm -rf android/app/build flutter pub get cd android && ./gradlew clean ``` --- #### 方法 3:手动删除(临时方案) 直接删除生成的符号文件: ```bash rm -rf android/app/build/intermediates/debug_symbols rm -rf android/app/build/intermediates/merged_native_libs ``` > **注意**:手动删除需在每次构建后执行,推荐优先使用方法 1 的配置方案[^1]。 --- ### 验证是否生效 1. 构建 Release APK: ```bash flutter build apk --release ``` 2. 检查输出目录: ```bash ls build/app/outputs/flutter-apk/ ``` 确认 APK 体积已减小(通常可减少 1-5MB)。 --- ### 常见问题排查 1. **配置不生效**: - 检查 `gradle.properties` 是否在 `android` 目录下 - 确保 Android Gradle 插件版本 ≥ 4.1(Flutter 2.2+ 默认支持) 2. **需要保留符号文件的情况**: - 当使用 NDK 或需要分析原生代码崩溃时,需保留符号文件 - 上传到 Google Play 时可能需要符号文件(通过 `ndk.debugSymbolLevel = 'SYMBOL_TABLE'` 精简) ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值