集成步驟:
- 首先創(chuàng)建開發(fā)者賬號袄琳,并創(chuàng)建一個應用
- Androidstutio集成:
- 首先還是按照阿里文檔集成边锁,有可能不成功的(文檔上面說了注意: 1.4.0版本的倉庫地址已經(jīng)發(fā)生了變更, 請更新到上述百川最新的倉庫地址)温自,反正我是沒有成功
- 我的(這是根據(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' }
在文章的末尾我會貼出我的gradle代碼
- 創(chuàng)建一個Application
/**
* Created by Laer on 2016/12/20.
*/
public class Myapplication extends Application {
@Override
public void onCreate() {
super.onCreate();
HotFixManager.getInstance().setContext(this)
.setAppVersion("你的版本號")
.setAppId("你在開發(fā)者平臺創(chuàng)建應用的appId")
.setAesKey(null)//如果對補丁進行了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) {
// 補丁加載回調通知
if (code == PatchStatusCode.CODE_SUCCESS_LOAD) {
// TODO: 10/24/16 表明補丁加載成功
} else if (code == PatchStatusCode.CODE_ERROR_NEEDRESTART) {
// TODO: 10/24/16 表明新補丁生效需要重啟. 業(yè)務方可自行實現(xiàn)邏輯, 提示用戶或者強制重啟, 建議: 用戶可以監(jiān)聽進入后臺事件, 然后應用自殺
} else if (code == PatchStatusCode.CODE_ERROR_INNERENGINEFAIL) {
// 內部引擎加載異常, 推薦此時清空本地補丁, 但是不清空本地版本號, 防止失敗補丁重復加載
//HotFixManager.getInstance().cleanPatches(false);
} else {
// TODO: 10/25/16 其它錯誤信息, 查看PatchStatusCode類說明
}
}
}).initialize();
}
}
- 添加網(wǎng)絡權限
<!-- 網(wǎng)絡權限 -->
<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" />
<!-- 外部存儲讀權限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
- 在清單文件中添加key
<meta-data
android:name="com.taobao.android.hotfix.APPSECRET"
android:value="你在開發(fā)者平臺獲取的APPSECRET" />
<meta-data
android:name="com.taobao.android.hotfix.RSASECRET"
android:value="你在開發(fā)者平臺獲取的RSASECRET" />
獲取這兩個參數(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)完成了,下面進入調試使用階段
- 首先我們要創(chuàng)建一個old.apk(也就是有問題的apk)
- 首先將Myapplication中的.setAppVersion("1.0")//設置一個版本號崩掘,隨便設置七嫌,后面再上傳補丁的時候會將補丁的版本號改成這個,這兩個地方的版本哈要一致
- 接下來我們發(fā)布一個有問題的apk或是說old.apk,并將這個old.apk放到一個單獨的地方(我的:C:\Users\Laer\Desktop\oldApk\old.apk)苞慢,以免發(fā)布新版本的時候覆蓋這個舊版本(這個old.apk會在生成補丁時用到)
- 然后更改想要修改的代碼诵原,直接發(fā)布生成一個new.apk,同理將這個新的apk放到一個特定的位置(我的: C:\Users\Laer\Desktop\newApk\new.apk)
- 接下來我們就要使用阿里提供的生成補丁的工具了:
- 首先到這個鏈接下載工具:
http://baichuan.taobao.com/docs/doc.htm?spm=a3c0d.7629140.0.0.GWuCRq&treeId=234&articleId=105517&docType=1#s2
- 在這個工具所在的目錄打開cmd命令窗口挽放,輸入生成補丁的命令:
- 首先到這個鏈接下載工具:
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
上面是我的最基本的生成補丁的命令绍赛,更完善命令或是要看具體含義可以參考文檔2.2 生成 patch:
https://baichuan.taobao.com/docs/doc.htm?spm=a3c0d.7629140.0.0.mFpm4X&treeId=234&articleId=105841&docType=1
將舊版的apk安裝到手機(這只是針對測試,實際不用這樣辑畦,用戶手機里肯定是舊版的)
-
將生成的補丁上傳到阿里(步驟:創(chuàng)建補丁新版本號---->點擊查看詳情----->上傳補丁---->確定發(fā)布)吗蚌,如圖:
注意這里所填的版本號,就是在生成old.apk時在Application中填的版本號
創(chuàng)建補丁新版本
查看詳情
上傳補丁
查看詳情
確認發(fā)布 退出當前運行的old.apk纯出,從新進入蚯妇,這時程序將會自動檢測是否有補丁,如果有將自動加載補丁暂筝,正常來說你就可以實現(xiàn)熱更新后的效果了(有時候會程序會閃退箩言,至于原因可以去看文檔)
順便提一下文檔中官方提到了一個調試工具,具體使用見文檔焕襟,使用起來也很簡單陨收,我就不做介紹了
http://baichuan.taobao.com/docs/doc.htm?spm=a3c0d.7629140.0.0.x4PkBS&treeId=234&articleId=105842&docType=1
到這里整個生成補丁,調試都走完了鸵赖,熱更新肯定也是有問題的务漩,下面介紹一個我在調試時遇到的一個問題
- old.apk代碼:
public void onclick(View view) {
tv_show.setText("這是熱更新之前的");
// tv_show.setText("這是熱更新過后的");
}
我為textview添加了一個點擊事件,從而根據(jù)顯示的不同文字來區(qū)分是否熱更新成功
- new.apk代碼:
public void onclick(View view) {
// tv_show.setText("這是熱更新之前的");
tv_show.setText("這是熱更新過后的");
}
- 調試的結果就是報異常它褪,狀態(tài)異常饵骨,如圖:
- 然后我改成了這樣:
public void onclick(View view) {
showMsg();
}
private void showMsg() {
// tv_show.setText("這是熱更新之前的");
tv_show.setText("這是熱更新過后的");
}
然后就成功了,我也沒搞懂到底是為啥
再給一個使用阿里熱更新可能存在的問題的鏈接
尊重勞動成果列赎,轉發(fā)請標明原出處宏悦,謝謝镐确。