集成步驟:
- 首先創(chuàng)建開發(fā)者賬號(hào),并創(chuàng)建一個(gè)應(yīng)用
- Androidstutio集成:
- 首先還是按照阿里文檔集成,有可能不成功的(文檔上面說了注意: 1.4.0版本的倉庫地址已經(jīng)發(fā)生了變更, 請(qǐng)更新到上述百川最新的倉庫地址),反正我是沒有成功
- 我的(這是根據(jù)阿里給的dome里面配置的):
先在project的gradle里面添加:
allprojects {
repositories {
jcenter()
maven {
//百川倉庫, ut/utdid
url "http://repo.baichuan-android.taobao.com/content/groups/BaichuanRepositories"
}
}
}
然后在module的gradle中添加:
dependencies { compile 'com.taobao.android:alisdk-hotfix:1.4.0' }
在文章的末尾我會(huì)貼出我的gradle代碼
- 創(chuàng)建一個(gè)Application
/**
* Created by Laer on 2016/12/20.
*/
public class Myapplication extends Application {
@Override
public void onCreate() {
super.onCreate();
HotFixManager.getInstance().setContext(this)
.setAppVersion("你的版本號(hào)")
.setAppId("你在開發(fā)者平臺(tái)創(chuàng)建應(yīng)用的appId")
.setAesKey(null)//如果對(duì)補(bǔ)丁進(jìn)行了Aes加密,這里就要填上,具體見開發(fā)文檔
.setSupportHotpatch(true)
.setEnableDebug(true)
.setPatchLoadStatusStub(new PatchLoadStatusListener() {
@Override
public void onload(final int mode, final int code, final String info, final int handlePatchVersion) {
// 補(bǔ)丁加載回調(diào)通知
if (code == PatchStatusCode.CODE_SUCCESS_LOAD) {
// TODO: 10/24/16 表明補(bǔ)丁加載成功
} else if (code == PatchStatusCode.CODE_ERROR_NEEDRESTART) {
// TODO: 10/24/16 表明新補(bǔ)丁生效需要重啟. 業(yè)務(wù)方可自行實(shí)現(xiàn)邏輯, 提示用戶或者強(qiáng)制重啟, 建議: 用戶可以監(jiān)聽進(jìn)入后臺(tái)事件, 然后應(yīng)用自殺
} else if (code == PatchStatusCode.CODE_ERROR_INNERENGINEFAIL) {
// 內(nèi)部引擎加載異常, 推薦此時(shí)清空本地補(bǔ)丁, 但是不清空本地版本號(hào), 防止失敗補(bǔ)丁重復(fù)加載
//HotFixManager.getInstance().cleanPatches(false);
} else {
// TODO: 10/25/16 其它錯(cuò)誤信息, 查看PatchStatusCode類說明
}
}
}).initialize();
}
}
- 添加網(wǎng)絡(luò)權(quán)限
<!-- 網(wǎng)絡(luò)權(quán)限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 外部存儲(chǔ)讀權(quán)限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
- 在清單文件中添加key
<meta-data
android:name="com.taobao.android.hotfix.APPSECRET"
android:value="你在開發(fā)者平臺(tái)獲取的APPSECRET" />
<meta-data
android:name="com.taobao.android.hotfix.RSASECRET"
android:value="你在開發(fā)者平臺(tái)獲取的RSASECRET" />
獲取這兩個(gè)參數(shù)的鏈接:
http://baichuan.taobao.com/docs/doc.htm?spm=a3c0d.7629140.0.0.9IOxxU&treeId=234&articleId=105459&docType=1#s1
project中的gradle
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
}
}
allprojects {
repositories {
jcenter()
maven {
//百川倉庫, ut/utdid
url "http://repo.baichuan-android.taobao.com/content/groups/BaichuanRepositories"
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
module的gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "25.0.0"
defaultConfig {
applicationId "com.xxx.alihix"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:25.0.0'
compile 'com.android.support:palette-v7:25.0.0'
compile 'com.taobao.android:alisdk-hotfix:1.4.0'
compile 'com.android.support:design:25.0.0'
}
至此我們的集成過程就已經(jīng)完成了,下面進(jìn)入調(diào)試使用階段
- 首先我們要?jiǎng)?chuàng)建一個(gè)old.apk(也就是有問題的apk)
- 首先將Myapplication中的.setAppVersion("1.0")//設(shè)置一個(gè)版本號(hào),隨便設(shè)置,后面再上傳補(bǔ)丁的時(shí)候會(huì)將補(bǔ)丁的版本號(hào)改成這個(gè),這兩個(gè)地方的版本哈要一致
- 接下來我們發(fā)布一個(gè)有問題的apk或是說old.apk,并將這個(gè)old.apk放到一個(gè)單獨(dú)的地方(我的:C:\Users\Laer\Desktop\oldApk\old.apk),以免發(fā)布新版本的時(shí)候覆蓋這個(gè)舊版本(這個(gè)old.apk會(huì)在生成補(bǔ)丁時(shí)用到)
- 然后更改想要修改的代碼,直接發(fā)布生成一個(gè)new.apk,同理將這個(gè)新的apk放到一個(gè)特定的位置(我的: C:\Users\Laer\Desktop\newApk\new.apk)
- 接下來我們就要使用阿里提供的生成補(bǔ)丁的工具了:
- 首先到這個(gè)鏈接下載工具:
http://baichuan.taobao.com/docs/doc.htm?spm=a3c0d.7629140.0.0.GWuCRq&treeId=234&articleId=105517&docType=1#s2
- 在這個(gè)工具所在的目錄打開cmd命令窗口,輸入生成補(bǔ)丁的命令:
- 首先到這個(gè)鏈接下載工具:
java -jar BCFixPatchTools-1.3.0.jar -c patch -s C:\Users\Laer\Desktop\oldApk\old.apk -f C:\Users\Laer\Desktop\newApk\new.apk -w patch-out
上面是我的最基本的生成補(bǔ)丁的命令,更完善命令或是要看具體含義可以參考文檔2.2 生成 patch:
https://baichuan.taobao.com/docs/doc.htm?spm=a3c0d.7629140.0.0.mFpm4X&treeId=234&articleId=105841&docType=1
將舊版的apk安裝到手機(jī)(這只是針對(duì)測(cè)試,實(shí)際不用這樣,用戶手機(jī)里肯定是舊版的)
-
將生成的補(bǔ)丁上傳到阿里(步驟:創(chuàng)建補(bǔ)丁新版本號(hào)---->點(diǎn)擊查看詳情----->上傳補(bǔ)丁---->確定發(fā)布),如圖:
注意這里所填的版本號(hào),就是在生成old.apk時(shí)在Application中填的版本號(hào)
創(chuàng)建補(bǔ)丁新版本
查看詳情
上傳補(bǔ)丁
查看詳情
確認(rèn)發(fā)布 退出當(dāng)前運(yùn)行的old.apk,從新進(jìn)入,這時(shí)程序?qū)?huì)自動(dòng)檢測(cè)是否有補(bǔ)丁,如果有將自動(dòng)加載補(bǔ)丁,正常來說你就可以實(shí)現(xiàn)熱更新后的效果了(有時(shí)候會(huì)程序會(huì)閃退,至于原因可以去看文檔)
順便提一下文檔中官方提到了一個(gè)調(diào)試工具,具體使用見文檔,使用起來也很簡單,我就不做介紹了
http://baichuan.taobao.com/docs/doc.htm?spm=a3c0d.7629140.0.0.x4PkBS&treeId=234&articleId=105842&docType=1
到這里整個(gè)生成補(bǔ)丁,調(diào)試都走完了,熱更新肯定也是有問題的,下面介紹一個(gè)我在調(diào)試時(shí)遇到的一個(gè)問題
- old.apk代碼:
public void onclick(View view) {
tv_show.setText("這是熱更新之前的");
// tv_show.setText("這是熱更新過后的");
}
我為textview添加了一個(gè)點(diǎn)擊事件,從而根據(jù)顯示的不同文字來區(qū)分是否熱更新成功
- new.apk代碼:
public void onclick(View view) {
// tv_show.setText("這是熱更新之前的");
tv_show.setText("這是熱更新過后的");
}
- 調(diào)試的結(jié)果就是報(bào)異常,狀態(tài)異常,如圖:

- 然后我改成了這樣:
public void onclick(View view) {
showMsg();
}
private void showMsg() {
// tv_show.setText("這是熱更新之前的");
tv_show.setText("這是熱更新過后的");
}
然后就成功了,我也沒搞懂到底是為啥
再給一個(gè)使用阿里熱更新可能存在的問題的鏈接
尊重勞動(dòng)成果,轉(zhuǎn)發(fā)請(qǐng)標(biāo)明原出處,謝謝。




