Android Studio打包以及Gradle配置構建

來源:互聯網
上載者:User

標籤:極光   mrp   structure   協同開發   main   object   小夥伴   idt   bfs   

本文轉載 郭霖公眾號

https://mp.weixin.qq.com/s?__biz=MzA5MzI3NjE2MA==&mid=2650241610&idx=1&sn=b8af73f6c288b6617d9fe0ab3618118d&pass_ticket=QK4j37kpmGNlsYcECWMb64HxKHEVJG5mSJubQEQguKI%3D

產生簽名檔案手動打包

首先產生簽名檔案,點擊 Build -> Generate Signed APK:

如果還沒有簽名檔案,點擊構造一個:

圖中圈住的三個地方是重要訊息,其餘隨意填。產生以後,就可以用該簽名檔案繼續簽名打包:

填入剛才的資訊,繼續:

選好輸出路徑,選擇打包類型,完成!

 

通過配置自動打包

 

如果你覺得上述打包步驟太麻煩,那麼我們就開始在gradle裡添加配置,自動打包。

快速鍵 Ctrl+Alt+Shift+S 或者 File -> Project Structure:

選擇 application,在 Signing 標籤下添加簽名配置,這裡的 Store File 就是我們的簽名檔案。我們還可以繼續添加構建類型,選擇 Build Types 標籤,添加 release,選擇剛才的簽名配置:

這樣我們就有了 debug 和生產類型的兩種打包方式,以後就可以根據需要自動打包。選中工程,點擊 Build -> Select Build Variant,選擇 release:

然後點擊 Build -> Build APK,打包檔案在 ..\app\build\outputs\apk,如此便使用我們自己的簽名檔案,打好了一個生產包。同樣也可以打出 debug 包,如果在 Build Types 中我們沒有設定 Signing Config,系統預設使用內建的 debug 簽名檔案打包。

 

 

隱藏簽名檔案敏感資訊

 

我們設定過打包配置以後,Gradle 自動 Sync,會在 application的 build.gradle 檔案中產生下面代碼:

signingConfigs {         config {             keyAlias ‘gaok_release‘             keyPassword ‘199110‘             storeFile file(‘E:/GK/gaok.jks‘)             storePassword ‘199110‘         }     } 

這些都是簽名檔案的敏感資訊,如果我們在協同開發的時候,最好把這些資訊隱藏掉。

首先在工程根目錄下建立一個 keystore.properties 檔案:

 

storePassword=199110keyPassword=199110keyAlias=gaok_release storeFile=E:/GK/gaok.jks

這裡要注意:所有屬性都沒有單引號.然後再在 build.gradle 檔案的如下位置添加:

 

apply plugin: ‘com.android.application‘ 
// Create a variable called keystorePropertiesFile, and initialize it to your
// keystore.properties file, in the rootProject folder.

def keystorePropertiesFile = rootProject.file("keystore.properties") // Initialize a new Properties() object called keystoreProperties.

def keystoreProperties = new Properties() // Load your keystore.properties file into the keystoreProperties object.

keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) android {    …… }

 

讀取到 keystore.properties 檔案,然後更改配置:

android {     signingConfigs {         config {             keyAlias keystoreProperties[‘keyAlias‘]             keyPassword keystoreProperties[‘keyPassword‘]             storeFile file(keystoreProperties[‘storeFile‘])             storePassword keystoreProperties[‘storePassword‘]         }     } }

 

這樣,所有的敏感資訊都放在了檔案裡,只需要好好儲存 keystore.properties 檔案就行了,記得可別把檔案也傳到git裡!

 

設定風味實現不同風味資源替換

 

什麼是風味?看這個圖:

我們在 Flavors 標籤下可以添加多個“風味”,以滿足個人化需要。

設定完風味以後,我們的 build.gradle 檔案會產生如下:

 

