如何在Android Studio中生成不含特定依赖native library的APK?
嘿,这个需求其实通过Gradle配置就能轻松搞定,我来给你分两种常见情况详细说下,保证能解决你的问题:
方法一:针对单个架构排除特定so库
如果你只需要排除某一个CPU架构下的目标so库,直接在对应Module的build.gradle(注意是模块级别的配置文件,不是项目根目录的那个)里添加packagingOptions配置就行:
android { // 保留你原本的compileSdk、defaultConfig等配置... packagingOptions { // 示例:排除armeabi-v7a架构下的libfoo.so exclude 'lib/armeabi-v7a/libfoo.so' // 如果还要排除arm64-v8a架构的,就再加一行 exclude 'lib/arm64-v8a/libfoo.so' } }
这里的路径对应APK打包后内部的lib目录结构,你需要根据自己要排除的so库实际所在的架构目录来写路径。
方法二:批量排除全架构下的同名so库
要是这个so库在多个CPU架构目录里都存在,不想逐个架构写配置,可以用通配符来批量排除:
android { // 保留你原本的配置... packagingOptions { // 匹配所有架构目录下的libfoo.so,一次性全部排除 exclude 'lib/**/libfoo.so' } }
** 是通配符,表示匹配任意层级的目录,这样不管是x86还是mips等架构下的目标so都会被排除在外。
额外注意事项
- 如果你要排除的是自己项目里native模块编译出来的so,除了上面的打包排除,还可以直接在
CMakeLists.txt或者Android.mk里移除对应的编译目标,这样连编译阶段都不会生成这个so,更彻底。 - 配置完成后记得点击Android Studio右上角的「Sync Now」同步Gradle配置,然后重新编译APK。你可以通过菜单栏的「Build -> Analyze APK」打开生成的APK,检查lib目录下是否已经没有目标so库了。
内容的提问来源于stack exchange,提问作者Volcanoscar




