Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> 安卓熱更新之Nuwa實現步驟,安卓nuwa實現步驟

安卓熱更新之Nuwa實現步驟,安卓nuwa實現步驟

編輯:關於android開發

安卓熱更新之Nuwa實現步驟,安卓nuwa實現步驟


                   安卓熱更新之Nuwa實現步驟

  最近熱更新熱修復的功能在安卓應用上越發火熱,終於我的產品也提出了相應的需求。

  經過兩天的研究,搞定了這個功能,在這裡還要多謝大神們的博客,大神們的原理分析很到位,不過對於我來說最大的障礙還是在git的使用、打jar包出現的一些錯誤上,所以在這裡寫出具體些的實現步驟,希望可以幫到那些和我水平差不多的小蝦。

  熱更新的框架有很多,比如AndFix、HotFix、Dexposed以及Nuwa,在考慮兼容性和功能需求之後我還是選擇了Nuwa,因為這個框架可以新增類和字段,並且兼容到Android6.0系統。

  現在市面上的熱更新框架基本原理都是classloader,也就是類加載器,這也就限制了我們不可以修改資源文件,如圖片布局等,有這方面需求的小伙伴還要想其他辦法,比如動態布局。

  我們先來說下准備工作,首先你的開發工具必須是Android Studio,因為在打jar包時需要使用.gradle文件。其次電腦上要有一個本地的git庫,以方便管理新舊版本,使用git命令較為方便,要下載nuwa庫,並且user library到你的項目中,不會這個步驟的同學請自行百度,在這裡推薦一個github上的項目,裡面有集成好的nuwa庫。

https://github.com/jasonross/Nuwa

  假設我們已經創建好一個項目,並且成功集成nuwa,現在我們需要一個git,如果沒有安裝git的同學請按照下面這篇教程安裝,這篇教程通俗易懂。

http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

  git安裝成功後,要新建一個本地版本庫,選擇一個合適的文件路徑,輸入以下git命令:

mkdir hotfix 是創建名為hotfix的本地版本庫,cd hotfix是定位到版本庫,pwd是輸出版本庫位置,如果你是在windows系統上使用,為了避免不可測問題,請保證路徑中沒有特殊符號及中文。

  創建好庫後要使用命令將其變成git可管理的版本庫:

創建成功後,會發現文件夾中出現一個.git文件,如果你的看不到,那可能是因為這個文件是隱藏的,使用ls -ah命令試試看。

  版本庫創建成功了,現在我們要做的就是將剛剛創建的項目導入到版本庫中,拷貝你的項目到hotfix文件夾中,並且使用以下命令:

git add 後面跟著的是你的項目名稱,在add過程中會出現一系列waning警告,不要理,只要不出error就好。add成功後,再提交一次代碼,如果沒有問題就你的項目就導入成功了:

提交過程中又會出現一系列warning,不用理。這裡需要注意的是-m後面是你每次提交的注釋,不可為空,為了方便以後維護,希望大家可以寫清本次提交原因。

  成功將項目導入,下面我們就要開始寫代碼了,如果你的項目是從剛剛推薦的github上拉下來的,那你項目中應該有完整代碼,不是的童鞋請跟我一步步完成代碼。

  熱更新的原理大概就是從服務器拉取一個補丁文件,然後用類加載器加載這個補丁中的類,如果我們想要實現在項目開始時就加載出這個補丁文件,那麼加載補丁的操作就要放在Application類中實現,代碼如下:

import android.app.Application;
import android.content.Context;
import android.os.Environment;

import cn.jiajixin.nuwa.Nuwa;

public class NuwaApplication extends Application {

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        Nuwa.init(this);
        Nuwa.loadPatch(this, Environment.getExternalStorageDirectory().getAbsolutePath().concat("/patch.jar"));
    }
}

  很簡單,nuwa框架已經封裝好了很多操作,我們只需要調用就好,loadpatch方法中的參數是補丁文件的位置,應該從服務器動態獲取文件,並存儲到sdcard指定項目專用目錄,在這裡我們是測試demo,就簡單的固定好jar文件位置,sdcard根目錄。在這裡提醒一下粗心的同學,不要忘記在Manifest文件中配置Appliction。

  其他只需要在MainActivity中顯示要輸出的文字,這裡我們將文字單放在一個類中,以便改變:

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

