Android 打包APK+多渠道打包

注意:本篇文章是本人閱讀相關(guān)文章的總結(jié),方便以后查閱,所有內(nèi)容非原創(chuàng),侵權(quán)刪。

本篇文章內(nèi)容來自于
1.Android第一行代碼 郭霖
2.相對應(yīng)的知識塊的最下方會給出原來的帖子的鏈接

目錄

  1. 打包帶正式簽名的APK
    --1.1 使用AS自動生成
    --1.2 使用Gradle生成
    ----1.2.1 Gradle生成APK操作流程
    ----1.2.2 加強保密性:將keystore信息配置在gradle.properties中
  2. 多渠道打包
    --2.1 使用Gradle生成/使用AS自動生成
    --2.2 使用三方多渠道打包(待補)

前言

Android系統(tǒng)會將所有的APK文件識別為應(yīng)用程序的安裝包,類似于windows的exe文件。
但并不是所有的apk文件都能成功安裝到手機上,Android系統(tǒng)要求只有簽名后的APK文件才可以安裝。

通過AS將程序安裝到手機上的背后流程:
AS會將程序代碼打包成一個APK文件,然后將這個文件傳輸?shù)绞謾C上,最后再執(zhí)行安裝操作。其中AS使用了默認的keystore文件幫我們自動進行了簽名。
默認的keystore文件在:點擊AS右側(cè)工具欄的Gradle->項目名->app:->Tasks->android 雙擊siginingReport,然后在控制臺可以看到Store: /Users/apple/Desktop/androddemo/haha.jks

1. 打包帶正式簽名的APK

keyStore 密鑰庫路徑
keyStore Password 密鑰庫密碼
keyAlias 簽名文件別名
keyPassword 簽名文件密碼

1.1 使用AS自動生成

點擊Android studio導(dǎo)航欄的Build->Generate Signed APK
按照步驟進行生成

1.2 使用Gradle生成

1.2.1 Gradle生成APK操作流程

1.配置簽名信息
編輯app/build.gradle文件
在android閉包中添加以下內(nèi)容

android {
  ...
  signingConfigs{
      config{ //配置keystore文件的各種信息
          storeFile file('/Users/apple/Desktop/androddemo/haha.jks') //指定keystore文件的位置
          storePassword '123456' //密碼
          keyAlias 'key' //別名
          keyPassword '123456' //別名密碼
      }
  }
  ...
}

2.應(yīng)用配置
即在生成正式版APK的時候去應(yīng)用這個配置
編輯app/build. gradle文件

android {
  ...
    buildTypes {
        release {
            minifyEnabled false 
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.config //應(yīng)用剛才添加的簽名配置
            //則生成正式版APK的時候就會自動使用我們剛才配置的簽名信息來進行簽名了。
        }
    }
  ...
}

3.生成APK文件
點擊AS右側(cè)工具欄的Gradle->項目名->app:->Tasks->build
先clean清理當(dāng)前項目,在雙擊assembleRelease,生成正式版APK
當(dāng)提示控制臺提示build successful,則成功
APK文件自動生成在app/build/outputs/apk目錄下
app-release.apk就是帶正式簽名的APK文件

1.2.2 加強保密性:將keystore信息配置在gradle.properties中

根據(jù)以上的打包生成APK流程,目前keystore文件的所有信息都是以明文的形式直接配置在build.gradle中的,這樣不太安全。
Android推薦的做法是將這類敏感數(shù)據(jù)配置在一個獨立的文件里面,然后再在build.gradle中讀取這些數(shù)據(jù)。
1.在gradle.properties中存放敏感數(shù)據(jù)
AS項目的根目錄下有一個gradle.properties文件,專門用來配置全局鍵值對數(shù)據(jù)的。
則在gradle.properties中添加以下內(nèi)容:

KEY_PATH=/Users/apple/Desktop/androddemo/haha.jks
KEY_PASS=123456
ALIAS_NAME=key
ALIAS_PASS=123456

2.在build.gradle中讀取數(shù)據(jù)
編輯app/build.gradle

