Android Gradle實用技巧(一) | 隱藏Android簽名文件和密鑰信息

Android Gradle必備使用技巧,未完待續,歡迎關注公眾號flysnow_org,第一時間看后續技巧。

什么是Gradle

Gradle是一款非常優秀的構建系統工具,它使用可以配置的DSL語言描述構建流程,同時允許我們使用原生的Java和Groovy編碼的方式進行構建,所以相比Ant、Maven這些非常靈活。

在Gradle中,大部分的構建都是通過Gradle的插件來完成的,插件是Gradle非常好的一個設計,Gradle提供了一個核心可以擴展的平臺,然后通過插件來擴展Gradle的能力,靈活方便。

Gradle本身提供了非常多的插件,比如java,war,scala等,可以滿足我們的絕大多數需求。如果內置的插件不能滿足需求,可以使用第三方開發的插件,甚至自己開發可以滿足自己需求的插件。

Gradle官網:https://gradle.org/
Gradle文檔:https://gradle.org/docs
Gradle插件:https://plugins.gradle.org/

如果沒有梯子,下載不了Gradle,我這里有個自己搭建的鏡像可以使用 http://mirrors.flysnow.org/

什么是Android Gradle

剛開始我們做Android開發的時候,采用的是Eclipse+Ant的構建方式,后來Android團隊打算采用基于IDEA的Android Studio的時候,采用了Gradle進行構建,為了能和Android Studio進行無縫整合,Android團隊開發了Android Gradle這個Gradle的第三方插件,用于Android的開發構建。使用Android Gradle,我們可以更好的:

  1. 代碼和資源的復用
  2. 很方便的創建App的衍生版本
  3. 可以滿足自定義、擴展,而且非常容易
  4. 當然不能少的,可以和Android Studio無縫整合

Android團隊開發了三個Android Gradle插件,但是他們都屬于一套代碼庫。這三個插件名字分別為:

  1. com.android.application
  2. com.android.library
  3. com.android.library

從名字上看,其實他們分別對應我們Android的 Android App開發,Android Lib庫開發以及Android Test測試工程的開發。

使用這三個插件也非常容易,和Gradle使用其它插件的方式一樣,因為這是一個非內置自帶的,第三方插件,所以我們首先得聲明classpath的依賴,才可以使用,和jdk的classpath很像。

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'
    }
}

我們配置里倉庫為jcenter,這樣當我們配置依賴的時候,gradle就會去這個倉庫里尋找我們的依賴。

然后我們在dependencies{}配置里我們需要的是Android Gradle2.2.3版本的插件。

buildscript{}這部分配置可以寫到根工程的build.gradle腳本文件中,這樣所有的子工程就不用重復配置了。
以上配置好之后,我們就可以應用我們的Android Gradle插件了。

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"
}

android{}是Android插件提供的一個擴展類型,可以讓我們自定義Android Gradle工程。compileSdkVersion是編譯所依賴的Android SDK的版本,這里是API Level;buildToolsVersion是構建該Android工程所以的構建工具的版本。

以上應用的是一個App工程插件,應用Android Library插件和Android Test插件也類似的,只需要換成相應的id即可。

隱藏Android簽名文件和密鑰信息

很多團隊一開始的成立的時候,十來個人,三五條槍,就開始創業了,每個組基本上就一個人,扛起所有。開始的時候,大家都不知道這款產品是否可以成功,所以也都沒想那么多,只能小步快跑,快速迭代,占領市場,搶占用戶,這才是最重要的。

隨著產品越做越好,團隊越來越大,組內成員越來越多,就開始注重團隊協作,編碼規范,性能安全,團隊建設等等,因為只有做到這些,整個團隊的工作效率和產出才能更高,才能有團隊的威力,越到最后靠的是團隊,而不是一個人。

說著說著快跑題了,扯到團隊建設和管理上了O(∩_∩)O~,這個以后有時間再交流,大家有想法也可以加微信公公眾號flysnow_org一起交流。說以上那么多,就是現在團隊大了,人多了,要正規了。

以前我們都是把App的簽名證書和相關密鑰放在項目中,托管在git上,這樣做非常方便,可以直接訪問打包,并且借助git這個代碼管理平臺維護管理。但是簽名信息這個是我們應用非常重要的信息,屬于公司重要的資源,所以我們要做到分級管理,保證安全,這也是公司保密措施的一部分,所以基于此,簽名信息需要隱藏,但是又可以讓大家都可以使用這個簽名打包。

