AndroidStudio打包處理

AndroidStudio非常強大,公司最近有一個需求是要實現對一個APP進行多個版本的打包,而且可以同時安裝在手機上。這個需求詳細一點的描述是:公司有一個APP,有多個開發商要使用我們的APP,爲了大家都想有一個自己的APP,而且圖標不一樣,app名字不一樣,背景不一樣等。我查詢了一下資料發現,在AndroidStudio的gradle是可以配置的。在此特意寫一篇文章記錄分享。

配置簽名

首先編寫好籤名文件,之後保存在自己的Module中,之後進行在build.gradle中添加一下的代碼

   android{
       //簽名
       signingConfigs {
           //標準版
           release {
               //打包可以所在的路徑
               storeFilefile("../key/your_key_file.jks")
               //AndroidStudio進行打包時輸入的密碼
               storePassword "store_passwrord_value"
               //key的別名
               keyAlias "app_alias_value"
               keyPassword "key_pwd_value"
           }

           //預覽版
           pre {
               storeFile file("../key/your_key_file.jks")
               storePassword "store_passwrord_value"
               keyAlias "app_alias_value"
               keyPassword "key_pwd_value"
           }
       }
   }

創建打包類型

創建需要打包的類型,對應的公司(暫時這樣理解)等,在這裏我們虛擬兩個公司:owant,ola,添加代碼如下,主要使用buildTypes的模塊,創建需要創建的模塊。

    buildTypes {
        //owant公司
        owant{
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

        //ola公司
        ola{
            minifyEnabled false
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

動態改變APP的個別參數

有了創建類型後,我們需要對應的類型進行動態更改一些參數,譬如,APP的包名,使得APP能同時安裝在同一臺手機上,owant的APP名字爲歐旺,ola的APP名字爲歐拉,還有APP的圖標顯示不一樣的圖標。代碼如下,其中對於動態字段是獲取是getResources().getString(R.string.companyName)和在string文件寫的一樣。


    productFlavors {
        //必須你輸出是在你的buildType的類型爲後綴
        //歐旺的最終版
        release_owant {
            //包名
            applicationId "com.owant.app"
            //字符改變main xml的文件字段值
            manifestPlaceholders = [app_name         : "歐旺",
                                    icon_value       : "@drawable/logo_owant"
            ]
            //在java代碼中使用的是getResources().getString(R.string.companyName)
            //目前只支持字符的動態
            resValue("string", "companyName", "歐旺有限公司")
        }
        //歐拉的預覽版
        pre_ola {
            applicationId "com.ola.app"
            manifestPlaceholders = [app_name         : "歐拉",
                                    icon_value       : "@drawable/logo_ola"
            ]
            resValue("string", "companyName", "歐拉有限公司")
        }
     }

打包輸出文件命名

對於apk的輸出的命名進行設置的代碼如下:

android{
  android {
        //打包輸出文件
        applicationVariants.all { variant ->
            variant.outputs.each { output ->
                output.outputFile = new File(
                        output.outputFile.parent,
                   "Owant_${variant.productFlavors[0].name}_v${variant.versionName}_" + buildTime() + ".apk")
                //  "Healthcare_${variant.productFlavors[0].name}_v${variant.versionName}" + ".apk")

            }
        }
    }
 }
//獲取系統時間
def buildTime() {
    def df = new SimpleDateFormat("yyyyMMdd")
    df.setTimeZone(TimeZone.getDefault())
    return df.format(new Date())
}

打包後對APP進行不必要資源的清理

進行了以上的實現後,發現我們的需求大部分都可以實現的。但是有一個問題。就是對於APP的背景改變問題,在進行打包之前,我是有一個思路的就是採用zip技術進行動態改變APK包的資源(apk是採用zip壓縮,解壓後再壓縮對簽名文件沒有破壞),但是後來發現對於字符的管理處理起來發現不行。後來查詢了很多網上的資源,發現AndroidStudio自帶的可以實現部分的。但是對於背景呢,我們必須有兩個背景圖片如logo_ola.pnglogo_owant.png在drawable文件下(app的圖標也是),發現我們的APK越大越大。這是我的解決方案是:

採用AndroidStudio的gradle進行字符管理
採用zip壓縮技術進行資源清理,刪除無關的數據

最終的腳本代碼,我還沒有寫。你也可以用壓縮工具進行刪除。希望對大家有幫助。

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