import cn.jiajixin.nuwasample.Hello.Hello;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView textView = (TextView) findViewById(R.id.textview);
        textView.setText(new Hello().say());
    }

}
public class Hello {
    public String say() {
        return "hello world";
    }
}

  好了,代碼已經寫完了,是不是很簡單?現在要注意,下面是一些核心步驟,這是在其他文案上找不到的。

  我們要在剛剛建立的本地版本庫上建立一個bugfix分支,hotfix文件夾中打開git,並輸入以下命令:

git branch bugfix 是新建一個名為bugfix的分支,git checkout bugfix是轉到這個分支下,好了,現在對比以下兩個分支的代碼,應該是一模一樣的,現在使用命令:git checkout master切換回主分支。

  使用android studio運行項目到手機上,成功運行之後,會在項目的目錄下創建一個nuwa文件夾,如果你是自己創建的項目,那麼路徑應該是app/build/outputs/nuwa,如果你是導入github上的項目,路徑應該是sample/build/outputs/nuwa,將nuwa文件夾拷貝到一個位置,比如桌面,我的是C:\Users\thinkpad\Desktop\nuwa,這個地方大家要注意,每個人拷貝的位置不同,一會使用時路徑一定要匹配。

  現在使用git checkout bugfix命令切換到bugfix分支上,修改Hello類下面的輸出字符串,如下:

public class Hello {
    public String say() {
        return "hello world I'm hotfix";
    }
}

改好之後我們就要通過git命令調用.gradle來打一個jar包,千萬注意,不要運行bugfix分支上的項目。

  如果你是自己新建的app,要在項目中新建一個名為extras的文件夾:

在文件夾中有兩個配置文件,一個是名為hack的空java類,另一個文件裡面寫好了一段使用dx封裝jar包的命令:

  配置好這兩個文件後,再在hotfix中開啟git,在git中輸入./gradlew clean nuwaQihooDebugPatch -P NuwaDir=C:/Users/thinkpad/Desktop/nuwa,這裡有兩點需要注意,NuwaDir=後面跟著的路徑就是剛剛master分支運行項目時,生成的nuwa文件夾,具體路徑要看大家拷貝的地址。還有就是因為這個命令是調用.gradle文件,我們的版本庫是兩層文件夾,需要cd進入到Nuwa項目文件夾中運行該命令:

運行成功後你會在你想項目目錄下看到一個名為patch.jar的文件,如果你是新建的項目,具體路徑應該為app\build\outputs\nuwa\qihoo\debug\patch.jar,如果你是從github上拉下來的項目,路徑應為sample\build\outputs\nuwa\qihoo\debug\patch.jar。

  將上面生成的jar文件導入到手機sdcard文件根目錄,你可以選擇通過電腦拷貝或者使用安卓命令:

adb push E:hotfix\Nuwa\app\build\outputs\nuwa\qihoo\debug\patch.jar /sdcard/

  大家寫了這麼久,終於到了收獲的時候,現在先退出剛剛在手機上安裝的master分支上的項目,徹底退出,殺死進程。然後再重新進入,有沒有驚喜的發現之前的"hello world"變成了我們修改的"hello world I'm hotfix"?這就實現了補丁方式的熱更新,而且使用nuwa框架是可以新建類的哦,雖然不能更改資源文件,但是配合動態布局使用還是能實現大部分需求的。

  好了,相信現在大家對nuwa的熱更新流程已經了解的差不多,寫這篇博客很用心,因為自己的研究熱更新的時候遇到了很多頭大的問題,所以想要分享給那些和我一樣正在研究或未來要研究這個功能的人,如果大家有要補充的或者哪個步驟遇到問題,歡迎留言,我會及時回復。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved