安卓本地离线打包引用weex_google-map-release.aar 包就会Manifest merger failed with multiple errors问题

安卓本地离线打包引用weex_google-map-release.aar 包就会Manifest merger failed with multiple errors问题

开发环境 版本号 项目创建方式
Windows 11 HBuilderX

操作步骤:

如题

预期结果:

可以正常打包

实际结果:

不能正常打包

bug描述:

uniapp项目本地导出安卓资源后引用到原生安卓模板中 在本地离线打包时 引用weex_google-map-release.aar 包就会Manifest merger failed with multiple errors问题,如果这个不引用 则正常

image


9 回复

我就是参考了这个 其他都配了

安卓 引用weex_google-map-release.aar就报了 不引用就正常 用的离线sdk是4.85版本 但是不知道为什么现在文档上找不到

回复 9***@qq.com: <meta-data android:name="com.google.android.geo.API_KEY" android:value="%api_key%" tools:replace="android:value" />参考文档吧最后一条配置改成这样试试

回复 DCloud_Android_zl: 还是不行 报错:与元素类型 “meta-data” 相关联的属性 “tools:replace” 的前缀 “tools” 未绑定。

详细如图

<manifest xmlns:tools="http://schemas.android.com/tools"> 参考这个调整,或者你点击tools,android studio会有修复方案。

回复 DCloud_Android_zl: 好的 可以打包了 感谢 耐心解答~

这个错误是典型的 Android Manifest 合并冲突。weex_google-map-release.aar 中自带的 AndroidManifest.xml 与您主项目的清单文件存在配置冲突。

主要原因: aar 包中的清单可能包含了与您主项目重复或冲突的声明,例如:

  1. <application> 标签属性冲突:最常见的是 android:allowBackupandroid:supportsRtlandroid:theme 等属性在主项目和 aar 中被分别声明且值不同。
  2. 权限声明重复或冲突
  3. 组件(Activity/Service 等)声明冲突

解决方案:

在您主模块的 build.gradle 文件(通常是 app/build.gradle)的 android 配置块中,添加 manifestPlaceholderspackagingOptions,并检查依赖。

步骤:

  1. android 块内添加/修改以下配置:

    android {
        // ... 其他配置
    
        packagingOptions {
            // 确保不重复包含某些文件,避免冲突
            exclude 'AndroidManifest.xml'
            // 如果还有其他冲突,可以添加更多排除规则
            // exclude 'lib/armeabi-v7a/xxx.so'
        }
    }
    
  2. 更关键的是,在 android -> defaultConfig 块中,使用 manifestPlaceholders 来覆盖或提供必要的占位符值,这可以解决大部分属性冲突:

    android {
        defaultConfig {
            // ... 其他配置
            manifestPlaceholders = [
                // 确保这些关键属性在合并时被统一
                "android:allowBackup": "true", // 或 false,根据你的需求,但必须一致
                "android:supportsRtl": "true",
                // 如果有用到地图相关的权限或API Key,也可能需要在这里声明
                // "com.google.android.geo.API_KEY": "你的谷歌地图API密钥"
            ]
        }
    }
    
  3. 检查依赖版本统一:确保项目中所有模块(包括 weex_google-map-release.aar 间接引入的)使用的 com.android.supportandroidx 库版本一致。在 app/build.gradledependencies 块中,尝试强制指定常用库的版本:

    dependencies {
        implementation fileTree(include: ['*.aar'], dir: 'libs')
        // 如果有引入其他库,统一核心支持库版本
        // 例如,如果使用androidx
        // implementation 'androidx.appcompat:appcompat:1.3.1'
        // 并确保所有依赖都对齐到这个版本
    }
    
  4. 执行清理和重建:完成上述更改后,在 Android Studio 中执行:

    • Build -> Clean Project
    • Build -> Rebuild Project

如果问题依旧:

  • 检查合并报告:在 Android Studio 的 Build 输出窗口中,查找详细的 Manifest merger failed 错误日志。通常会明确指出是哪个属性或组件冲突。根据具体错误信息调整上述配置。
  • 查看 aar 中的清单:将 weex_google-map-release.aar 重命名为 .zip 并解压,查看其中的 AndroidManifest.xml 文件,直接了解其声明内容,以便针对性解决冲突。
  • 临时方案:在 app/build.gradleandroid 块中添加以下配置,强制忽略所有清单合并错误(不推荐,仅用于测试定位问题):
    android {
        ...
        lintOptions {
            abortOnError false
            checkReleaseBuilds false
        }
    }
回到顶部