一:使用Android Studio生成APK
1. 點(diǎn)擊Android Studio導(dǎo)航欄上的Build-->Generate Signrd APK,會(huì)彈出如下圖所示創(chuàng)建簽名APK對(duì)話框
創(chuàng)建簽名對(duì)話框
2.由于我們還沒有一個(gè)正式的KeyStore文件,我們應(yīng)該點(diǎn)擊Create New按鈕,然后會(huì)彈出一個(gè)新的對(duì)話框讓我們來填寫創(chuàng)建keystore文件所需要的信息,根據(jù)實(shí)際情況填寫就行,如下圖所示
填寫keystore文件信息
注意,在Validity那一欄填寫的是keystore文件的有效時(shí)長,單位是年,這里我填寫的是30年,然后點(diǎn)擊確定按鈕
3.記住點(diǎn)擊Remember password,這樣下一次就不用填寫密碼了
信息自動(dòng)填寫完整
填寫剛剛的密碼
選擇APK文件的輸出地址
4.點(diǎn)擊Finish按鈕,這里默認(rèn)將APK文件生成在項(xiàng)目app的根路徑下,稍等一段時(shí)間,APK文件就會(huì)生成好了,并在右上角彈出一個(gè)如下圖所示的彈出框,點(diǎn)擊Show in Explorer可以查看生成的APK文件
提示APK文件生成成功
APK路徑
二:使用grade生成APK
1.編輯app/build.grade文件,在android閉包中添加如下內(nèi)容
Paste_Image.png
在這里我們?cè)赼ndroid閉包里面添加了一個(gè)signingConfigs閉包,又在signingConfigs閉包里添加了一個(gè)config閉包,在config閉包里面有我們keystore文件的各種信息
- storeFile file:指定keystore文件的位置,在這里引用的是相對(duì)地址
- storePassword:指定密碼
- keyAlias:指定別名
- keyPassword:指定別名密碼
將簽名文件配置好之后,接下來只需要在生成正式版APK的時(shí)候去應(yīng)用這個(gè)配置就可以了,繼續(xù)編輯app/build.grade文件
這里我們?cè)赽uildTypes下的release閉包下應(yīng)用剛才的簽名配置,這樣在生成正式版APK的時(shí)候就會(huì)自動(dòng)使用我們剛才配置的簽名信息來進(jìn)行簽名了
2.現(xiàn)在build.grade文件已經(jīng)配置完成,那么我們?nèi)绾尾拍苌葾PK文件?
其實(shí)在Android Studio中內(nèi)置了很多的Grade Tasks,其中就包括生成APK的Task,點(diǎn)擊右側(cè)工具欄的Grade-->項(xiàng)目名-->:app-->Tasks-->Build
查看內(nèi)置Grade Tasks
其中assembleDebug用于生成測試版的APK文件,assembleRelease用于生成正式版的APK文件,assemble用于同時(shí)生成測試版和正式版的APK文件。
在生成APK文件之前,先要雙擊clean這個(gè)Task來清理一下當(dāng)前項(xiàng)目,然后雙擊assembleRelease,運(yùn)行完之后APK文件會(huì)自動(dòng)生成在app/build/outputs/apk目錄下
生成的APK文件
3,注意:這里雖然生成了APK文件,不過還有一個(gè)細(xì)節(jié)需要大家注意一下,目前keystore文件的所有信息都是已明文的形式直接配置在build.grade文件中,這樣就不太安全,Android推薦的做法是將這類敏感數(shù)據(jù)配置在一個(gè)獨(dú)立的文件里,然后再在build.grade里面讀取這些數(shù)據(jù)
在Android Studio項(xiàng)目的根目錄下有一個(gè)grade.properties文件,它是專門用來配置全局鍵值對(duì)數(shù)據(jù)的,我們?cè)趃rade.properties文件中添加如下數(shù)據(jù)
<code>
KEY_PATH=android.jks
KEY_PASS=111111
ALIAS_NAME=lilei
ALIAS_PASS=111111
</code>
然后我們?cè)赽uild.grade文件里去讀取這些數(shù)據(jù)
這樣直接查看build.grade文件就無法看到keystore文件的具體信息,只有查看grade.properties文件才能看到,我們只需要保護(hù)好grade.properties文件就行了,比如將它從Git版本控制中刪除。這樣grade.properties文件就只會(huì)保留在本地,從而就不用擔(dān)心keystore文件的信息會(huì)泄露了
三:生成多渠道APK文件
因?yàn)槟壳皣鴥?nèi)應(yīng)用市場琳瑯滿目,不像蘋果只有一個(gè)AppStore,當(dāng)然我們也可以使用同一個(gè)APK文件來上架不同的應(yīng)用商店,但是如果有一些特殊要求的話,比如針對(duì)不同的應(yīng)用商店渠道來定制不同的頁面
Android Studio提供了一種非常簡單的方法來解決這種差異性需求,極大地解決了之前版本維護(hù)的問題,比如我們準(zhǔn)備生成360和百度兩個(gè)渠道的APK文件,修改app/build.grade文件
可以看到,我們?cè)谶@里添加了一個(gè)productFlavors閉包,然后在閉包中添加所有的渠道配置就可以了,注意,Grade中的配置規(guī)定,不能以數(shù)字開頭,這里我們就用了qihoo來代替360的渠道配置。
渠道名的閉包中可以覆寫defaultConfig中的任意一個(gè)屬性,這里將applicationId進(jìn)行了覆寫,這樣最終生成的各渠道APK文件的包名也就不同
接下來我們針對(duì)不同渠道來編寫差異性需求,在app/src目錄下(main的平級(jí)目錄),新建一個(gè)百度目錄,然后在百度目錄下再新建Java和res這兩個(gè)目錄,如下圖所示
創(chuàng)建渠道專屬目錄
這樣我們就可以在這里編寫百度渠道特有的功能了,java目錄用于存放代碼,res目錄來存放資源,如果需要覆寫AndroidManifest文件里的內(nèi)容,還可以在百度目錄下新建一個(gè)AndroidManifest.xml文件,實(shí)際上我們也沒有什么差異性需求,因此我們就在這里給不同的APK取一個(gè)不同的應(yīng)用名吧
百度文件名
360文件名
我們就以這樣一個(gè)簡單的案例來實(shí)現(xiàn)渠道差異性需求,接下來生成多渠道APK包,打開右側(cè)的Grade Tasks列表,你會(huì)發(fā)現(xiàn)里面多出了幾個(gè)新的Task,如下圖所示
查看新的Task
如果只想生成百度的APK,就執(zhí)行assembleBaidu,如果只想生成360的APK,就執(zhí)行assembleQihoo,如果想一次性生成所有APK的渠道包,就執(zhí)行assembleRelease
除了使用grade的方式生成之外,使用Android Studio的可視化工具也是能生成多渠道的APK文件的,如下圖所示
使用可視化工具生成多渠道包
這里可以按住Ctrl來選擇要生成的包
最后我們會(huì)生成兩個(gè)不同的APK包,并且他們都可以安裝在手機(jī)上,因?yàn)槲覀冎案矊懥烁髑赖腶pplicationId屬性,包名會(huì)不同
不同渠道的APP
最后再寫一個(gè)指定我們r(jià)elease包的輸出名字就是我們的渠道名字,在buildTypes下的release閉包中寫上如下代碼
指定我們r(jià)elease包的輸出名字就是我們的渠道名字
生成的APK如下
APK名字