productFlavors {      huawei {}       // 華為商店      baidu {}        // 百度手機小幫手      yinyongbao {}   // 應用寶  }

 

比如這裡我添加了多個應用市場的渠道,每個渠道可能要適配不同的 SDK 版本;也可能我想要實現不同風味包(例如:生產和 debug 模式)的 logo 不同、某些代碼不同,那我們就可以設定源集目錄,專門收錄不同不同配置下的代碼和資源檔。首先切換到 Project 視圖,我們的工程預設是只有 main 源集,即 ../src/main 。

下面添加一個debug類型的源集:

這裡的 Target Source Set 會包含 buildTypes、productFlavors 和二者的組合變體。我這裡設定了debug 和 release 兩種類型,huawei、yingyongbao、baidu三種風味,所以會出現中這麼多選項。我們選擇 debug,系統自動給我們的工程產生了對應目錄。

同樣的可以添加 XML 檔案目錄:

我這裡添加了 values 檔案,同理可以添加 colors、strings、styles檔案。

繼續添加圖片資源:

這裡只是樣本,我選擇了一個不同的表徵圖:

這裡提示:表徵圖名字重複,因為 main 源集裡已經有 ic_launcher 表徵圖了,不過沒關係,我們在下一步選擇 debug 源集:

最終目錄如下:

現在我們有了 debug 源集,源集裡有一個不同的 app logo,這意味著,如果我們現在打了debug包,它的表徵圖將會是 debug 源集下的表徵圖,如,左側是 debug 包,右側是release 包。

至於我為什麼可以同時裝上 debug 包和 release 包,因為我添加了 applicationIdSuffix:

buildTypes {    release { 
      minifyEnabled false       proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘
      signingConfig signingConfigs.config       applicationIdSuffix ".release"   }   debug {       signingConfig signingConfigs.config       applicationIdSuffix ".debug"
  }
}

applicationIdSuffix 欄位表示:在不改變你預設的程式ID(包名)的情況下,為其添加尾碼。比如你的包名是 com.gk.app,但你想區分測試包和正式包的情況,這個時候將applicationIdSuffix 設定為.debug,那麼你的應用程式對應的包名就變成了com.gk.app.debug

 

多渠道打包

 

工作中,軟體包的發布工作一般是由運營小夥伴完成,包名格式一般會是:app + 版本號碼 + 渠道 ,不同渠道可能要進行不同的配置,因此我們必須針對所有渠道添加對應的風味。

android{     productFlavors {         //三個渠道         huawei {}       // 華為商店         baidu {}        // 百度手機小幫手         yinyongbao {}   // 應用寶     }     // 批量渠道包值替換(有些第三方庫中需要用到渠道名)     productFlavors.all { flavor ->         // 友盟、極光推送渠道包, UMENG_CHANNEL 是根據你AndroidManifest.xml來配置的,請看下面。         flavor.manifestPlaceholders = [UMENG_CHANNEL: name, JPUSH_CHANNEL: name]     } }

這裡的 UMENG_CHANNEL 是在 AndroidManifest.xml 檔案中配置的:

<!--變數採用${變數名}這樣來替換,不局限於<meta-data/> 標籤,任何你想替換的都行--> <meta-data    android:name="UMENG_APPKEY"    android:value="${UMENG_APPKEY}"/>

 

然後批量重新命名:

android{     ……     // 輸出檔案配置,格式如下:app-{版本號碼}-{渠道名稱}.apk     applicationVariants.all { variant ->         variant.outputs.each { output ->             def outputFile = output.outputFile             if (outputFile != null && outputFile.name.endsWith(‘.apk‘)) {                 def dirName = outputFile.parent // 輸出檔案夾所在的位置                 // 檔案名稱修改                 def fileName = "app-${defaultConfig.versionName}-${variant.flavorName}.apk"                 output.outputFile = new File(dirName, fileName)             }         }     }     …… }

如此再看 Select Build Variant:

我們打一個 baidu release 包:

同理,多渠道打包完成。

Android Studio打包以及Gradle配置構建

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.