一行命令實現多渠道打包並自動進行資源混淆(Walle,AndResGuard)
多渠道打包和資源混淆的作用這裡我就不再闡述了。網上有很多。
本篇部落格我們來介紹一下如何實現多渠道打包之前先進行資源混淆,這樣一來我們打出來的包都是已經進行過資源混淆的了。
如果你還有其他的需求,也可以按照這個方法實現。
多渠道打包(Walle)
這裡多渠道打包我使用的是美團的Walle,具體的使用方式Github上已經介紹的很詳細了。
這裡我先來實現一下多渠道打包
首先按照說明整合一下walle和簽名配置
配置build.gradle
在位於專案的根目錄 build.gradle 檔案中新增Walle Gradle外掛的依賴, 如下:
buildscript { dependencies { classpath 'com.meituan.android.walle:plugin:1.1.6' } }
然後在app模組下的build.gradle中新增依賴以及應用外掛
如下
apply plugin: 'walle'
dependencies {
implementation 'com.meituan.android.walle:library:1.1.6'
}
配置外掛
具體配置可以根據官方文件介紹自行更改
walle { // 指定渠道包的輸出路徑 apkOutputFolder = new File("${project.buildDir}/outputs/channels"); // 定製渠道包的APK的檔名稱 apkFileNameFormat = '${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk'; // 渠道配置檔案 channelFile = new File("${project.getProjectDir()}/channel") }
這裡我們還需要配置一下簽名和渠道名稱檔案
簽名檔案自己建立一下,記住檔案路徑和密碼等資訊。channel檔案中就是要打的渠道包的名稱
配置一下簽名資訊
至此,多渠道相關的配置我們就已經完成了。下面我們來使用打包命令來進行打包試試
點選命令列,輸入gradlew assembleReleaseChannels
,然後回車
出現BUILD SUCCESSFUL 表示已經完成
下面我們去指令的存放資料夾看一下打的包
可以看到,已經根據channel檔案打出了對應的包了。
資源混淆(AndResGuard)
使用方法也很簡單,相關配置按照文件走就可以了,為了節省篇幅這裡我就不再贅述了。
我們來直接使用
開啟命令列輸入gradlew resguardRelease
執行完成之後我們可以看到混淆過後的包
下圖就是我們對資源混淆過後的包進行的反編譯,可以看到資原始檔名已經被混淆了。
我們再來看一下之前的多渠道打的包,可以看到資原始檔名稱是沒有變化的
這樣一來,App的資源混淆我們已經完成了
實現多渠道打包時自動進行資源混淆
上面我們已經分別實現了多渠道打包和資源混淆。但是我們也看到了,多渠道打包和資源混淆是兩個命令,也就是說他們實際上是兩個任務。我們想要達到的目的是我們輸入一行命令時,先執行資源混淆任務,然後再進行多渠道打包,這樣一來,我們打出來的所有包就都是已經進行過資源混淆的包了。
搞清楚如何實現就好說了,我們只需要在執行assembleReleaseChannels
打包任務之前先執行resguardRelease
資源混淆任務即可。
那麼,熟悉gradle的話你肯定會知道gradle是使用Groovy語言來實現的,不熟悉Grovvy也沒關係。你只需要在app模組的build.gradle中貼上以下程式碼
afterEvaluate {
tasks.getByName('assembleReleaseChannels') {
dependsOn(resguardRelease)
}
}
這幾行程式碼表示assembleReleaseChannels
任務是依賴於resguardRelease
任務的,也就是說先執行完資源混淆後再執行多渠道打包。
那麼,我們以後再使用gradlew assembleReleaseChannels
命令進行打包時就會先執行資源混淆的任務。這樣一來,我們就實現了打出來的包就是已經進行過資源混淆的包了。
下面我們來執行一下打包命令gradlew assembleReleaseChannels
可以看到,我們執行打包任務之前會先執行資源混淆的任務,然後再打包
然後我們再來反編譯一下apk,可以看到我們反編譯的是應用寶渠道的包,該包也已經進行過資源混淆了
到此為止,我們就實現了一行命令實現多渠道打包並自動進行資源混淆,同樣的,如果你還有其他的需求,也可以使用類似的方法去實現。
最後要說的是,gradle是使用Groovy語言的,作為一名Android工程師,還是很有必要去了解一下Groovy語言的。畢竟有些外掛能在開發上幫助我們節省很多時間。
下面是demo地址