天天看點

熱更新檔Nuwa配置說明

一、Build.gradle的配置

在工程的根build.gradle檔案中添加
classpath 'cn.jiajixin.nuwa:gradle:1.2.2'
然後我們的build.gradle檔案可能長這樣:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.3'
        classpath 'cn.jiajixin.nuwa:gradle:1.2.2'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}



在uliaobao的build.gradle中添加依賴:
apply plugin: "cn.jiajixin.nuwa"

nuwa {
    //括号裡是Application類以及要排除Application父類
    excludeClass = ['comcom/demo//Bean/AllClassif/yBean.class'
                    ,'com/demo/Bean/ReceiverBean.class'
                    ,'com/umeng/socialize/PlatformConfig.class'
                    ,'com/umeng/socialize/bean/SHARE_MEDIA.class'
                    ,'com/umeng/socialize/PlatformConfig$QQZone.class'
                    ,'com/umeng/socialize/PlatformConfig$Weixin.class'
                    ,'com/umeng/socialize/PlatformConfig$Douban.class'
                    ,'com/umeng/socialize/PlatformConfig$Laiwang.class'
                    ,'com/umeng/socialize/PlatformConfig$Yixin.class'
                    ,'com/umeng/socialize/PlatformConfig$SinaWeibo.class'
                    ,'com/umeng/socialize/PlatformConfig$Alipay.class'
                    ,'com/umeng/socialize/PlatformConfig$Renren.class'

                    ,'com/umeng/socialize/PlatformConfig$Googleplus.class'
                    ,'com/umeng/socialize/PlatformConfig$Facebook.class'
                    ,'com/umeng/socialize/PlatformConfig$Twitter.class'
                    ,'com/umeng/socialize/PlatformConfig$Tumblr.class'
                    ,'com/umeng/socialize/PlatformConfig$Plnterest.class'
                    ,'com/umeng/socialize/PlatformConfig$Pocket.class'
                    ,'com/umeng/socialize/PlatformConfig$Whatsapp.class'
                    ,'com/umeng/socialize/PlatformConfig$Email.class'

                    ,'com/umeng/socialize/PlatformConfig$Sms.class'
                    ,'com/umeng/socialize/PlatformConfig$Linkedin.class'
                    ,'com/umeng/socialize/PlatformConfig$Line.class'
                    ,'com/umeng/socialize/PlatformConfig$Flickr.class'
                    ,'com/umeng/socialize/PlatformConfig$Evernote.class'
                    ,'com/umeng/socialize/PlatformConfig$Foursquare.class'
                    ,'com/umeng/socialize/PlatformConfig$Ynote.class'
                    ,'com/umeng/socialize/PlatformConfig$Kakao.class'
                    ,'com/umeng/socialize/PlatformConfig$Instagram.class'
                    ,'com/umeng/socialize/PlatformConfig$GooglePlus.class'
                    ,'com/umeng/socialize/PlatformConfig$CustomPlatform.class'
                    ,'com/umeng/socialize/PlatformConfig$Pinterest.class'
    ]

}

然後我們的build.gradle檔案可能長這樣:
dependencies {
    compile fileTree(include: '*.jar', dir: 'libs')
    compile project(':pulltorefresh')
    compile 'com.android.support:recyclerview-v7:21.0.0'
    compile files('libs/okhttp-2.7.0.jar')
    compile files('libs/jpush-android-2.1.5.jar')
    compile files('libs/gson-1.6.jar')
    compile files('libs/aseo2.jar')
    compile files('libs/robotium-solo-5.2.1.jar')
    compile 'cn.jiajixin.nuwa:nuwa:1.0.0'
}           

【備注】 這邊有個坑,2.0版本的Android Studio為了支援Instant Run, 預設使用的Gradle Plugin是2.0.0-alpha2, 如果用此版本,會報錯Error:Cannot get property ‘taskDependencies’ on null object,乖乖降低到1.2.3,木有此問題。

二、使用Nuwa

1.自定義Application,并且在Application類中添加如下代碼:
@Override
public void onCreate() {
   super.onCreate();
    Nuwa.init(this);
    Nuwa.loadPatch(this, Environment.getExternalStorageDirectory().getAbsolutePath().concat("/patch.jar"));

}

2.運作并安裝apk,會在 項目名稱/build/outputs目錄下自動生成一個叫nuwa的目錄:
           
熱更新檔Nuwa配置說明
拷貝此目錄到一個指定的目錄,比如:
D:/nuwa
此apk目前是有bug的apk, 然後我們修複bug, 修複完畢後進入步驟3
3.在修複完bug的c ode base下執行如下指令:
gradlew clean nuwa(打包的管道名)DebugPatch -P NuwaDir=D:/nuwa(拷貝後的nuwa的路徑)

gradlew clean nuwa BaiduSEM DebugPatch -P NuwaDir=D:/nuwa           
熱更新檔Nuwa配置說明

注意:如果執行指令後出現下面的錯誤:

熱更新檔Nuwa配置說明

解決方式:配置AS的sdk的路徑,如下圖:

熱更新檔Nuwa配置說明

配置完後,再執行步驟3,即可。

然後在app/build/outputs/nuwa/debug/目錄下會自動生成patch.jar檔案:

熱更新檔Nuwa配置說明

此檔案就是我們熱部署的更新檔檔案

4.我們把更新檔檔案拷貝到sdcard根目錄(這邊隻是為了測試整個hotfix流程, 自己的項目肯定是放在伺服器上,我們通過代碼自己去下載下傳和存儲)

5.代碼混淆

———– Begin: 熱更新檔———-

-keep class cn.jiajixin.nuwa.* { ; }

———-End:熱更新檔———

繼續閱讀