阿里百川HotFix熱更新集成加使用

集成步驟:

  1. 首先創(chuàng)建開發(fā)者賬號袄琳,并創(chuàng)建一個應用
  2. 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代碼

  1. 創(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();
    }
}
  1. 添加網(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"/>
  1. 在清單文件中添加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)完成了,下面進入調試使用階段

  1. 首先我們要創(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會在生成補丁時用到)
  1. 然后更改想要修改的代碼诵原,直接發(fā)布生成一個new.apk,同理將這個新的apk放到一個特定的位置(我的: C:\Users\Laer\Desktop\newApk\new.apk)
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

  1. 將舊版的apk安裝到手機(這只是針對測試,實際不用這樣辑畦,用戶手機里肯定是舊版的)

  2. 將生成的補丁上傳到阿里(步驟:創(chuàng)建補丁新版本號---->點擊查看詳情----->上傳補丁---->確定發(fā)布)吗蚌,如圖:
    注意這里所填的版本號,就是在生成old.apk時在Application中填的版本號

    創(chuàng)建補丁新版本

    查看詳情

    上傳補丁

    查看詳情

    確認發(fā)布

  3. 退出當前運行的old.apk纯出,從新進入蚯妇,這時程序將會自動檢測是否有補丁,如果有將自動加載補丁暂筝,正常來說你就可以實現(xiàn)熱更新后的效果了(有時候會程序會閃退箩言,至于原因可以去看文檔)

  4. 順便提一下文檔中官方提到了一個調試工具,具體使用見文檔焕襟,使用起來也很簡單陨收,我就不做介紹了
    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("這是熱更新過后的");
    }

然后就成功了,我也沒搞懂到底是為啥
再給一個使用阿里熱更新可能存在的問題的鏈接

https://baichuan.taobao.com/docs/doc.htm?spm=a3c0d.7629140.0.0.HbfN1I&treeId=234&articleId=105843&docType=1

尊重勞動成果列赎,轉發(fā)請標明原出處宏悦,謝謝镐确。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末包吝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子源葫,更是在濱河造成了極大的恐慌诗越,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件息堂,死亡現(xiàn)場離奇詭異嚷狞,居然都是意外死亡块促,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門床未,熙熙樓的掌柜王于貴愁眉苦臉地迎上來竭翠,“玉大人,你說我怎么就攤上這事薇搁≌牛” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵啃洋,是天一觀的道長传货。 經(jīng)常有香客問我,道長宏娄,這世上最難降的妖魔是什么问裕? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮孵坚,結果婚禮上粮宛,老公的妹妹穿的比我還像新娘。我一直安慰自己卖宠,他們只是感情好窟勃,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著逗堵,像睡著了一般秉氧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蜒秤,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天汁咏,我揣著相機與錄音,去河邊找鬼作媚。 笑死攘滩,一個胖子當著我的面吹牛,可吹牛的內容都是我干的纸泡。 我是一名探鬼主播漂问,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼女揭!你這毒婦竟也來了蚤假?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤吧兔,失蹤者是張志新(化名)和其女友劉穎磷仰,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體境蔼,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡灶平,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年伺通,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逢享。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡罐监,死狀恐怖,靈堂內的尸體忽然破棺而出瞒爬,到底是詐尸還是另有隱情笑诅,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布疮鲫,位于F島的核電站吆你,受9級特大地震影響,放射性物質發(fā)生泄漏俊犯。R本人自食惡果不足惜妇多,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望燕侠。 院中可真熱鬧者祖,春花似錦、人聲如沸绢彤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茫舶。三九已至械巡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間饶氏,已是汗流浹背讥耗。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留疹启,地道東北人古程。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像喊崖,于是被迫代替她去往敵國和親挣磨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內容