android {
  ...
  signingConfigs{
      config{ //配置keystore文件的各種信息
            storeFile file(KEY_PATH)
            storePassword KEY_PASS
            keyAlias ALIAS_NAME
            keyPassword ALIAS_PASS
      }
  }
  ...
}

3.將gradle.properties文件保護好
這樣直接查看build.gradle文件是無法看到keystore文件的各種信息的,只有查看gradle.properties文件才能看得到。
然后我們只需要將gradle.properties文件保護好就可以了。比如將它從git版本控制中排除,這樣gradle.properties文件只能保留在本地,從而不用擔(dān)心keystore文件的信息泄漏。

2.多渠道打包

其實完全可以使用同一個APK文件來上架不同的應(yīng)用商店,但是如果有一些特殊需求的話,比如針對不同的應(yīng)用商店渠道來定制不同的界面,則差異化需求,則需要用到多渠道。

2.1 使用Gradle生成/使用AS自動生成

比如我們要生成百度和360兩個渠道的APK文件

2.1.1 修改app/build.gradle文件 用于添加所有的渠道配置
android {
    ...
    defaultConfig {
        applicationId "com.example.apple.tempdemo1"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
   
    flavorDimensions "versionCode"
    //多渠道打包的
    //添加productFlavors閉包,用于添加所有的渠道配置
    productFlavors{
        qihoo{
            //渠道名中的閉包中可以復(fù)寫defaultConfig的任何一個屬性
            applicationId "com.example.apple.systemdemo.qihoo"
            //修改applicationId屬性,則最終生成的各個渠道的APK文件的包名也不同
        }
        baidu{
            applicationId "com.example.apple.systemdemo.baidu"
        }
    }
    ...
}

Error:All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com/r/tools/flavorDimensions-missing-error-message.html
解決:在android閉包中加入

    flavorDimensions "versionCode"
2.1.2.針對不同渠道編寫差異性需求

在app/src目錄下(main的平級目錄),新建一個baidu目錄,然后在baidu目錄下再新建java和res兩個目錄。java用于存放代碼,res目錄用于存放資源。如果要重寫AndroidManifest文件中的內(nèi)容,則可在新建目錄下再新建一個AndroidManifest.xml。


例子:不同渠道不同的應(yīng)用名和應(yīng)用圖標(biāo)
清單文件中的配置是

android:icon="@mipmap/pic1"
android:label="@string/app_name"

則在對應(yīng)的渠道文件夾下放入想要差異化的資源


2.1.3 生成多渠道的APK文件

1. 使用Gradle生成
點擊AS右側(cè)工具欄的Gradle->項目名->app:->Tasks->build
此時會發(fā)現(xiàn)多出了幾個新的Task
先clean清理當(dāng)前項目,在雙擊assembleRelease,生成正式版APK
當(dāng)提示控制臺提示build successful,則成功
APK文件自動生成在app/build/outputs/apk目錄下
app-release.apk就是帶正式簽名的APK文件

2. 使用AS可視化工具生成
點擊Android studio導(dǎo)航欄的Build->Generate Signed APK
選擇生成的時候會有多選

2.2 使用三方多渠道打包(待補)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,720評論 25 709
  • 1.介紹 如果你正在查閱build.gradle文件的所有可選項,請點擊這里進行查閱:DSL參考 1.1新構(gòu)建系統(tǒng)...
    Chuckiefan閱讀 12,355評論 8 72
  • 最近在項目中遇到需要實現(xiàn) Apk 多渠道、定制化打包, Google 、百度查找了一些資料,成功實現(xiàn)了上述功能,在...
    看一季殘花落幕閱讀 2,645評論 1 8
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,502評論 19 139
  • 這是夢,秋天的夢,這是情,心痛的情,《秋殤》 應(yīng)天在一所古老的大學(xué)上學(xué)。 門口拱樓交錯,紅墻漢瓦,參天的古樹,綠綠...
    漢儒應(yīng)天閱讀 691評論 3 2

友情鏈接更多精彩內(nèi)容