本目录提供一个 单文件 Windows 工具 merge.bat,用于把多个 *.aar 与 *.so 合并为一个新的 *.aar。
在 merge.bat 同级目录执行:
.\merge.bat默认输出:
merged.aar(生成在merge.bat同级目录)
merge.bat 默认采用 自动模式:不需要显式指定输入文件。
请按以下固定结构放置输入:
merge\libs\:放置 AAR/JARmerge\libs\*.aarmerge\libs\*.jar
merge\jniLibs\:放置 SO(建议按 ABI 分目录)merge\jniLibs\arm64-v8a\*.somerge\jniLibs\armeabi-v7a\*.somerge\jniLibs\x86\*.somerge\jniLibs\x86_64\*.so
说明:
merge\libs\下的*.aar会被全部合并。merge\libs\下的*.jar会被复制进输出 AAR 的libs/目录。merge\jniLibs\下的*.so会被打进输出 AAR 的jni/<abi>/。
如果你不想用自动目录结构,也可以显式传参:
merge.bat [-o out.aar] [-m AndroidManifest.xml] [-abi arm64-v8a,armeabi-v7a] [-so <soDirOrSoFile>]... <in1.aar> <in2.aar> ...示例:
.\merge.bat -o out.aar libs\A.aar libs\B.aar -so jniLibs-
AndroidManifest.xml
- 若指定
-m:使用你指定的 manifest - 否则:使用第一个输入 AAR 中的
AndroidManifest.xml
- 若指定
-
classes.jar
- 会把所有输入 AAR 的
classes.jar解包后合并,再重新打成一个classes.jar
- 会把所有输入 AAR 的
-
res/、assets/
- 目录级合并
- 同名文件冲突:后合并的文件会覆盖先前文件
-
jni//*.so
- 从输入 AAR 自带的
jni/合并 - 额外从
-so(目录或单个 so 文件)合并 - 自动模式下默认从
merge\jniLibs\读取
- 从输入 AAR 自带的
-
其他文件
R.txt/public.txt/proguard.txt/consumer-rules.pro:若存在则拷贝一份(先到先得)
- Windows PowerShell(系统自带即可)
- JDK 的
jar.exe- 建议确保
jar.exe在PATH中 - 或设置
JAVA_HOME,脚本会尝试使用JAVA_HOME\bin\jar.exe
- 建议确保
-
报错:
cannot find jar.exe- 安装 JDK 并确保
jar.exe可用 - 或设置
JAVA_HOME指向 JDK 根目录
- 安装 JDK 并确保
-
报错:
no input aars specified- 自动模式下请确认:
merge\libs\下至少有一个*.aar
- 自动模式下请确认:
-
输出 AAR 里没有 SO
- 确认
merge\jniLibs\<abi>\下有对应*.so - 或使用
-so显式指定目录/文件
- 确认