下一代Android渠道打包工具Gradle插件

  • 這里先給上地址:
    https://github.com/mcxiaoke/packer-ng-plugin

  • 兩種方式:
    1. gradle配置多渠道打包(在不做APK資源壓縮和加固的情況下才可以用)
    2. 執(zhí)行腳本命令多渠道打包 簡(jiǎn)單方便(個(gè)人比較推薦)

  • 公司每次使用Android Studio gradle打包,面對(duì)那么多渠道包整個(gè)流程下來(lái)會(huì)讓人懷疑人生,然后在網(wǎng)上找了一圈贴见,有巨人已經(jīng)解決整個(gè)問(wèn)題了睁搭,今天我就站在巨人的肩膀上(20多個(gè)渠道包2分鐘搞定)淀弹。

  • 廢話不多說(shuō) 來(lái)看看如何使用吧:
    在工程的 gradle下 引入:
    classpath 'com.mcxiaoke.gradle:packer-ng:1.0.8'
    在module中的 gradle中引入:
    apply plugin: 'packer'
    android{

         signingConfigs{
          /*正式環(huán)境*/
          release {    
             assert localProps['keystore.props.file']    
             storeFile file(keyProps["store"])  
             keyAlias keyProps["alias"]   
             storePassword keyProps["storepass"] 
             keyPassword keyProps["pass"]  
            // 滿足下面兩個(gè)條件時(shí)需要此配置
    
            // 1. Gradle版本 >= 2.14.1
    
            // 2. Android Gradle Plugin 版本 >= 2.2.0
    
            // 作用是只使用舊版簽名,禁用V2版簽名模式
    
            v2SigningEnabled false
              }
           }
          buildTypes {    
            release {      
              signingConfig signingConfigs.release//簽名
              shrinkResources true//移除無(wú)用的resource文件   
              minifyEnabled true   
              zipAlignEnabled true      
              proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'            
             }              
            debug {     
                  minifyEnabled false     
                  zipAlignEnabled false 
               }
           }
        }
          packer {
                 //指定渠道打包輸出目錄
                 archiveOutput = 
                    file(new File(project.rootProject.buildDir.path,"archives"))
                 //指定渠道打包輸出文件名格式 默認(rèn)是 '${appPkg}-${flavorName}-${buildType}-v${versionName}-${versionCode}'
                 archiveNameFormat = ''    
                 // 是否檢查>Gradle配置中的signingConfig蟋软,默認(rèn)不檢查
                 checkSigningConfig = >false   
                 // 是否檢查Gradle配置中的zipAlignEnabled,默認(rèn)不檢查
                 checkZipAlign = false                               
                }
      dependencies {
            compile 'com.mcxiaoke.gradle:packer-helper:1.0.8'
      }
    

注意packer-ng的版本要和packer-helper的版本保持一致性(1.0.8)

  • 如果項(xiàng)目中有相關(guān)渠道統(tǒng)計(jì)的話只能在代碼中去實(shí)現(xiàn):
    友盟:
    //獲取渠道包名
    String market = PackerNg.getMarket(getApplicationContext());
    //第二個(gè)參數(shù)為 友盟key,第三個(gè)參數(shù)為:渠道名,第四個(gè)參數(shù)為統(tǒng)計(jì)格式(具體參照友盟官方文檔)
    MobclickAgent.startWithConfigure(new MobclickAgent.UMAnalyticsConfig(getApplicationContext(), BaseKeyConstants.APP_KAY, market, MobclickAgent.EScenarioType.E_UM_NORMAL, true));

    TalkingData:
    //渠道(默認(rèn))
    String market = Constant.CHANNELS;
    if (!Constant.IS_DEBUG) {
    market = PackerNg.getMarket(UJiPin.mAppContext);
    ULog.e(TAG,"渠道名:"+market);
    }
    //TalkingData初始(第二個(gè)參數(shù)為 TalkingData申請(qǐng)的KEY)
    TCAgent.init(UJiPin.mAppContext,Constant.TALKINGDATA_KEY, market)

       **以上為常用的渠道統(tǒng)計(jì)陌僵,其他渠道統(tǒng)計(jì)請(qǐng)參照官方文檔**
    

2.在工程的根目錄下創(chuàng)建.txt文本文件 也就是你的渠道名列表文件

Paste_Image.png

每行一個(gè)渠道號(hào) 渠道名和注釋之間用 # 號(hào)分割開 可以沒有注釋

  1. 在gradle.porperties中引用你的渠道文件列表
