@@ -86,3 +86,20 @@ dependencies {
|
||
| 86 | 86 |
compile files('libs/jcc-bate-0.7.3.jar')
|
| 87 | 87 |
compile 'com.umeng.analytics:analytics:latest.integration' |
| 88 | 88 |
} |
| 89 |
+buildscript {
|
|
| 90 |
+ repositories {
|
|
| 91 |
+ jcenter() |
|
| 92 |
+ maven {
|
|
| 93 |
+ url uri('..\\repo')
|
|
| 94 |
+ } |
|
| 95 |
+ } |
|
| 96 |
+ dependencies {
|
|
| 97 |
+ //group:module:version |
|
| 98 |
+ classpath 'com.android.plugin.hotpatch:hotpatch:1.0.0' |
|
| 99 |
+ } |
|
| 100 |
+} |
|
| 101 |
+apply plugin: 'plugin.hotpatch' |
|
| 102 |
+ |
|
| 103 |
+hotpatch{
|
|
| 104 |
+ includePackageDir='ai\\pai\\lensman' |
|
| 105 |
+} |
@@ -94,4 +94,12 @@ public static final int *; |
||
| 94 | 94 |
-keep class com.tencent.mm.sdk.modelmsg.** implements com.tencent.mm.sdk.modelmsg.WXMediaMessage$IMediaObject {*;}
|
| 95 | 95 |
-keep class com.tencent.mm.sdk.** {
|
| 96 | 96 |
*; |
| 97 |
-} |
|
| 97 |
+} |
|
| 98 |
+-keepclassmembers class *{
|
|
| 99 |
+ public static com.android.hotpatch.framework.ChangeQuickRedirect changeQuickRedirect; |
|
| 100 |
+} |
|
| 101 |
+-keepclassmembers class * {
|
|
| 102 |
+ public java.lang.Object accessSuper(java.lang.Object,int,java.lang.Object[]); |
|
| 103 |
+} |
|
| 104 |
+-keep class com.android.hotpatch.**{*;}
|
|
| 105 |
+-keep class ai.pai.lensman.patch.**{*;}
|
@@ -11,7 +11,11 @@ import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; |
||
| 11 | 11 |
import com.nostra13.universalimageloader.core.assist.QueueProcessingType; |
| 12 | 12 |
import com.nostra13.universalimageloader.utils.StorageUtils; |
| 13 | 13 |
|
| 14 |
+import java.io.File; |
|
| 15 |
+ |
|
| 14 | 16 |
import ai.pai.lensman.utils.Constants; |
| 17 |
+import ai.pai.lensman.utils.PatchManager; |
|
| 18 |
+import ai.pai.lensman.utils.UrlContainer; |
|
| 15 | 19 |
|
| 16 | 20 |
public class App extends Application {
|
| 17 | 21 |
|
@@ -26,6 +30,8 @@ public class App extends Application {
|
||
| 26 | 30 |
super.onCreate(); |
| 27 | 31 |
initImageLoader(); |
| 28 | 32 |
mInstance = this.getApplicationContext(); |
| 33 |
+ new PatchManager().patch(this, UrlContainer.PATCH_CONFIG_URL,Constants.APP_PATCH_DIR+ File.separator+"patch-"+BuildConfig.VERSION_NAME+".dex","ai.pai.lensman.patch.PatchesInfoImpl"); |
|
| 34 |
+ |
|
| 29 | 35 |
} |
| 30 | 36 |
|
| 31 | 37 |
|
@@ -79,6 +79,15 @@ public class Preferences {
|
||
| 79 | 79 |
mPrefs.edit().putString("currentSession",currentSession).commit();
|
| 80 | 80 |
} |
| 81 | 81 |
|
| 82 |
+ |
|
| 83 |
+ public void setPatchUrl(String patchUrl){
|
|
| 84 |
+ mPrefs.edit().putString("patchUrl",patchUrl).commit();
|
|
| 85 |
+ } |
|
| 86 |
+ |
|
| 87 |
+ public String getPatchUrl(){
|
|
| 88 |
+ return mPrefs.getString("patchUrl",NullStr);
|
|
| 89 |
+ } |
|
| 90 |
+ |
|
| 82 | 91 |
public void clearPrefs(){
|
| 83 | 92 |
mPrefs.edit().clear().commit(); |
| 84 | 93 |
} |
@@ -12,5 +12,6 @@ public class Constants {
|
||
| 12 | 12 |
public static final String ORIGIN_DIR_NAME = "origin"; |
| 13 | 13 |
public static final String THUMBNAIL_DIR_NAME = "thumbnail"; |
| 14 | 14 |
public static final String TMP_DIR_NAME = "tmp"; |
| 15 |
+ public static final String APP_PATCH_DIR = APP_ROOT_DIR+"/patch"; |
|
| 15 | 16 |
|
| 16 | 17 |
} |
@@ -0,0 +1,62 @@ |
||
| 1 |
+package ai.pai.lensman.utils; |
|
| 2 |
+ |
|
| 3 |
+ |
|
| 4 |
+import com.android.common.http.HttpUtils; |
|
| 5 |
+import com.android.hotpatch.utils.IPatchManager; |
|
| 6 |
+ |
|
| 7 |
+import org.json.JSONObject; |
|
| 8 |
+ |
|
| 9 |
+import java.io.File; |
|
| 10 |
+import java.util.HashMap; |
|
| 11 |
+ |
|
| 12 |
+import ai.pai.lensman.BuildConfig; |
|
| 13 |
+import ai.pai.lensman.db.Preferences; |
|
| 14 |
+ |
|
| 15 |
+public class PatchManager extends IPatchManager{
|
|
| 16 |
+ |
|
| 17 |
+ private String patchUrl; |
|
| 18 |
+ |
|
| 19 |
+ public PatchManager(){
|
|
| 20 |
+ new File(Constants.APP_PATCH_DIR).mkdirs(); |
|
| 21 |
+ } |
|
| 22 |
+ |
|
| 23 |
+ @Override |
|
| 24 |
+ protected String getPatchFileDownloadUrl(String patchConfigUrl) {
|
|
| 25 |
+ if(patchConfigUrl.contains("?")){
|
|
| 26 |
+ patchConfigUrl+="&platform=android"; |
|
| 27 |
+ }else{
|
|
| 28 |
+ patchConfigUrl+="?platform=android"; |
|
| 29 |
+ } |
|
| 30 |
+ patchConfigUrl+="&version="+ BuildConfig.VERSION_NAME; |
|
| 31 |
+ patchConfigUrl+="&channel="+"guanwang"; |
|
| 32 |
+ HashMap<String,String> httpParams = new HashMap<>(); |
|
| 33 |
+ httpParams.put("src","1");
|
|
| 34 |
+ String jsonStr = HttpUtils.doHttpPost(patchConfigUrl,httpParams); |
|
| 35 |
+ try{
|
|
| 36 |
+ JSONObject response = new JSONObject(jsonStr); |
|
| 37 |
+ JSONObject data = response.getJSONObject("data");
|
|
| 38 |
+ patchUrl = data.getString("patch_url");
|
|
| 39 |
+ return patchUrl; |
|
| 40 |
+ }catch (Exception e){
|
|
| 41 |
+ e.printStackTrace(); |
|
| 42 |
+ } |
|
| 43 |
+ return null; |
|
| 44 |
+ } |
|
| 45 |
+ |
|
| 46 |
+ @Override |
|
| 47 |
+ protected boolean isNewPatchFound() {
|
|
| 48 |
+ if(!Preferences.getInstance().getPatchUrl().equals(patchUrl)){
|
|
| 49 |
+ new File(patchSavePath).delete(); |
|
| 50 |
+ return true; |
|
| 51 |
+ } |
|
| 52 |
+ if(!new File(patchSavePath).exists()){
|
|
| 53 |
+ return true; |
|
| 54 |
+ } |
|
| 55 |
+ return false; |
|
| 56 |
+ } |
|
| 57 |
+ |
|
| 58 |
+ @Override |
|
| 59 |
+ protected void afterPatchSuccess() {
|
|
| 60 |
+ Preferences.getInstance().setPatchUrl(patchUrl); |
|
| 61 |
+ } |
|
| 62 |
+} |
@@ -67,5 +67,5 @@ public class UrlContainer {
|
||
| 67 | 67 |
|
| 68 | 68 |
public static final String PLATFORM_PRICE_RULES_PAGE_URL = "http://pai.ai/page/price"; |
| 69 | 69 |
|
| 70 |
- |
|
| 70 |
+ public static final String PATCH_CONFIG_URL = HOST_URL+"op/patch"; |
|
| 71 | 71 |
} |
@@ -0,0 +1 @@ |
||
| 1 |
+04cbb405b312665f00431c8336b47edc |
@@ -0,0 +1 @@ |
||
| 1 |
+b621d002b8c17885daff42fd81164384aba7a7fc |
@@ -0,0 +1,22 @@ |
||
| 1 |
+<?xml version="1.0" encoding="UTF-8"?> |
|
| 2 |
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" |
|
| 3 |
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> |
|
| 4 |
+ <modelVersion>4.0.0</modelVersion> |
|
| 5 |
+ <groupId>com.android.plugin.hotpatch</groupId> |
|
| 6 |
+ <artifactId>hotpatch</artifactId> |
|
| 7 |
+ <version>1.0.0</version> |
|
| 8 |
+ <dependencies> |
|
| 9 |
+ <dependency> |
|
| 10 |
+ <groupId>com.android.tools.build</groupId> |
|
| 11 |
+ <artifactId>gradle</artifactId> |
|
| 12 |
+ <version>2.2.3</version> |
|
| 13 |
+ <scope>compile</scope> |
|
| 14 |
+ </dependency> |
|
| 15 |
+ <dependency> |
|
| 16 |
+ <groupId>org.javassist</groupId> |
|
| 17 |
+ <artifactId>javassist</artifactId> |
|
| 18 |
+ <version>3.22.0-CR1</version> |
|
| 19 |
+ <scope>compile</scope> |
|
| 20 |
+ </dependency> |
|
| 21 |
+ </dependencies> |
|
| 22 |
+</project> |
@@ -0,0 +1 @@ |
||
| 1 |
+640d4ea0944d59a7d903ec7f0bfeee75 |
@@ -0,0 +1 @@ |
||
| 1 |
+cfddca111bee94e07609aa18512e0fcf2a3f856c |
@@ -0,0 +1,12 @@ |
||
| 1 |
+<?xml version="1.0" encoding="UTF-8"?> |
|
| 2 |
+<metadata> |
|
| 3 |
+ <groupId>com.android.plugin.hotpatch</groupId> |
|
| 4 |
+ <artifactId>hotpatch</artifactId> |
|
| 5 |
+ <versioning> |
|
| 6 |
+ <release>1.0.0</release> |
|
| 7 |
+ <versions> |
|
| 8 |
+ <version>1.0.0</version> |
|
| 9 |
+ </versions> |
|
| 10 |
+ <lastUpdated>20170303105421</lastUpdated> |
|
| 11 |
+ </versioning> |
|
| 12 |
+</metadata> |
@@ -0,0 +1 @@ |
||
| 1 |
+89037efcccecda6a668c32743755b699 |
@@ -0,0 +1 @@ |
||
| 1 |
+93d08fd1b04f250f96c8acf7390f14028d49ec06 |