2019-04-05 android 配置生成apk

app/build.gradle 文件

第一步:

    1.主要是通過gradle語言中的alllicationVarient變量all方法獲取所有值丘薛,繼而對all遍歷varient->varient.outputs.each,通過output變量中的processManifest中的doLast業(yè)務:

第二步:

   2:處理doLast的業(yè)務時:拼接對應的位置的AndroidManifest.xml,繼而進行替換文件中的指定的字符串的值umeng_channel_value指定字符的值!

第三步:

   3:通過判斷varient.productFlavors[0].name名稱是否為指定一個固定的"devloper"名稱,如果是:將AndroidManifest文件中的第三方的key替換成 gradle.properties文件中一些常量值!反之空凸,替換成一些另外的一些值!

第四步:

  4:將mainfest文件路徑,通過java文件對象將替換后字符串內(nèi)容迷殿,寫入到文件中谈火!
 output.processResources.manifestFile = 
         file("${buildDir}/intermediates/manifests/full/${variant.dirName}/AndroidManifest.xml")

具體的代碼邏輯:

    android.applicationVariants.all { variant ->
     variant.outputs.each
             {
                 output ->
                     output.processManifest.doLast {
                         //之前這里用的copy{}茶没,我換成了文件操作肌幽,這樣可以在v1.11版本正常運行,并保持文件夾整潔
                         //${buildDir}是指./build文件夾
                         //${variant.dirName}是flavor/buildtype抓半,例如GooglePlay/release喂急,運行時會自動生成
                         //下面的路徑是類似這樣:./build/manifests/GooglePlay/release/AndroidManifest.xml
//                            System.out.println("develop output.dirName:"+${output.dirName}+"..variant.productFlavors[0].name:"+variant.productFlavors[0].name+"..

                          output.productFlavors[0].name:"+output.productFlavors[0].name);
//                            System.out.println("develop output.dirName:"+${output.dirName});
                         def manifestFile =      
                        "${buildDir}/intermediates/manifests/full/${output.dirName}/AndroidManifest.xml"
//                            System.out.println("develop variant.productFlavors[0].name:" + output.productFlavors[0].name);
                         //將字符串UMENG_CHANNEL_VALUE替換成flavor的名字
                         def updatedContent = new File(manifestFile).getText('UTF-8').replaceAll("UMENG_CHANNEL_VALUE", "${variant.productFlavors[0].name}")
                         //替換包名、appkey
                         if ("devlop".equalsIgnoreCase("${variant.productFlavors[0].name}")) {
                             System.out.println("develop");
                             updatedContent = updatedContent.replaceAll("UMENG_APPKEY_VALUE", "${project.UMENG_APPKEY_VALUE_DEBUG}").
                                     replaceAll("JPUSH_APPKEY_VALUE", "${project.JPUSH_APPKEY_VALUE_DEBUG}").
                                     replaceAll("NETEASE_APPKEY_VALUE", "${project.NETEASE_APPKEY_VALUE_DEBUG}");
                         } else {
                             System.out.println("develop else");
                             updatedContent = updatedContent.replaceAll("UMENG_APPKEY_VALUE", "${project.UMENG_APPKEY_VALUE_PRODUCT}").
                                     replaceAll("JPUSH_APPKEY_VALUE", "${project.JPUSH_APPKEY_VALUE_PRODUCT}").
                                     replaceAll("NETEASE_APPKEY_VALUE", "${project.NETEASE_APPKEY_VALUE_PRODUCT}");
                         }
                         new File(manifestFile).write(updatedContent, 'UTF-8')
//                            def testFile="D://${variant.productFlavors[0].name}.txt";
//                            new File(testFile).write(updatedContent, 'UTF-8')
                         //將此次flavor的AndroidManifest.xml文件指定為我們修改過的這個文件
                         output.processResources.manifestFile = file("${buildDir}/intermediates/manifests/full/${variant.dirName}/AndroidManifest.xml")

                     }
             }
       }


