如何仅针对Debug构建类型避免剥离AAR中打包的原生库?
嘿,这事儿我熟!在Android Studio外部打包AAR其实没那么复杂,按下面的步骤来就行:
第一步:确认你的目录结构
先确保你的文件摆放完全符合Android Library的标准结构,应该是这样的:
app/ ├── src/ │ └── main/ │ ├── jniLibs/ │ │ └── arm64-v8a/ │ │ └── libyour-custom-lib.so # 你的C++库文件 │ ├── java/ │ │ └── com/ │ │ └── yourcompany/ │ │ └── YourJavaClass.java # 你的Java类(按包名层级放) │ └── AndroidManifest.xml # Library的清单文件 └── build.gradle # Gradle配置文件
第二步:调整build.gradle为Library类型
因为AAR是Android Library的归档包,所以你的build.gradle必须使用com.android.library插件,而不是应用插件。给你个参考配置,按需修改:
plugins { id 'com.android.library' } android { namespace "com.yourcompany.yourlibrary" # 替换成你的实际包名 compileSdk 34 # 根据你的项目需求调整SDK版本 defaultConfig { minSdk 21 # 你的最低支持Android版本 targetSdk 34 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles "consumer-rules.pro" # 如果需要给依赖你的应用提供混淆规则的话 } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' # 重点:默认release构建会剥离.so文件的调试符号(也就是你说的“剥离版本”) # 如果需要保留调试符号用于后续调试,解开下面的注释: # ndk { # debugSymbolLevel 'FULL' # } } debug { # Debug构建默认保留完整调试符号,无需额外配置 } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { # 这里添加你的项目依赖,比如AndroidX库等 implementation 'androidx.core:core-ktx:1.12.0' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' }
另外,你的AndroidManifest.xml要符合Library的要求,不要包含应用级的配置(比如application标签里的android:name),示例如下:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.yourcompany.yourlibrary"> <!-- 这里添加你的Library需要的权限、组件声明等 --> <uses-permission android:name="android.permission.INTERNET" /> <application> <!-- 如果有自定义Service、ContentProvider等,在这里声明即可 --> </application> </manifest>
第三步:执行Gradle打包命令
因为是在Android Studio外部操作,推荐用项目自带的gradlew(Gradle Wrapper)来避免环境版本不一致的问题:
- Windows系统:打开命令提示符,进入
app目录,执行:
或者要打Debug包的话:gradlew assembleReleasegradlew assembleDebug - Linux/macOS系统:打开终端,进入
app目录,执行:
或者Debug包:./gradlew assembleRelease./gradlew assembleDebug
执行完成后,生成的AAR文件会放在app/build/outputs/aar/目录下,比如app-release.aar或app-debug.aar。
关于“剥离版本”的补充说明
你提到默认AAR包含剥离版本的库,这里再明确下:
- 默认的Release构建会自动剥离
.so文件的调试符号,这样能大幅减小AAR的体积,适合正式发布。 - 如果需要保留调试符号(比如后续要排查Native层问题),就在
build.gradle的release构建类型里添加ndk { debugSymbolLevel 'FULL' }配置,这样打包出来的AAR里的.so就会保留完整调试信息。
验证打包结果
你可以把生成的AAR文件重命名为.zip,解压后检查内容:
jni/arm64-v8a/下应该有你的C++库文件classes.jar里包含你的Java类- 根目录下有
AndroidManifest.xml和其他必要文件
内容的提问来源于stack exchange,提问作者piwi
相关产品推荐
相关产品推荐