簽名信息既然不能放在項目中,那么就需要有個地方存放他們,既然不能在每個開發者的電腦上,那就只能放到構建的服務器上,所以要實現這個,你還得有自己的專門用于打包發版的服務器,我們把簽名文件和密鑰信息放到服務器上,在打包的時候去讀取即可,下面我們以使用環境變量的方式為例,當然還有更多方式,比如配置文件等等。

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    signingConfigs {
        def appStoreFile = System.getenv("STORE_FILE")
        def appStorePassword = System.getenv("STORE_PASSWORD")
        def appKeyAlias = System.getenv("KEY_ALIAS")
        def appKeyPassword = System.getenv("KEY_PASSWORD")
        release {
            storeFile file(appStoreFile)
            storePassword appStorePassword
            keyAlias appKeyAlias
            keyPassword appKeyPassword
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
            zipAlignEnabled true
        }
    }
}

然后我們在打包的機器上配置以上環境變量即可,window和linux的方式不一樣,關于配置環境變量這一塊的知識,大家可以自行google一下。

如果你是使用Jenkins這類CI打包,以Jenkins,它的配置里就可以指定Jenkins使用的環境變量,這樣我們就不用區分linux和window了,只需要在Jenkins里配置即可。

以上配置好之后,我們就可以進行打包使用了,簽名信息也做了隱藏,看到這里,相信大家也意識到了一個問題,那就是每個開發者電腦上并沒有如上的環境變量配置,因為簽名信息對他們是隱藏的,那么他們如何進行打包測試呢?這就需要我們兩個一個debug簽名上場了,我們直接使用android自己提供的debug簽名即可,因為我們需要的是簽名,保證可以生成App測試(非debug調試)即可,比如給測試。

首先我們要從我們自己的電腦目錄上提取出來Android自帶的debug簽名,一般在你的${HOME}/.android/目錄下,找到后拷貝到我們的工程目錄下,其次找到他們的簽名信息,比如密碼,key等,這是公開的,我們可以參考Android文檔。

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    signingConfigs {
        def appStoreFile = System.getenv("STORE_FILE")
        def appStorePassword = System.getenv("STORE_PASSWORD")
        def appKeyAlias = System.getenv("KEY_ALIAS")
        def appKeyPassword = System.getenv("KEY_PASSWORD")

        //當不能從環境變量里獲取到簽名信息的時候,就使用項目中帶的debug簽名
        if(!appStoreFile||!appStorePassword||!appKeyAlias||!appKeyPassword){
            appStoreFile = "debug.keystore"
            appStorePassword = "android"
            appKeyAlias = "androiddebugkey"
            appKeyPassword = "android"
        }
        release {
            storeFile file(appStoreFile)
            storePassword appStorePassword
            keyAlias appKeyAlias
            keyPassword appKeyPassword
        }
    }
}

關鍵的邏輯就是在signingConfigs中加了判斷代碼,如果簽名信息四要素中的任何一個沒有獲取到,就使用默認的簽名信息,這樣當我們在打包服務器進行打包的時候就會使用正式發布的簽名,因為我們已經在服務器上配置了簽名信息的環境變量;當每個開發者自己生成Release包的時候,因為本機沒有配置,就使用默認的簽名。

假如有的開發者有時候也需要使用正式發布的簽名打正式的包,用于升級測試等目的,也是可以做到的,比如Jenkins,給每個開發者開放一個賬號,他們自己新建個Job就可以打正式的包了,打了之后可以在生成的構建里下載。

這里要隱藏我們的簽名信息,既能保證簽名信息的安全性,又可以進行正式的打包,其中的關鍵點是一個專有的打包服務器,如果你們公司還沒有的話,趕緊試試吧,好處多多,從這個小技巧也可以看到Gradle的靈活性,我們和編寫Java代碼一樣編寫我們的構建打包流程。

Android Gradle必備使用技巧,未完待續,歡迎關注公眾號flysnow_org,第一時間看后續技巧。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,983評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,772評論 3 422
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,947評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,201評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,960評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,350評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,406評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,549評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,104評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,914評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,089評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,647評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,340評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,753評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,007評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,834評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,106評論 2 375

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,677評論 25 708
  • 這一章主要針對項目中可以用到的一些實用功能來介紹Android Gradle,比如如何隱藏我們的證書文件,降低風險...
    acc8226閱讀 7,658評論 3 25
  • 1.介紹 如果你正在查閱build.gradle文件的所有可選項,請點擊這里進行查閱:DSL參考 1.1新構建系統...
    Chuckiefan閱讀 12,161評論 8 72
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,802評論 18 139
  • 夜晚,華燈初上,繁華街道上,有人成群嬉鬧,有人成雙入隊,有人匆忙趕車,有人……而我,盯著燙手的離婚證,與一...
    孤者無疆閱讀 255評論 0 0