Paste_Image.png
  • 如果你的module中沒有配置 productFlavors等相關(guān)屬性的話這時(shí)只要執(zhí)行命令就可以打包了(在項(xiàng)目根目錄執(zhí)行):

    ./gradlew -Pmarket=markets.txt clean apkRelease

  • 缺點(diǎn)
    1.不支持修改AndroidManifest
    如果有用到第三方需要配置修改AndroidManifest.xml
    <meta-data name="xxxx" value="NAME_VALUE"></meta-data>
    那么您在gradle的配置將會(huì)無(wú)效(切記)
    defaultConfig {
    manifestPlaceholders[NAME_VALUE :xxxxxxxxxx]
    }
    2.不支持productFlavors中定義的條件編譯變量
    如果你的項(xiàng)目有多個(gè)productFlavors胎撤,默認(rèn)只會(huì)用第一個(gè)flavor生成的APK文件作為
    打包工具的輸入?yún)?shù),忽略其它flavor生成的apk府寒,代碼里用的是
    theVariant.outputs[0].outputFile魁衙。如果你想指定使用某個(gè)flavor來(lái)生成渠道包,
    可以用 apkFlavor1Release株搔,apkFlavor2Beta這樣的名字剖淀,示例
    productFlavors {
    tdebug {}
    Intel { }
    .....
    }

    ./gradlew -Pmarket=markets.txt clean apkIntelRelease
    或者
    ./gradlew -Pmarket=markets.txt clean apktdebugRelease

若你的apk需要進(jìn)行資源壓縮或者加固處理 那么多渠道打包必須放到最后一步 并且以上所說(shuō)的所有配置可以完全忽略(使用腳本來(lái)進(jìn)行打包)
** 優(yōu)點(diǎn):**
不參與Gradle構(gòu)建過(guò)程,所以不會(huì)影響你在 build.gradle 中的配置邪狞,且方便快捷祷蝌,一句命令就生成你需要的渠道包。

  • 再來(lái)說(shuō)說(shuō)用該作者的提供的腳本打包方式
    1. 首先去github下載工程
    2. 將工程中的tools文件夾復(fù)制到工程根目錄中
    3. 再將helper包里的 PackerNg.java
      到項(xiàng)目
  • 先用Android Studio 的 Build -->Generate Signed APK --> 選擇release 打出一個(gè)正式包
  • 拿到這個(gè)正式包做資源壓縮或者加固操作(若沒有這些需求 可以忽略這一步)
  • 執(zhí)行java命令

java -jar ../tools/PackerNg-x.x.x.jar apkFile marketFile outputDir

**apkFile 為你壓縮加固完成后的apk路徑**
**marketFile 你的渠道文件列表的路徑**
**outputDir 你需要將你apk追加渠道后輸出路徑**
  • Python腳本

python PackerNg-x.x.x.py [file] [market] [output] [-h] [-s] [-t TEST]

前面3個(gè)參數(shù)與java腳本的一致帆卓,至于后面3個(gè)參數(shù)什么意思 希望有懂Python小伙伴給提示下(PS:真的對(duì)python不太了解)

以上就是對(duì)多渠道打包方式的詳細(xì)解釋(若對(duì)哪里有疑問(wèn)歡迎提出)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市米丘,隨后出現(xiàn)的幾起案子剑令,更是在濱河造成了極大的恐慌,老刑警劉巖拄查,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吁津,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)碍脏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門梭依,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)羊瘩,“玉大人趁俊,你說(shuō)我怎么就攤上這事】胬辏” “怎么了钾埂?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵河闰,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我褥紫,道長(zhǎng)姜性,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任髓考,我火速辦了婚禮部念,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘氨菇。我一直安慰自己印机,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布门驾。 她就那樣靜靜地躺著射赛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪奶是。 梳的紋絲不亂的頭發(fā)上楣责,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音聂沙,去河邊找鬼秆麸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛及汉,可吹牛的內(nèi)容都是我干的沮趣。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼坷随,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼房铭!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起温眉,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤缸匪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后类溢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凌蔬,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了砂心。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片懈词。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖辩诞,靈堂內(nèi)的尸體忽然破棺而出坎弯,到底是詐尸還是另有隱情,我是刑警寧澤躁倒,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布荞怒,位于F島的核電站,受9級(jí)特大地震影響秧秉,放射性物質(zhì)發(fā)生泄漏褐桌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一象迎、第九天 我趴在偏房一處隱蔽的房頂上張望荧嵌。 院中可真熱鬧,春花似錦砾淌、人聲如沸啦撮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)赃春。三九已至,卻和暖如春劫乱,著一層夾襖步出監(jiān)牢的瞬間织中,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工衷戈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留狭吼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓殖妇,卻偏偏與公主長(zhǎng)得像刁笙,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谦趣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容