第五步:

   5.需要將gradle.properties中的配置文件中的第三方平臺的鍵appkey的信息動態(tài)地配置進來:
    UMENG_APPKEY_VALUE_DEBUG=58a26f4275ca3506ff00014a: 友盟測試環(huán)境下的key
    UMENG_APPKEY_VALUE_PRODUCT=58a26e70734be46f2b000243:友盟正式環(huán)境下的key

    JPUSH_APPKEY_VALUE_DEBUG=c43681960f7292c56b41280a: 極光測試環(huán)境下的key
    JPUSH_APPKEY_VALUE_PRODUCT=2d361c168b81de1a6d1a73d1 極光正式環(huán)境下的key
    NETEASE_APPKEY_VALUE_DEBUG=0ae09ff2cf01cf43d6e66d23ed87b0bf :云信測試環(huán)境下的key
    NETEASE_APPKEY_VALUE_PRODUCT=27b526714268b831ae835958fa0c40cf 云信正式環(huán)境下的key

第六步:

   6:一般分構建類型和產(chǎn)品多配置打包類型:
       *構建類型中分為release 和debug 版笛求,主要分別相關的簽名相關的信息*
具體代碼如下
    signingConfigs {
    /**
     * 設置你的keystore相關
     * demo中只是一個示例廊移,使用時請根據(jù)實際情況進行配置
     */
    debug {
        //keystore中key的別名
        keyAlias 'unipus'
        //keystore中key的密碼
        keyPassword 'unipus'
        //keystore的文件路徑,可以使絕對路徑也可以是相對
        storeFile file('unipus.jks') 放入到當前路徑下的jks的文件!
        //keystore的密碼
        storePassword 'unipus'
    }

    release {
        //keystore中key的別名
        keyAlias 'unipus'
        //keystore中key的密碼
        keyPassword 'unipus'
        //keystore的文件路徑探入,可以使絕對路徑也可以是相對
        storeFile file('unipus.jks') 放入到當前路徑下的jks的文件!
        //keystore的密碼
        storePassword 'unipus'
    }
}

.而多個產(chǎn)品配置打包狡孔,可能涉及到不同產(chǎn)品發(fā)布平臺中的一些的配置信息,注意平臺中一般 不在manifest文件不配置第三方開發(fā)的appkey!

   productFlavors {
    devlop {
        applicationIdSuffix ".dev" 將包名動態(tài)改變!
        manifestPlaceholders=[JPUSH_PKGNAME:"cn.unipus.ispeak.cet.dev",UMENG_CHANNEL_VALUE: 
                 name]
    }
    unipus {
        manifestPlaceholders=[JPUSH_PKGNAME:"cn.unipus.ispeak.cet",UMENG_CHANNEL_VALUE: name]
    }

    yingyongbao {
        manifestPlaceholders=[JPUSH_PKGNAME:"cn.unipus.ispeak.cet",UMENG_CHANNEL_VALUE: name]
    }

    zhushou360 {
        manifestPlaceholders=[JPUSH_PKGNAME:"cn.unipus.ispeak.cet",UMENG_CHANNEL_VALUE: name]
    }

    xiaomi {
        manifestPlaceholders=[JPUSH_PKGNAME:"cn.unipus.ispeak.cet",UMENG_CHANNEL_VALUE: name]
    }

    baidu {
        manifestPlaceholders=[JPUSH_PKGNAME:"cn.unipus.ispeak.cet",UMENG_CHANNEL_VALUE: name]
    }

    huawei {
        manifestPlaceholders=[JPUSH_PKGNAME:"cn.unipus.ispeak.cet",UMENG_CHANNEL_VALUE: name]
    }

    wandoujia {
        manifestPlaceholders=[JPUSH_PKGNAME:"cn.unipus.ispeak.cet",UMENG_CHANNEL_VALUE: name]
    }

}

