使用Jitpack创建Kotlin Android SDK,minifyEnabled=true时如何保留Kotlin类?
问题解答
1. 如何使用Jitpack创建Kotlin Android SDK?
- 准备Android Library模块:确保项目是Android Library类型(而非Application),在模块的
build.gradle中配置Kotlin支持:plugins { id 'com.android.library' id 'org.jetbrains.kotlin.android' } android { compileSdk 34 // 按需调整版本 defaultConfig { minSdk 21 // 按需调整最低兼容版本 targetSdk 34 versionCode 1 versionName "1.0" } } - 托管代码到Git平台:将代码推送到GitHub/GitLab等仓库,给代码打版本标签(如
v1.0.0),Jitpack依赖标签生成可引用的版本包。 - 配置Jitpack:项目根目录创建
jitpack.yml,你的现有配置已满足基础需求:jdk: - openjdk11 before_install: - ./scripts/prepareJitpackEnvironment.sh - 发布并引用:访问Jitpack官网,输入Git仓库地址点击「Get it」等待编译完成。其他项目可通过以下方式引用:
// 项目根build.gradle allprojects { repositories { maven { url 'https://jitpack.io' } } } // 模块build.gradle dependencies { implementation 'com.github.你的用户名:仓库名:版本标签' }
2. minifyEnabled=true时,如何保留SDK中的Kotlin类?
该问题是R8混淆时默认移除了Kotlin类的元数据或混淆了类名,需添加针对性混淆规则:
- 在Library模块的
proguard-rules.pro中添加规则(替换your.sdk.package为SDK实际包名):// 保留SDK包下所有类和成员 -keep class your.sdk.package.** { *; } // 保留Kotlin必需的元数据属性 -keepattributes RuntimeVisibleAnnotations,AnnotationDefault,KotlinMetadata // 保留Kotlin when表达式生成的映射类 -keepclassmembers class **$WhenMappings { *; } // 保留Kotlin伴生对象和内部类的核心成员 -keepclassmembers class your.sdk.package.** { companion object; static <fields>; <init>(...); } - 确保Library模块
build.gradle的release构建类型正确引用混淆文件:android { buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } } - 检查
prepareJitpackEnvironment.sh脚本,确认未执行移除Kotlin类或修改混淆配置的操作。
内容的提问来源于stack exchange,提问作者Igor Novikov
相关产品推荐
相关产品推荐

