混淆后的AAR發(fā)布到Jcenter最靠譜的的方式

前言

公司因?yàn)槟承I(yè)務(wù)員需要做SDK給到合作方接入,但是卻不希望源代碼泄露(其實(shí)沒啥源代碼),需要我們做混淆。。。WDNMD,噩夢開始了。然并卵,代碼還是得擼起來。


方案一:生成AAR

缺點(diǎn):AAR不能包含所依賴的項(xiàng)目。接入體驗(yàn):低。

方案二:生成帶有依賴包的AAR

Gradle編譯編譯生成帶有依賴Jar的AAR包,參照:
https://github.com/kezong/fat-aar-android
優(yōu)點(diǎn):完美解決方案一的缺點(diǎn)。
缺點(diǎn):如果接入項(xiàng)目的依賴與AAR包中的依賴包有沖突,編譯會(huì)不成功,各種排除沖突都會(huì)失效。接入體驗(yàn):中

方案三:將AAR發(fā)布到Jcenter后進(jìn)行遠(yuǎn)程依賴

接入體驗(yàn):高
優(yōu)點(diǎn):完美解決以上兩個(gè)方案的缺點(diǎn)。
缺點(diǎn):提交到Jcenter的項(xiàng)目代碼是不會(huì)被混淆的,也就不符合我期望的核心要求-“代碼混淆”。


最終方案:將AAR打成Jar包,新建一個(gè)空殼庫,導(dǎo)入Jar包,添加Jar包需要的依賴,發(fā)布空殼庫到Jcenter。

下面來開始技術(shù)總結(jié)

  • 一、注冊bintray賬號,不會(huì)的交由其他熱心開發(fā)處理
  • 二、在需要打成AAR的庫的build.gradle文件下添加編譯Jar包的代碼

如果你需要混淆,請?zhí)崆按蜷_ minifyEnabled true 并編寫好混淆代碼

def SDK_BASENAME = "custom_sdk";
def SDK_VERSION = "_v1.0.0";
def sdkDestinationPath = "build/outputs/jar/";
def zipFile = file('build/intermediates/packaged-classes/release/classes.jar')
task deleteBuild(type: Delete) {
    delete sdkDestinationPath + SDK_BASENAME + SDK_VERSION + ".jar"
}
task makeJar(type: Jar) {
    from zipTree(zipFile)
    from fileTree(dir: 'src/main', includes: ['assets/**']) // 打包assets目錄下的所有文件

    baseName = SDK_BASENAME + SDK_VERSION
    destinationDir = file(sdkDestinationPath)
}
makeJar.dependsOn(deleteBuild, build)
  • 三、Terminal 執(zhí)行代碼
./gradlew makeJar

然后會(huì)在庫的build/outputs下生成Jar包

  • 四、新建一個(gè)項(xiàng)目,再新建一個(gè)moudle,導(dǎo)入這個(gè)Jar包


順便把Jar包的混淆代碼也復(fù)制一份到新建moudle里面來然后在新建moudle的build.gradle下添加一份這樣子的代碼

android {
    ...
    defaultConfig {
        ...
        consumerProguardFiles 'proguard-rules.pro'
    }
}
dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    //導(dǎo)入Jar包需要的依賴
    implementation 'com.squareup.retrofit2:retrofit:2.3.0'
    ...
    api files('libs/xxxxxxxxx.jar')
}
  • 五、導(dǎo)入 bintray-release 將新建的moudle發(fā)布到Jcenter
  • 六、依賴使用
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容