注意開發(fā)項目時蜂嗽,一定要做好項目多個平臺下的release和debug兩種構建類型動態(tài)參數(shù)的設置

  buildTypes {
    debug {
        applicationIdSuffix ".dev" //測試環(huán)境下的包名
        manifestPlaceholders=[JPUSH_PKGNAME:"cn.unipus.ispeak.cet.dev",UMENG_CHANNEL_VALUE: name,NIM_PACKAGE:"cn.unipus.ispeak.cet.dev",UMENG_APPKEY_VALUE:"${project.UMENG_APPKEY_VALUE_DEBUG}",JPUSH_APPKEY_VALUE:"${project.JPUSH_APPKEY_VALUE_DEBUG}",NETEASE_APPKEY_VALUE:"${project.NETEASE_APPKEY_VALUE_PRODUCT}"]//對應第三方開發(fā)appKey配置
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.release
    }
    release {
        manifestPlaceholders=[JPUSH_PKGNAME:"cn.unipus.ispeak.cet",UMENG_CHANNEL_VALUE: name,NIM_PACKAGE:"cn.unipus.ispeak.cet",UMENG_APPKEY_VALUE:"${project.UMENG_APPKEY_VALUE_PRODUCT}",JPUSH_APPKEY_VALUE:"${project.JPUSH_APPKEY_VALUE_PRODUCT}",NETEASE_APPKEY_VALUE:"${project.NETEASE_APPKEY_VALUE_PRODUCT}"]
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.release
        // 自定義輸出配置
    }
    applicationVariants.all { variant -> //為最后生成apk文件命名!
        variant.outputs.each { output ->
            def outputFile = output.outputFile
            if (outputFile != null && outputFile.name.endsWith('.apk') && outputFile.name.contains("debug")) {
                // 輸出apk名稱為iSpeak_v1.0_wandoujia.apk
                def fileName = "iSpeak_v${defaultConfig.versionName}_${variant.productFlavors[0].name}_debug.apk"
                output.outputFile = new File(outputFile.parent, fileName)
            }else if(outputFile != null && outputFile.name.endsWith('.apk') && outputFile.name.contains("release")){
                // 輸出apk名稱為iSpeak_v1.0_wandoujia.apk
                def fileName = "iSpeak_v${defaultConfig.versionName}_${variant.productFlavors[0].name}_release.apk"
                output.outputFile = new File(outputFile.parent, fileName)
            }
        }
    }
}    

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末苗膝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子植旧,更是在濱河造成了極大的恐慌辱揭,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件病附,死亡現(xiàn)場離奇詭異问窃,居然都是意外死亡,警方通過查閱死者的電腦和手機完沪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門域庇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人覆积,你說我怎么就攤上這事听皿。” “怎么了宽档?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵写穴,是天一觀的道長。 經(jīng)常有香客問我雌贱,道長啊送,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任欣孤,我火速辦了婚禮馋没,結果婚禮上,老公的妹妹穿的比我還像新娘降传。我一直安慰自己篷朵,他們只是感情好,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布婆排。 她就那樣靜靜地躺著声旺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪段只。 梳的紋絲不亂的頭發(fā)上腮猖,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音赞枕,去河邊找鬼澈缺。 笑死,一個胖子當著我的面吹牛炕婶,可吹牛的內(nèi)容都是我干的姐赡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼柠掂,長吁一口氣:“原來是場噩夢啊……” “哼项滑!你這毒婦竟也來了?” 一聲冷哼從身側響起涯贞,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤枪狂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后肩狂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體摘完,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年傻谁,在試婚紗的時候發(fā)現(xiàn)自己被綠了孝治。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡审磁,死狀恐怖谈飒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情态蒂,我是刑警寧澤杭措,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站钾恢,受9級特大地震影響手素,放射性物質發(fā)生泄漏鸳址。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一泉懦、第九天 我趴在偏房一處隱蔽的房頂上張望稿黍。 院中可真熱鬧,春花似錦崩哩、人聲如沸巡球。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽酣栈。三九已至,卻和暖如春汹押,著一層夾襖步出監(jiān)牢的瞬間矿筝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工鲸阻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留跋涣,地道東北人。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓鸟悴,卻偏偏與公主長得像陈辱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子细诸,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

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

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5沛贪? 答:HTML5是最新的HTML標準。 注意:講述HT...
    kismetajun閱讀 27,486評論 1 45
  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫震贵、插件利赋、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,103評論 4 62
  • 點擊查看原文 Web SDK 開發(fā)手冊 SDK 概述 網(wǎng)易云信 SDK 為 Web 應用提供一個完善的 IM 系統(tǒng)...
    layjoy閱讀 13,764評論 0 15
  • 是誰給了我一副軀體 讓我行走在世間的牢籠里 如同尸肉任她擺布 是誰給了我一個大腦 讓我掉入于世間的圈套里 如同尸肉...
    朱一寧閱讀 631評論 1 49
  • 一種對工作和學習的沖擊力及持久力會讓你有特殊的魅力和個人實力媚送。
    張偉kk閱讀 189評論 0 0