打aar混淆包和集成aar的方法

最近項目中有用到發佈混淆aar的需求,網上有很多方法,但都不夠全面,這裏把自己整理的結果做個彙總,避免重複收集浪費時間

環境要求

android studio(該方法是針對AS的)

初始需求

把你項目中的某一個模塊,打包成一個混淆的aar,集成到其他的項目中,同事暴露的接口不混淆,你這個aar的依賴庫跟其他項目的依賴庫不能衝突

需求詳情

假設目前的項目有三個module,A, B, C,A是application類型,B, C是library,關係是A依賴B,B依賴C,現在要把B模塊打包成一個混淆的aar發佈給其他的項目使用,其他項目拿到B的aar以後,集成要OK,並且依賴沒問題

好,背景情況介紹完了,下面是解決方法

1 依賴關係剝離

把B模塊中的一些依賴的庫全部移到C中,比如網絡庫,圖片庫和其他第三方的庫,統統剝離,放到C中,B只是一個純粹的實現某個需求一個模塊庫,不包含其他任何第三方依賴庫,這種剝離是爲了方便後期其他項目的接入

2 配置B的混淆

  • 把B的入口方法統一到一個類中,在混淆文件中加上keep的方法,讓這個類不被混淆,同事R文件也能混淆,配置方式如下:
    -keep class *.R -keepclasseswithmembers class **.R$* { public static <fields>;}
    其他的混淆配置看項目具體的情況了,一般實力類不混淆,不屬於這個主題,不多介紹了
  • build.gradle配置
    要配置對應生成aar的那個模塊的build.gradle,其他的模塊的不要改動,配置方式如下:
    buildTypes {
      release {
          minifyEnabled true
          proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
      }
      }
    沒看錯,只要配置release就可以了,把minifyEnabled設置成ture就可以了

3 生成aar

生成aar非常簡單,只要運行項目,在對應的build路徑下會自動生成aar,比如我這個demo項目的aar路徑是:

E:\practise\AarDemo\mylibrary\build\outputs\aar
裏面有兩個aar,一個是debug,一個是release,拿release那個,debug那個是沒有混淆的

4 發佈aar

  • 把你要發佈的aar,和該aar說依賴第三方的庫整理好,一起給要新的項目,新的項目如果已經有依賴那些第三方的庫,則無需重新依賴,對於沒有依賴的,就要配置依賴關係,這個就是第一步剝離依賴的好處,避免多餘的依賴
  • 在新的項目的application模塊的libs文件夾下面放上該aar文件,同事在該模塊對應的build.gralde中加上下面的配置
    dependencies {
          compile(name:'mylibrary-release', ext:'aar')
         }
    repositories{
          flatDir{
      dirs 'libs'
          }
    

    }

  • 打包aar 時 如何不混淆某個類及裏邊的某個方法

  • -keep class com.demo.download.DownloadManager  {
      public static DownloadManager getInstance();
      public void startDownload(Url, java.lang.String, Callback);
    }

發佈了30 篇原創文章 · 獲贊 13 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章