一、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的目錄:
拷貝此目錄到一個指定的目錄,比如:
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
注意:如果執行指令後出現下面的錯誤:
解決方式:配置AS的sdk的路徑,如下圖:
配置完後,再執行步驟3,即可。
然後在app/build/outputs/nuwa/debug/目錄下會自動生成patch.jar檔案:
此檔案就是我們熱部署的更新檔檔案
4.我們把更新檔檔案拷貝到sdcard根目錄(這邊隻是為了測試整個hotfix流程, 自己的項目肯定是放在伺服器上,我們通過代碼自己去下載下傳和存儲)
5.代碼混淆
———– Begin: 熱更新檔———-
-keep class cn.jiajixin.nuwa.* { ; }