Browse Source

提交分类: 打包版本;
提交内容: 1、将启动页的网络图片下载放到后台服务中执行
2、优化启动页网络图片下载逻辑,用户手动删除已下载的文件时,下次打开应用会再次下载
3、按照UI调整修改B2B商务首页UI
当前版本: 正式版本6.3.0
是否冲突: 否

raomeng 7 years ago
parent
commit
161f3d9606
40 changed files with 3981 additions and 239 deletions
  1. 1 1
      WeiChat/build.gradle
  2. 173 10
      WeiChat/proguard-rules.pro
  3. 36 44
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/SplashActivity.java
  4. 48 3
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/WebViewCommActivity.java
  5. 1 1
      WeiChat/src/main/res/layout/activity_splash.xml
  6. 3 3
      WeiChat/version.properties
  7. 385 14
      app_core/common/proguard-rules.pro
  8. 2 0
      app_core/common/src/main/java/com/core/app/AppConfig.java
  9. 18 0
      app_core/common/src/main/java/com/core/base/NotProguard.java
  10. 25 3
      app_core/common/src/main/java/com/core/net/ProgressDownloader.java
  11. 1 1
      app_core/common/src/main/java/com/core/utils/CommonUtil.java
  12. 385 14
      app_core/imageload/proguard-rules.pro
  13. 386 15
      app_core/message/proguard-rules.pro
  14. 385 14
      app_core/network/proguard-rules.pro
  15. 172 10
      app_modular/appbooking/proguard-rules.pro
  16. 172 10
      app_modular/appcontact/proguard-rules.pro
  17. 2 2
      app_modular/appcontact/src/main/java/com/uas/appcontact/ui/activity/CompanyContactsActivity.java
  18. 172 10
      app_modular/applogin/proguard-rules.pro
  19. 172 10
      app_modular/appme/proguard-rules.pro
  20. 172 10
      app_modular/appmessages/proguard-rules.pro
  21. 172 10
      app_modular/appmoments/proguard-rules.pro
  22. 385 14
      app_modular/appmusic/proguard-rules.pro
  23. 172 10
      app_modular/apptasks/proguard-rules.pro
  24. 172 10
      app_modular/apputils/proguard-rules.pro
  25. 8 5
      app_modular/apputils/src/main/AndroidManifest.xml
  26. 124 0
      app_modular/apputils/src/main/java/com/modular/apputils/service/CommonIntentService.java
  27. 172 10
      app_modular/appworks/proguard-rules.pro
  28. 0 2
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/WorkReportAddActivity.java
  29. 53 0
      app_modular/appworks/src/main/java/com/uas/appworks/activity/B2BBusinessMainActivity.java
  30. BIN
      app_modular/appworks/src/main/res/drawable-hdpi/ic_b2b_header_customer.png
  31. BIN
      app_modular/appworks/src/main/res/drawable-hdpi/ic_b2b_header_public.png
  32. BIN
      app_modular/appworks/src/main/res/drawable-hdpi/ic_b2b_header_purchase.png
  33. BIN
      app_modular/appworks/src/main/res/drawable-xhdpi/ic_b2b_header_customer.png
  34. BIN
      app_modular/appworks/src/main/res/drawable-xhdpi/ic_b2b_header_public.png
  35. BIN
      app_modular/appworks/src/main/res/drawable-xhdpi/ic_b2b_header_purchase.png
  36. BIN
      app_modular/appworks/src/main/res/drawable-xxhdpi/ic_b2b_header_customer.png
  37. BIN
      app_modular/appworks/src/main/res/drawable-xxhdpi/ic_b2b_header_public.png
  38. BIN
      app_modular/appworks/src/main/res/drawable-xxhdpi/ic_b2b_header_purchase.png
  39. 10 1
      app_modular/appworks/src/main/res/layout/activity_b2b_business_main.xml
  40. 2 2
      version.gradle

+ 1 - 1
WeiChat/build.gradle

@@ -167,7 +167,7 @@ dependencies {
     androidTestCompile deps.leakcanaryNp
     debugCompile deps.leakcanary
     releaseCompile deps.leakcanaryNp
-  
+
     compile project(':common')
     compile project(':appmessages')
     compile project(':network')

+ 173 - 10
WeiChat/proguard-rules.pro

@@ -24,7 +24,10 @@
 # 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
 -dontpreverify
 # 保留Annotation不混淆
--keepattributes *Annotation*,InnerClasses
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
 # 避免混淆泛型
 -keepattributes Signature
 # 抛出异常时保留代码行号
@@ -39,6 +42,7 @@
 -keep public class * extends android.app.Activity
 -keep public class * extends android.app.Application
 -keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
 -keep public class * extends android.content.BroadcastReceiver
 -keep public class * extends android.content.ContentProvider
 -keep public class * extends android.app.backup.BackupAgentHelper
@@ -130,7 +134,7 @@
 #
 ###############################
 -keep class com.baidu.** {*;}
--keep class vi.com.** {*;}
+-keep class mapsdkvi.com.** {*;}
 -dontwarn com.baidu.**
 
 -keep class com.uuzuche.lib_zxing.** {*;}
@@ -153,28 +157,118 @@
 -keep class com.facebook.stetho.** {*;}
 -keep class javax.annotation.** {*;}
 -keep class com.lidroid.xutils.** {*;}
--keep class okhttp3.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
 -keep class okio.** {*;}
 -dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
 -keep class org.apache.** {*;}
 -keep class org.junit.** {*;}
 -keep class junit.** {*;}
 -keep class org.hamcrest.** {*;}
 
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
+
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
+
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
 -keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
 -keep class com.google.gson.** {*;}
 -keep class com.google.gson.stream.** {*;}
 -keep class com.android.volley.** {*;}
 
--keep class butterknife.** {*;}
+#butterknife
+-keep class butterknife.** { *; }
 -dontwarn butterknife.internal.**
 -keep class **$$ViewBinder { *; }
-
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
 -keep class cat.ereza.customactivityoncrash.** {*;}
 -keep class uk.co.senab.photoview.** {*;}
 -keep class com.flipboard.bottomsheet.** {*;}
 -keep class flipboard.bottomsheet.** {*;}
+
+#glide
 -keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
 -keep class com.chad.library.** {*;}
 -keep class com.tonicartos.widget.stickygridheaders.** {*;}
 -keep class com.orhanobut.logger.** {*;}
@@ -182,22 +276,67 @@
 -keep class com.scwang.smartrefresh.** {*;}
 -keep class com.squareup.** {*;}
 -keep class com.tencent.** {*;}
--keep class com.umeng.analytics.** {*;}
 -keep class com.youth.banner.** {*;}
 -keep class de.hdodenhof.circleimageview.** {*;}
--keep class rx.** {*;}
+
 -keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
 -keep class me.gujun.android.taggroup.** {*;}
 -keep class me.zhanghai.android.materialprogressbar.** {*;}
 -keep class android.net.** {*;}
 -keep class com.android.internal.http.multipart.** {*;}
--keep class pl.droidsonroids.gif.** {*;}
 -keep class se.emilsjolander.stickylistheaders.** {*;}
 -keep class com.alipay.** {*;}
 -dontwarn com.alipay.**
--keep class com.tencent.mm.sdk.** {
-   *;
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
 }
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
+#}
+
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
 
 ###############################
 #
@@ -205,6 +344,8 @@
 # 引用的其他Module可以直接在app的这个混淆文件里配置
 #
 ###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
 #实体类
 -keep class com.modular.booking.model.** {*;}
 -keep class com.uas.appcontact.model.** {*;}
@@ -216,6 +357,11 @@
 -keep class com.uas.appworks.model.** {*;}
 -keep class com.xzjmyk.pm.activity.bean.** {*;}
 -keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
+-keep class com.core.api.wxapi.** {*;}
 #自定义控件
 -keep class com.core.widget.** {*;}
 -keep class com.modular.booking.widget.** {*;}
@@ -231,4 +377,21 @@
 -keep class com.modular.apputils.utils.** {*;}
 #与js互相调用的类
 -keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 

+ 36 - 44
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/SplashActivity.java

@@ -32,8 +32,6 @@ import com.core.dao.UserDao;
 import com.core.model.ConfigBean;
 import com.core.model.LoginRegisterResult;
 import com.core.model.User;
-import com.core.net.ProgressDownloader;
-import com.core.net.ProgressResponseBody;
 import com.core.net.volley.ObjectResult;
 import com.core.net.volley.Result;
 import com.core.net.volley.StringJsonObjectRequest;
@@ -46,6 +44,7 @@ import com.me.network.app.base.HttpCallback;
 import com.me.network.app.base.HttpParams;
 import com.me.network.app.http.HttpRequest;
 import com.me.network.app.http.Method;
+import com.modular.apputils.service.CommonIntentService;
 import com.modular.login.activity.LoginActivity;
 import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.ui.erp.activity.ADActivity;
@@ -66,7 +65,7 @@ import pl.droidsonroids.gif.GifImageView;
  * @author Dean Tao
  * @version 1.0
  */
-public class SplashActivity extends BaseActivity implements ProgressResponseBody.ProgressListener {
+public class SplashActivity extends BaseActivity {
     private RelativeLayout mSelectLv;
     private GifImageView mGifImageView;
     private final String IS_FIRST = "IS_FIRST";
@@ -75,7 +74,6 @@ public class SplashActivity extends BaseActivity implements ProgressResponseBody
     private boolean mConfigReady = false;// 配置获取成功
     private GifDrawable mGifDrawable;
     private boolean mAnimationCompleted = false;
-    private ProgressDownloader mDownloader;
     private String mSplshUrl;
     private long mStartTime;
 
@@ -92,7 +90,7 @@ public class SplashActivity extends BaseActivity implements ProgressResponseBody
             public void run() {
                 jump();
             }
-        }, 2500);
+        }, 2000);
         mGifImageView = findViewById(R.id.splash_gif_view);
         showSplash();
         mSelectLv = (RelativeLayout) findViewById(R.id.select_lv);
@@ -168,19 +166,20 @@ public class SplashActivity extends BaseActivity implements ProgressResponseBody
                                     if (!TextUtils.isEmpty(resUrl)) {
                                         String oldUrl = CommonUtil.getSharedPreferences(mContext, Constants.CACHE.CACHE_SPLASH_URL);
                                         if (resUrl.equals(oldUrl)) {
-                                            return;
+                                            List<String> pictures = FileUtils.getPictures(Constants.SPLASH_FILE_PATH);
+                                            if (pictures != null && pictures.size() > 0) {
+                                                return;
+                                            } else {
+                                                downloadSplash(resUrl);
+                                            }
                                         } else {
-                                            initSplashDir();
-                                            mSplshUrl = resUrl;
                                             downloadSplash(resUrl);
                                         }
                                     } else {
-                                        initSplashDir();
-                                        CommonUtil.setSharedPreferences(mContext, Constants.CACHE.CACHE_SPLASH_URL, "");
+                                        clearSplashDir();
                                     }
                                 } else {
-                                    initSplashDir();
-                                    CommonUtil.setSharedPreferences(mContext, Constants.CACHE.CACHE_SPLASH_URL, "");
+                                    clearSplashDir();
                                 }
                             }
                         } catch (Exception e) {
@@ -193,6 +192,17 @@ public class SplashActivity extends BaseActivity implements ProgressResponseBody
                 });
     }
 
+    private void downloadSplash(String resUrl) {
+        initSplashDir();
+        mSplshUrl = resUrl;
+        CommonIntentService.downloadSplash(MyApplication.getInstance(), resUrl);
+    }
+
+    private void clearSplashDir() {
+        initSplashDir();
+        CommonUtil.setSharedPreferences(mContext, Constants.CACHE.CACHE_SPLASH_URL, "");
+    }
+
     private void initSplashDir() {
         File directory = new File(Constants.SPLASH_FILE_PATH);
         if (!directory.exists() && !directory.isDirectory()) {
@@ -202,21 +212,6 @@ public class SplashActivity extends BaseActivity implements ProgressResponseBody
         }
     }
 
-    private void downloadSplash(String resUrl) {
-        int dotIndex = resUrl.lastIndexOf(".");
-        if (dotIndex >= 0) {
-            String resExtension = resUrl.substring(dotIndex);
-            File splashFile = new File(Constants.SPLASH_FILE_PATH, Constants.SPLASH_FILE_NAME + resExtension);
-            try {
-                splashFile.createNewFile();
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-            mDownloader = new ProgressDownloader(resUrl, splashFile, SplashActivity.this);
-            mDownloader.download(0L);
-        }
-    }
-
     @Override
     protected void onResume() {
         super.onResume();
@@ -302,13 +297,13 @@ public class SplashActivity extends BaseActivity implements ProgressResponseBody
 
         long currentTime = System.currentTimeMillis();
         long duration = currentTime - mStartTime;
-        if (duration < 2500) {
+        if (duration < 2000) {
             new Handler().postDelayed(new Runnable() {
                 @Override
                 public void run() {
                     jump();
                 }
-            }, 2500 - duration);
+            }, 2000 - duration);
             return;
         }
 
@@ -409,7 +404,18 @@ public class SplashActivity extends BaseActivity implements ProgressResponseBody
                     }
                     Log.d("gifdrawableim", "animation->" + mAnimationCompleted);
                     if (mAnimationCompleted) {
-                        trun2NextPage(1);
+                        long currentTime = System.currentTimeMillis();
+                        long duration = currentTime - mStartTime;
+                        if (duration < 2000) {
+                            new Handler().postDelayed(new Runnable() {
+                                @Override
+                                public void run() {
+                                    trun2NextPage(1);
+                                }
+                            }, 2000 - duration);
+                        } else {
+                            trun2NextPage(1);
+                        }
                     }
                 } else {// 登录失败
                     jump();
@@ -465,18 +471,4 @@ public class SplashActivity extends BaseActivity implements ProgressResponseBody
             mGifDrawable = null;
         }
     }
-
-    @Override
-    public void onPreExecute(long contentLength) {
-
-    }
-
-    @Override
-    public void update(long totalBytes, boolean done) {
-        if (done) {
-            if (!TextUtils.isEmpty(mSplshUrl)) {
-                CommonUtil.setSharedPreferences(mContext, Constants.CACHE.CACHE_SPLASH_URL, mSplshUrl);
-            }
-        }
-    }
 }

+ 48 - 3
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/WebViewCommActivity.java

@@ -1,5 +1,6 @@
 package com.xzjmyk.pm.activity.ui.erp.activity;
 
+import android.Manifest;
 import android.annotation.SuppressLint;
 import android.annotation.TargetApi;
 import android.app.Activity;
@@ -28,6 +29,7 @@ import com.alibaba.fastjson.JSON;
 import com.common.LogUtil;
 import com.common.data.StringUtil;
 import com.common.preferences.PreferenceUtils;
+import com.common.system.PermissionUtil;
 import com.common.system.SystemUtil;
 import com.core.app.MyApplication;
 import com.core.base.BaseActivity;
@@ -47,6 +49,8 @@ import com.umeng.socialize.bean.SHARE_MEDIA;
 import com.umeng.socialize.media.UMImage;
 import com.umeng.socialize.shareboard.SnsPlatform;
 import com.umeng.socialize.utils.ShareBoardlistener;
+import com.uuzuche.lib_zxing.activity.CaptureActivity;
+import com.uuzuche.lib_zxing.activity.CodeUtils;
 import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.ui.MainActivity;
 import com.xzjmyk.pm.activity.util.oa.CommonUtil;
@@ -65,6 +69,9 @@ import java.util.Map;
  */
 public class WebViewCommActivity extends BaseActivity implements View.OnClickListener {
     public static final String TIME = "WebViewCommActivity_time";
+    private final static int FILECHOOSER_RESULTCODE = 1;
+    private final static int FLAG_SCAN_REQUEST = 31;
+
     private com.tencent.smtt.sdk.WebView webView;
     private ProgressBar pb;
     private ImageView back;
@@ -78,7 +85,6 @@ public class WebViewCommActivity extends BaseActivity implements View.OnClickLis
 
     private ValueCallback<Uri> mUploadMessage;
     private ValueCallback<Uri[]> uploadMessageAboveL;
-    private final static int FILECHOOSER_RESULTCODE = 1;
 
     private ArrayList<SubMessage> mSubscriptionMessages;
     private String mSubsAct;
@@ -88,6 +94,7 @@ public class WebViewCommActivity extends BaseActivity implements View.OnClickLis
     private TextView mPreTv;
     private TextView mNextTv;
     private List<Object> mReadSubs;
+    private long mScanIndex = -1;
 
     private Handler hander = new Handler() {
         @Override
@@ -199,6 +206,7 @@ public class WebViewCommActivity extends BaseActivity implements View.OnClickLis
             }
         }
         webView.getSettings().setJavaScriptEnabled(true);
+        webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
         webView.getSettings().setAllowFileAccess(true);// 设置允许访问文件数据
         //  webView.getRefreshableView().getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); //设置 缓存模式
         webView.getSettings().setDomStorageEnabled(true);
@@ -208,7 +216,8 @@ public class WebViewCommActivity extends BaseActivity implements View.OnClickLis
         webView.getSettings().setSaveFormData(true);
 
         // 修改ua使得web端正确判断
-        webView.addJavascriptInterface(new JSWebView(), "JSWebView"); //在JSWebView类里实现javascript想调用的方法,并将其实例化传入webview, "JSWebView"这个字串告诉javascript调用哪个实例的方法
+        webView.addJavascriptInterface(new JSWebView(), "JSWebView");
+        //在JSWebView类里实现javascript想调用的方法,并将其实例化传入webview, "JSWebView"这个字串告诉javascript调用哪个实例的方法
 
         setThirdPartyCookiesEnabled(true);
 
@@ -225,7 +234,7 @@ public class WebViewCommActivity extends BaseActivity implements View.OnClickLis
 //          url="http://192.168.253.132:9090/platform-b2c/?client=true";
         Log.d("webUrl", url);
         webView.loadUrl(url, headers);
-//        webView.getRefreshableView().loadUrl("file:///android_asset/submit.html");
+//        webView.loadUrl("file:///android_asset/jsWithNative.html");
         webView.setWebChromeClient(new ChromeClient());
         webView.setWebViewClient(new WebViewClient() {
             @Override
@@ -421,6 +430,23 @@ public class WebViewCommActivity extends BaseActivity implements View.OnClickLis
                 mUploadMessage.onReceiveValue(result);
                 mUploadMessage = null;
             }
+        } else if (requestCode == FLAG_SCAN_REQUEST && resultCode == Activity.RESULT_OK && data != null) {
+            Bundle extras = data.getExtras();
+            int resultType = extras.getInt(CodeUtils.RESULT_TYPE);
+            if (resultType == CodeUtils.RESULT_SUCCESS) {
+                String scanResult = extras.getString(CodeUtils.RESULT_STRING);
+                scanResult = mScanIndex + "," + scanResult;
+                if (Build.VERSION.SDK_INT < 18) {
+                    webView.loadUrl("javascript:scanCompleted('" + scanResult + "')");
+                } else {
+                    webView.evaluateJavascript("javascript:scanCompleted('" + scanResult + "')", new ValueCallback<String>() {
+                        @Override
+                        public void onReceiveValue(String s) {
+
+                        }
+                    });
+                }
+            }
         }
     }
 
@@ -623,6 +649,25 @@ public class WebViewCommActivity extends BaseActivity implements View.OnClickLis
         public void closeWebWindow() {
             finish();
         }
+
+        @JavascriptInterface
+        public void openScan(long index) {
+            runOnUiThread(new Runnable() {
+                @Override
+                public void run() {
+                    String[] permissions = new String[]{Manifest.permission.CAMERA};
+                    if (PermissionUtil.lacksPermissions(ct, permissions)) {
+                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+                            requestPermissions(permissions, PermissionUtil.DEFAULT_REQUEST);
+                        }
+                    } else {
+                        mScanIndex = index;
+                        Intent intent = new Intent(mContext, CaptureActivity.class);
+                        startActivityForResult(intent, FLAG_SCAN_REQUEST);
+                    }
+                }
+            });
+        }
     }
 
 }

+ 1 - 1
WeiChat/src/main/res/layout/activity_splash.xml

@@ -8,7 +8,7 @@
         android:id="@+id/splash_gif_view"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:scaleType="centerCrop" />
+        android:scaleType="fitXY" />
 
     <RelativeLayout
         android:id="@+id/select_lv"

+ 3 - 3
WeiChat/version.properties

@@ -1,5 +1,5 @@
-#Fri May 25 11:49:26 CST 2018
+#Tue Jun 05 16:09:13 CST 2018
 debugName=429
-versionName=630
+versionName=660
 debugCode=429
-versionCode=170
+versionCode=200

+ 385 - 14
app_core/common/proguard-rules.pro

@@ -3,23 +3,394 @@
 # in C:\Android\sdk/tools/proguard/proguard-android.txt
 # You can edit the include path and order by changing the proguardFiles
 # directive in build.gradle.
+
+###############################
+#
+# 公共部分(固定不变)
 #
-# For more details, see
-#   http://developer.android.com/guide/developing/tools/proguard.html
+###############################
+#1.基本指令区
+# 代码混淆压缩比,在0~7之间,默认为5,一般不做修改
+-optimizationpasses 5
+# 混合时不使用大小写混合,混合后的类名为小写
+-dontusemixedcaseclassnames
+# 指定不去忽略非公共库的类
+-dontskipnonpubliclibraryclasses
+# 这句话能够使我们的项目混淆后产生映射文件
+# 包含有类名->混淆后类名的映射关系
+-verbose
+# 指定不去忽略非公共库的类成员
+-dontskipnonpubliclibraryclassmembers
+# 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
+-dontpreverify
+# 保留Annotation不混淆
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
+# 避免混淆泛型
+-keepattributes Signature
+# 抛出异常时保留代码行号
+-keepattributes SourceFile,LineNumberTable
+# 指定混淆是采用的算法,后面的参数是一个过滤器
+# 这个过滤器是谷歌推荐的算法,一般不做更改
+-optimizations !code/simplification/cast,!field/*,!class/merging/*
+
+#2.默认保留区
+# 保留我们使用的四大组件,自定义的Application等等这些类不被混淆
+# 因为这些子类都有可能被外部调用
+-keep public class * extends android.app.Activity
+-keep public class * extends android.app.Application
+-keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.preference.Preference
+-keep public class * extends android.view.View
+-keep public class com.android.vending.licensing.ILicensingService
+# 保留support下的所有类及其内部类
+-keep class android.support.** {*;}
+# 保留继承的
+-keep public class * extends android.support.v4.**
+-keep public class * extends android.support.v7.**
+-keep public class * extends android.support.annotation.**
+# 保留R下面的资源
+-keep class **.R$* {*;}
+
+# 保留本地native方法不被混淆
+-keepclasseswithmembernames class * {
+    native <methods>;
+}
+# 保留在Activity中的方法参数是view的方法,
+# 这样以来我们在layout中写的onClick就不会被影响
+-keepclassmembers class * extends android.app.Activity{
+    public void *(android.view.View);
+}
+# 保留枚举类不被混淆
+-keepclassmembers enum * {
+    public static **[] values();
+    public static ** valueOf(java.lang.String);
+}
+# 保留我们自定义控件(继承自View)不被混淆
+-keep public class * extends android.view.View{
+    *** get*();
+    void set*(***);
+    public <init>(android.content.Context);
+    public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+-keepclasseswithmembers class * {
+    public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+
+# 保留Parcelable序列化类不被混淆
+-keep class * implements android.os.Parcelable {
+    public static final android.os.Parcelable$Creator *;
+}
+# 保留Serializable序列化的类不被混淆
+-keepclassmembers class * implements java.io.Serializable {
+    static final long serialVersionUID;
+    private static final java.io.ObjectStreamField[] serialPersistentFields;
+    !static !transient <fields>;
+    !private <fields>;
+    !private <methods>;
+    private void writeObject(java.io.ObjectOutputStream);
+    private void readObject(java.io.ObjectInputStream);
+    java.lang.Object writeReplace();
+    java.lang.Object readResolve();
+}
+# 对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆
+-keepclassmembers class * {
+    void *(**On*Event);
+}
+
+#3.webview
+-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+   public *;
+}
+-keepclassmembers class * extends android.webkit.webViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.webViewClient {
+    public void *(android.webkit.webView, jav.lang.String);
+}
+#移除Log类打印各个等级日志的代码,打正式包的时候可以做为禁log使用
+#这里可以作为禁止log打印的功能使用,另外的一种实现方案是通过BuildConfig.DEBUG的变量来控制
+-assumenosideeffects class android.util.Log {
+    public static *** v(...);
+    public static *** i(...);
+    public static *** d(...);
+    public static *** w(...);
+    public static *** e(...);
+}
+
+
+###############################
+#
+# 第三方jar包
+#
+###############################
+-keep class com.baidu.** {*;}
+-keep class mapsdkvi.com.** {*;}
+-dontwarn com.baidu.**
+
+-keep class com.uuzuche.lib_zxing.** {*;}
+-keep class com.andreabaccega.** {*;}
+-keep class com.github.clans.fab.** {*;}
+-keep class com.yalantis.phoenix.** {*;}
+-keep class com.baoyz.swipemenulistview.** {*;}
+-keep class com.viewpagerindicator.** {*;}
+-keep class com.afollestad.materialdialogs.** {*;}
+-keep class com.github.mikephil.charting.** {*;}
+-keep class com.module.recyclerlibrary.** {*;}
+-keep class com.handmark.pulltorefresh.library.** {*;}
+-keep class cc.cloudist.acplibrary.** {*;}
+
+-keep class android.arch.core.internal.** {*;}
+-keep class android.arch.lifecycle.** {*;}
+-keep class com.alibaba.fastjson.** {*;}
+-dontwarn com.alibaba.fastjson.**
+-keep class android.support.graphics.drawable.** {*;}
+-keep class com.facebook.stetho.** {*;}
+-keep class javax.annotation.** {*;}
+-keep class com.lidroid.xutils.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
+-keep class okio.** {*;}
+-dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
+-keep class org.apache.** {*;}
+-keep class org.junit.** {*;}
+-keep class junit.** {*;}
+-keep class org.hamcrest.** {*;}
+
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
 
-# Add any project specific keep options here:
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
 
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-#   public *;
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
+-keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
+-keep class com.google.gson.** {*;}
+-keep class com.google.gson.stream.** {*;}
+-keep class com.android.volley.** {*;}
+
+#butterknife
+-keep class butterknife.** { *; }
+-dontwarn butterknife.internal.**
+-keep class **$$ViewBinder { *; }
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
+-keep class cat.ereza.customactivityoncrash.** {*;}
+-keep class uk.co.senab.photoview.** {*;}
+-keep class com.flipboard.bottomsheet.** {*;}
+-keep class flipboard.bottomsheet.** {*;}
+
+#glide
+-keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
+-keep class com.chad.library.** {*;}
+-keep class com.tonicartos.widget.stickygridheaders.** {*;}
+-keep class com.orhanobut.logger.** {*;}
+-keep class com.readystatesoftware.systembartint.** {*;}
+-keep class com.scwang.smartrefresh.** {*;}
+-keep class com.squareup.** {*;}
+-keep class com.tencent.** {*;}
+-keep class com.youth.banner.** {*;}
+-keep class de.hdodenhof.circleimageview.** {*;}
+
+-keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
+-keep class me.gujun.android.taggroup.** {*;}
+-keep class me.zhanghai.android.materialprogressbar.** {*;}
+-keep class android.net.** {*;}
+-keep class com.android.internal.http.multipart.** {*;}
+-keep class se.emilsjolander.stickylistheaders.** {*;}
+-keep class com.alipay.** {*;}
+-dontwarn com.alipay.**
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
+}
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
 #}
 
-# Uncomment this to preserve the line number information for
-# debugging stack traces.
-#-keepattributes SourceFile,LineNumberTable
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
+
+###############################
+#
+# 自己的代码
+# 引用的其他Module可以直接在app的这个混淆文件里配置
+#
+###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
+#实体类
+-keep class com.modular.booking.model.** {*;}
+-keep class com.uas.appcontact.model.** {*;}
+-keep class com.modular.login.model.** {*;}
+-keep class com.modular.booking.model.** {*;}
+-keep class com.uas.appme.settings.model.** {*;}
+-keep class com.modular.appmessages.model.** {*;}
+-keep class com.modular.apputils.model.** {*;}
+-keep class com.uas.appworks.model.** {*;}
+-keep class com.xzjmyk.pm.activity.bean.** {*;}
+-keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
+#自定义控件
+-keep class com.core.widget.** {*;}
+-keep class com.modular.booking.widget.** {*;}
+-keep class com.uas.appcontact.ui.widget.stickylistheaders.** {*;}
+-keep class com.uas.appme.widget.** {*;}
+-keep class com.modular.appmessages.widget.** {*;}
+-keep class com.modular.apputils.widget.** {*;}
+-keep class com.uas.appworks.widget.** {*;}
+-keep class com.ipaulpro.afilechooser.** {*;}
+-keep class com.roamer.slidelistview.** {*;}
+-keep class com.xzjmyk.pm.activity.view.** {*;}
+-keep class com.xzjmyk.pm.activity.video.** {*;}
+-keep class com.modular.apputils.utils.** {*;}
+#与js互相调用的类
+-keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 
-# If you keep the line number information, uncomment this to
-# hide the original source file name.
-#-renamesourcefileattribute SourceFile

+ 2 - 0
app_core/common/src/main/java/com/core/app/AppConfig.java

@@ -6,8 +6,10 @@ import android.content.SharedPreferences.Editor;
 import android.text.TextUtils;
 import android.util.Log;
 
+import com.core.base.NotProguard;
 import com.core.model.ConfigBean;
 
+@NotProguard
 public class AppConfig {
     public static final boolean COMPANY = true;//不可以乱动,调试接口
     public static final boolean IS_MISSION = true;//是否自动外勤

+ 18 - 0
app_core/common/src/main/java/com/core/base/NotProguard.java

@@ -0,0 +1,18 @@
+package com.core.base;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @author RaoMeng
+ * @describe 不被混淆的注解
+ * @date 2018/6/5 9:40
+ */
+
+@Retention(RetentionPolicy.CLASS)
+@Target({ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.FIELD})
+
+public @interface NotProguard {
+}

+ 25 - 3
app_core/common/src/main/java/com/core/net/ProgressDownloader.java

@@ -81,6 +81,22 @@ public class ProgressDownloader {
         });
     }
 
+    public void download(final long startsPoint, final DownloadCallBack downloadCallBack) {
+        call = newCall(startsPoint);
+        call.enqueue(new Callback() {
+            @Override
+            public void onFailure(Call call, IOException e) {
+                downloadCallBack.onFailure(call, e);
+            }
+
+            @Override
+            public void onResponse(Call call, Response response) throws IOException {
+                downloadCallBack.onResponse(call, response);
+                save(response, startsPoint);
+            }
+        });
+    }
+
     public void pause() {
         if (call != null) {
             call.cancel();
@@ -88,9 +104,9 @@ public class ProgressDownloader {
     }
 
     protected void save(Response response, long startsPoint) {
-      String fileName=  response.headers().get("Content-Disposition");
-        LogUtil.i("fileName="+fileName);
-        LogUtil.i("response.headers()="+ JSON.toJSONString(response.headers()));
+        String fileName = response.headers().get("Content-Disposition");
+        LogUtil.i("fileName=" + fileName);
+        LogUtil.i("response.headers()=" + JSON.toJSONString(response.headers()));
         ResponseBody body = response.body();
         InputStream in = body.byteStream();
         FileChannel channelOut = null;
@@ -123,4 +139,10 @@ public class ProgressDownloader {
             }
         }
     }
+
+    public interface DownloadCallBack {
+        void onFailure(Call call, IOException e);
+
+        void onResponse(Call call, Response response);
+    }
 }

+ 1 - 1
app_core/common/src/main/java/com/core/utils/CommonUtil.java

@@ -108,7 +108,7 @@ public class CommonUtil {
 //        if (BaseConfig.isDebug()){
 //            baseUrl="http://192.168.253.243:8080/ERP/";
 //        }
-//        baseUrl = "http://192.168.253.52:9000/ERP/";
+//        baseUrl = "http://192.168.253.41:8080/ERP/";
 
         return baseUrl;
     }

+ 385 - 14
app_core/imageload/proguard-rules.pro

@@ -3,23 +3,394 @@
 # in C:\Android\sdk/tools/proguard/proguard-android.txt
 # You can edit the include path and order by changing the proguardFiles
 # directive in build.gradle.
+
+###############################
+#
+# 公共部分(固定不变)
 #
-# For more details, see
-#   http://developer.android.com/guide/developing/tools/proguard.html
+###############################
+#1.基本指令区
+# 代码混淆压缩比,在0~7之间,默认为5,一般不做修改
+-optimizationpasses 5
+# 混合时不使用大小写混合,混合后的类名为小写
+-dontusemixedcaseclassnames
+# 指定不去忽略非公共库的类
+-dontskipnonpubliclibraryclasses
+# 这句话能够使我们的项目混淆后产生映射文件
+# 包含有类名->混淆后类名的映射关系
+-verbose
+# 指定不去忽略非公共库的类成员
+-dontskipnonpubliclibraryclassmembers
+# 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
+-dontpreverify
+# 保留Annotation不混淆
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
+# 避免混淆泛型
+-keepattributes Signature
+# 抛出异常时保留代码行号
+-keepattributes SourceFile,LineNumberTable
+# 指定混淆是采用的算法,后面的参数是一个过滤器
+# 这个过滤器是谷歌推荐的算法,一般不做更改
+-optimizations !code/simplification/cast,!field/*,!class/merging/*
+
+#2.默认保留区
+# 保留我们使用的四大组件,自定义的Application等等这些类不被混淆
+# 因为这些子类都有可能被外部调用
+-keep public class * extends android.app.Activity
+-keep public class * extends android.app.Application
+-keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.preference.Preference
+-keep public class * extends android.view.View
+-keep public class com.android.vending.licensing.ILicensingService
+# 保留support下的所有类及其内部类
+-keep class android.support.** {*;}
+# 保留继承的
+-keep public class * extends android.support.v4.**
+-keep public class * extends android.support.v7.**
+-keep public class * extends android.support.annotation.**
+# 保留R下面的资源
+-keep class **.R$* {*;}
+
+# 保留本地native方法不被混淆
+-keepclasseswithmembernames class * {
+    native <methods>;
+}
+# 保留在Activity中的方法参数是view的方法,
+# 这样以来我们在layout中写的onClick就不会被影响
+-keepclassmembers class * extends android.app.Activity{
+    public void *(android.view.View);
+}
+# 保留枚举类不被混淆
+-keepclassmembers enum * {
+    public static **[] values();
+    public static ** valueOf(java.lang.String);
+}
+# 保留我们自定义控件(继承自View)不被混淆
+-keep public class * extends android.view.View{
+    *** get*();
+    void set*(***);
+    public <init>(android.content.Context);
+    public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+-keepclasseswithmembers class * {
+    public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+
+# 保留Parcelable序列化类不被混淆
+-keep class * implements android.os.Parcelable {
+    public static final android.os.Parcelable$Creator *;
+}
+# 保留Serializable序列化的类不被混淆
+-keepclassmembers class * implements java.io.Serializable {
+    static final long serialVersionUID;
+    private static final java.io.ObjectStreamField[] serialPersistentFields;
+    !static !transient <fields>;
+    !private <fields>;
+    !private <methods>;
+    private void writeObject(java.io.ObjectOutputStream);
+    private void readObject(java.io.ObjectInputStream);
+    java.lang.Object writeReplace();
+    java.lang.Object readResolve();
+}
+# 对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆
+-keepclassmembers class * {
+    void *(**On*Event);
+}
+
+#3.webview
+-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+   public *;
+}
+-keepclassmembers class * extends android.webkit.webViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.webViewClient {
+    public void *(android.webkit.webView, jav.lang.String);
+}
+#移除Log类打印各个等级日志的代码,打正式包的时候可以做为禁log使用
+#这里可以作为禁止log打印的功能使用,另外的一种实现方案是通过BuildConfig.DEBUG的变量来控制
+-assumenosideeffects class android.util.Log {
+    public static *** v(...);
+    public static *** i(...);
+    public static *** d(...);
+    public static *** w(...);
+    public static *** e(...);
+}
+
+
+###############################
+#
+# 第三方jar包
+#
+###############################
+-keep class com.baidu.** {*;}
+-keep class mapsdkvi.com.** {*;}
+-dontwarn com.baidu.**
+
+-keep class com.uuzuche.lib_zxing.** {*;}
+-keep class com.andreabaccega.** {*;}
+-keep class com.github.clans.fab.** {*;}
+-keep class com.yalantis.phoenix.** {*;}
+-keep class com.baoyz.swipemenulistview.** {*;}
+-keep class com.viewpagerindicator.** {*;}
+-keep class com.afollestad.materialdialogs.** {*;}
+-keep class com.github.mikephil.charting.** {*;}
+-keep class com.module.recyclerlibrary.** {*;}
+-keep class com.handmark.pulltorefresh.library.** {*;}
+-keep class cc.cloudist.acplibrary.** {*;}
+
+-keep class android.arch.core.internal.** {*;}
+-keep class android.arch.lifecycle.** {*;}
+-keep class com.alibaba.fastjson.** {*;}
+-dontwarn com.alibaba.fastjson.**
+-keep class android.support.graphics.drawable.** {*;}
+-keep class com.facebook.stetho.** {*;}
+-keep class javax.annotation.** {*;}
+-keep class com.lidroid.xutils.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
+-keep class okio.** {*;}
+-dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
+-keep class org.apache.** {*;}
+-keep class org.junit.** {*;}
+-keep class junit.** {*;}
+-keep class org.hamcrest.** {*;}
+
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
 
-# Add any project specific keep options here:
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
 
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-#   public *;
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
+-keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
+-keep class com.google.gson.** {*;}
+-keep class com.google.gson.stream.** {*;}
+-keep class com.android.volley.** {*;}
+
+#butterknife
+-keep class butterknife.** { *; }
+-dontwarn butterknife.internal.**
+-keep class **$$ViewBinder { *; }
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
+-keep class cat.ereza.customactivityoncrash.** {*;}
+-keep class uk.co.senab.photoview.** {*;}
+-keep class com.flipboard.bottomsheet.** {*;}
+-keep class flipboard.bottomsheet.** {*;}
+
+#glide
+-keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
+-keep class com.chad.library.** {*;}
+-keep class com.tonicartos.widget.stickygridheaders.** {*;}
+-keep class com.orhanobut.logger.** {*;}
+-keep class com.readystatesoftware.systembartint.** {*;}
+-keep class com.scwang.smartrefresh.** {*;}
+-keep class com.squareup.** {*;}
+-keep class com.tencent.** {*;}
+-keep class com.youth.banner.** {*;}
+-keep class de.hdodenhof.circleimageview.** {*;}
+
+-keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
+-keep class me.gujun.android.taggroup.** {*;}
+-keep class me.zhanghai.android.materialprogressbar.** {*;}
+-keep class android.net.** {*;}
+-keep class com.android.internal.http.multipart.** {*;}
+-keep class se.emilsjolander.stickylistheaders.** {*;}
+-keep class com.alipay.** {*;}
+-dontwarn com.alipay.**
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
+}
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
 #}
 
-# Uncomment this to preserve the line number information for
-# debugging stack traces.
-#-keepattributes SourceFile,LineNumberTable
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
+
+###############################
+#
+# 自己的代码
+# 引用的其他Module可以直接在app的这个混淆文件里配置
+#
+###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
+#实体类
+-keep class com.modular.booking.model.** {*;}
+-keep class com.uas.appcontact.model.** {*;}
+-keep class com.modular.login.model.** {*;}
+-keep class com.modular.booking.model.** {*;}
+-keep class com.uas.appme.settings.model.** {*;}
+-keep class com.modular.appmessages.model.** {*;}
+-keep class com.modular.apputils.model.** {*;}
+-keep class com.uas.appworks.model.** {*;}
+-keep class com.xzjmyk.pm.activity.bean.** {*;}
+-keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
+#自定义控件
+-keep class com.core.widget.** {*;}
+-keep class com.modular.booking.widget.** {*;}
+-keep class com.uas.appcontact.ui.widget.stickylistheaders.** {*;}
+-keep class com.uas.appme.widget.** {*;}
+-keep class com.modular.appmessages.widget.** {*;}
+-keep class com.modular.apputils.widget.** {*;}
+-keep class com.uas.appworks.widget.** {*;}
+-keep class com.ipaulpro.afilechooser.** {*;}
+-keep class com.roamer.slidelistview.** {*;}
+-keep class com.xzjmyk.pm.activity.view.** {*;}
+-keep class com.xzjmyk.pm.activity.video.** {*;}
+-keep class com.modular.apputils.utils.** {*;}
+#与js互相调用的类
+-keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 
-# If you keep the line number information, uncomment this to
-# hide the original source file name.
-#-renamesourcefileattribute SourceFile

+ 386 - 15
app_core/message/proguard-rules.pro

@@ -1,25 +1,396 @@
 # Add project specific ProGuard rules here.
 # By default, the flags in this file are appended to flags specified
-# in E:\Android-Studio\sdk/tools/proguard/proguard-android.txt
+# in C:\Android\sdk/tools/proguard/proguard-android.txt
 # You can edit the include path and order by changing the proguardFiles
 # directive in build.gradle.
+
+###############################
+#
+# 公共部分(固定不变)
 #
-# For more details, see
-#   http://developer.android.com/guide/developing/tools/proguard.html
+###############################
+#1.基本指令区
+# 代码混淆压缩比,在0~7之间,默认为5,一般不做修改
+-optimizationpasses 5
+# 混合时不使用大小写混合,混合后的类名为小写
+-dontusemixedcaseclassnames
+# 指定不去忽略非公共库的类
+-dontskipnonpubliclibraryclasses
+# 这句话能够使我们的项目混淆后产生映射文件
+# 包含有类名->混淆后类名的映射关系
+-verbose
+# 指定不去忽略非公共库的类成员
+-dontskipnonpubliclibraryclassmembers
+# 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
+-dontpreverify
+# 保留Annotation不混淆
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
+# 避免混淆泛型
+-keepattributes Signature
+# 抛出异常时保留代码行号
+-keepattributes SourceFile,LineNumberTable
+# 指定混淆是采用的算法,后面的参数是一个过滤器
+# 这个过滤器是谷歌推荐的算法,一般不做更改
+-optimizations !code/simplification/cast,!field/*,!class/merging/*
+
+#2.默认保留区
+# 保留我们使用的四大组件,自定义的Application等等这些类不被混淆
+# 因为这些子类都有可能被外部调用
+-keep public class * extends android.app.Activity
+-keep public class * extends android.app.Application
+-keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.preference.Preference
+-keep public class * extends android.view.View
+-keep public class com.android.vending.licensing.ILicensingService
+# 保留support下的所有类及其内部类
+-keep class android.support.** {*;}
+# 保留继承的
+-keep public class * extends android.support.v4.**
+-keep public class * extends android.support.v7.**
+-keep public class * extends android.support.annotation.**
+# 保留R下面的资源
+-keep class **.R$* {*;}
+
+# 保留本地native方法不被混淆
+-keepclasseswithmembernames class * {
+    native <methods>;
+}
+# 保留在Activity中的方法参数是view的方法,
+# 这样以来我们在layout中写的onClick就不会被影响
+-keepclassmembers class * extends android.app.Activity{
+    public void *(android.view.View);
+}
+# 保留枚举类不被混淆
+-keepclassmembers enum * {
+    public static **[] values();
+    public static ** valueOf(java.lang.String);
+}
+# 保留我们自定义控件(继承自View)不被混淆
+-keep public class * extends android.view.View{
+    *** get*();
+    void set*(***);
+    public <init>(android.content.Context);
+    public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+-keepclasseswithmembers class * {
+    public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+
+# 保留Parcelable序列化类不被混淆
+-keep class * implements android.os.Parcelable {
+    public static final android.os.Parcelable$Creator *;
+}
+# 保留Serializable序列化的类不被混淆
+-keepclassmembers class * implements java.io.Serializable {
+    static final long serialVersionUID;
+    private static final java.io.ObjectStreamField[] serialPersistentFields;
+    !static !transient <fields>;
+    !private <fields>;
+    !private <methods>;
+    private void writeObject(java.io.ObjectOutputStream);
+    private void readObject(java.io.ObjectInputStream);
+    java.lang.Object writeReplace();
+    java.lang.Object readResolve();
+}
+# 对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆
+-keepclassmembers class * {
+    void *(**On*Event);
+}
+
+#3.webview
+-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+   public *;
+}
+-keepclassmembers class * extends android.webkit.webViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.webViewClient {
+    public void *(android.webkit.webView, jav.lang.String);
+}
+#移除Log类打印各个等级日志的代码,打正式包的时候可以做为禁log使用
+#这里可以作为禁止log打印的功能使用,另外的一种实现方案是通过BuildConfig.DEBUG的变量来控制
+-assumenosideeffects class android.util.Log {
+    public static *** v(...);
+    public static *** i(...);
+    public static *** d(...);
+    public static *** w(...);
+    public static *** e(...);
+}
+
+
+###############################
+#
+# 第三方jar包
+#
+###############################
+-keep class com.baidu.** {*;}
+-keep class mapsdkvi.com.** {*;}
+-dontwarn com.baidu.**
+
+-keep class com.uuzuche.lib_zxing.** {*;}
+-keep class com.andreabaccega.** {*;}
+-keep class com.github.clans.fab.** {*;}
+-keep class com.yalantis.phoenix.** {*;}
+-keep class com.baoyz.swipemenulistview.** {*;}
+-keep class com.viewpagerindicator.** {*;}
+-keep class com.afollestad.materialdialogs.** {*;}
+-keep class com.github.mikephil.charting.** {*;}
+-keep class com.module.recyclerlibrary.** {*;}
+-keep class com.handmark.pulltorefresh.library.** {*;}
+-keep class cc.cloudist.acplibrary.** {*;}
+
+-keep class android.arch.core.internal.** {*;}
+-keep class android.arch.lifecycle.** {*;}
+-keep class com.alibaba.fastjson.** {*;}
+-dontwarn com.alibaba.fastjson.**
+-keep class android.support.graphics.drawable.** {*;}
+-keep class com.facebook.stetho.** {*;}
+-keep class javax.annotation.** {*;}
+-keep class com.lidroid.xutils.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
+-keep class okio.** {*;}
+-dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
+-keep class org.apache.** {*;}
+-keep class org.junit.** {*;}
+-keep class junit.** {*;}
+-keep class org.hamcrest.** {*;}
+
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
 
-# Add any project specific keep options here:
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
 
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-#   public *;
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
+-keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
+-keep class com.google.gson.** {*;}
+-keep class com.google.gson.stream.** {*;}
+-keep class com.android.volley.** {*;}
+
+#butterknife
+-keep class butterknife.** { *; }
+-dontwarn butterknife.internal.**
+-keep class **$$ViewBinder { *; }
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
+-keep class cat.ereza.customactivityoncrash.** {*;}
+-keep class uk.co.senab.photoview.** {*;}
+-keep class com.flipboard.bottomsheet.** {*;}
+-keep class flipboard.bottomsheet.** {*;}
+
+#glide
+-keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
+-keep class com.chad.library.** {*;}
+-keep class com.tonicartos.widget.stickygridheaders.** {*;}
+-keep class com.orhanobut.logger.** {*;}
+-keep class com.readystatesoftware.systembartint.** {*;}
+-keep class com.scwang.smartrefresh.** {*;}
+-keep class com.squareup.** {*;}
+-keep class com.tencent.** {*;}
+-keep class com.youth.banner.** {*;}
+-keep class de.hdodenhof.circleimageview.** {*;}
+
+-keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
+-keep class me.gujun.android.taggroup.** {*;}
+-keep class me.zhanghai.android.materialprogressbar.** {*;}
+-keep class android.net.** {*;}
+-keep class com.android.internal.http.multipart.** {*;}
+-keep class se.emilsjolander.stickylistheaders.** {*;}
+-keep class com.alipay.** {*;}
+-dontwarn com.alipay.**
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
+}
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
 #}
 
-# Uncomment this to preserve the line number information for
-# debugging stack traces.
-#-keepattributes SourceFile,LineNumberTable
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
+
+###############################
+#
+# 自己的代码
+# 引用的其他Module可以直接在app的这个混淆文件里配置
+#
+###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
+#实体类
+-keep class com.modular.booking.model.** {*;}
+-keep class com.uas.appcontact.model.** {*;}
+-keep class com.modular.login.model.** {*;}
+-keep class com.modular.booking.model.** {*;}
+-keep class com.uas.appme.settings.model.** {*;}
+-keep class com.modular.appmessages.model.** {*;}
+-keep class com.modular.apputils.model.** {*;}
+-keep class com.uas.appworks.model.** {*;}
+-keep class com.xzjmyk.pm.activity.bean.** {*;}
+-keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
+#自定义控件
+-keep class com.core.widget.** {*;}
+-keep class com.modular.booking.widget.** {*;}
+-keep class com.uas.appcontact.ui.widget.stickylistheaders.** {*;}
+-keep class com.uas.appme.widget.** {*;}
+-keep class com.modular.appmessages.widget.** {*;}
+-keep class com.modular.apputils.widget.** {*;}
+-keep class com.uas.appworks.widget.** {*;}
+-keep class com.ipaulpro.afilechooser.** {*;}
+-keep class com.roamer.slidelistview.** {*;}
+-keep class com.xzjmyk.pm.activity.view.** {*;}
+-keep class com.xzjmyk.pm.activity.video.** {*;}
+-keep class com.modular.apputils.utils.** {*;}
+#与js互相调用的类
+-keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 
-# If you keep the line number information, uncomment this to
-# hide the original source file name.
-#-renamesourcefileattribute SourceFile

+ 385 - 14
app_core/network/proguard-rules.pro

@@ -3,23 +3,394 @@
 # in C:\Android\sdk/tools/proguard/proguard-android.txt
 # You can edit the include path and order by changing the proguardFiles
 # directive in build.gradle.
+
+###############################
+#
+# 公共部分(固定不变)
 #
-# For more details, see
-#   http://developer.android.com/guide/developing/tools/proguard.html
+###############################
+#1.基本指令区
+# 代码混淆压缩比,在0~7之间,默认为5,一般不做修改
+-optimizationpasses 5
+# 混合时不使用大小写混合,混合后的类名为小写
+-dontusemixedcaseclassnames
+# 指定不去忽略非公共库的类
+-dontskipnonpubliclibraryclasses
+# 这句话能够使我们的项目混淆后产生映射文件
+# 包含有类名->混淆后类名的映射关系
+-verbose
+# 指定不去忽略非公共库的类成员
+-dontskipnonpubliclibraryclassmembers
+# 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
+-dontpreverify
+# 保留Annotation不混淆
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
+# 避免混淆泛型
+-keepattributes Signature
+# 抛出异常时保留代码行号
+-keepattributes SourceFile,LineNumberTable
+# 指定混淆是采用的算法,后面的参数是一个过滤器
+# 这个过滤器是谷歌推荐的算法,一般不做更改
+-optimizations !code/simplification/cast,!field/*,!class/merging/*
+
+#2.默认保留区
+# 保留我们使用的四大组件,自定义的Application等等这些类不被混淆
+# 因为这些子类都有可能被外部调用
+-keep public class * extends android.app.Activity
+-keep public class * extends android.app.Application
+-keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.preference.Preference
+-keep public class * extends android.view.View
+-keep public class com.android.vending.licensing.ILicensingService
+# 保留support下的所有类及其内部类
+-keep class android.support.** {*;}
+# 保留继承的
+-keep public class * extends android.support.v4.**
+-keep public class * extends android.support.v7.**
+-keep public class * extends android.support.annotation.**
+# 保留R下面的资源
+-keep class **.R$* {*;}
+
+# 保留本地native方法不被混淆
+-keepclasseswithmembernames class * {
+    native <methods>;
+}
+# 保留在Activity中的方法参数是view的方法,
+# 这样以来我们在layout中写的onClick就不会被影响
+-keepclassmembers class * extends android.app.Activity{
+    public void *(android.view.View);
+}
+# 保留枚举类不被混淆
+-keepclassmembers enum * {
+    public static **[] values();
+    public static ** valueOf(java.lang.String);
+}
+# 保留我们自定义控件(继承自View)不被混淆
+-keep public class * extends android.view.View{
+    *** get*();
+    void set*(***);
+    public <init>(android.content.Context);
+    public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+-keepclasseswithmembers class * {
+    public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+
+# 保留Parcelable序列化类不被混淆
+-keep class * implements android.os.Parcelable {
+    public static final android.os.Parcelable$Creator *;
+}
+# 保留Serializable序列化的类不被混淆
+-keepclassmembers class * implements java.io.Serializable {
+    static final long serialVersionUID;
+    private static final java.io.ObjectStreamField[] serialPersistentFields;
+    !static !transient <fields>;
+    !private <fields>;
+    !private <methods>;
+    private void writeObject(java.io.ObjectOutputStream);
+    private void readObject(java.io.ObjectInputStream);
+    java.lang.Object writeReplace();
+    java.lang.Object readResolve();
+}
+# 对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆
+-keepclassmembers class * {
+    void *(**On*Event);
+}
+
+#3.webview
+-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+   public *;
+}
+-keepclassmembers class * extends android.webkit.webViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.webViewClient {
+    public void *(android.webkit.webView, jav.lang.String);
+}
+#移除Log类打印各个等级日志的代码,打正式包的时候可以做为禁log使用
+#这里可以作为禁止log打印的功能使用,另外的一种实现方案是通过BuildConfig.DEBUG的变量来控制
+-assumenosideeffects class android.util.Log {
+    public static *** v(...);
+    public static *** i(...);
+    public static *** d(...);
+    public static *** w(...);
+    public static *** e(...);
+}
+
+
+###############################
+#
+# 第三方jar包
+#
+###############################
+-keep class com.baidu.** {*;}
+-keep class mapsdkvi.com.** {*;}
+-dontwarn com.baidu.**
+
+-keep class com.uuzuche.lib_zxing.** {*;}
+-keep class com.andreabaccega.** {*;}
+-keep class com.github.clans.fab.** {*;}
+-keep class com.yalantis.phoenix.** {*;}
+-keep class com.baoyz.swipemenulistview.** {*;}
+-keep class com.viewpagerindicator.** {*;}
+-keep class com.afollestad.materialdialogs.** {*;}
+-keep class com.github.mikephil.charting.** {*;}
+-keep class com.module.recyclerlibrary.** {*;}
+-keep class com.handmark.pulltorefresh.library.** {*;}
+-keep class cc.cloudist.acplibrary.** {*;}
+
+-keep class android.arch.core.internal.** {*;}
+-keep class android.arch.lifecycle.** {*;}
+-keep class com.alibaba.fastjson.** {*;}
+-dontwarn com.alibaba.fastjson.**
+-keep class android.support.graphics.drawable.** {*;}
+-keep class com.facebook.stetho.** {*;}
+-keep class javax.annotation.** {*;}
+-keep class com.lidroid.xutils.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
+-keep class okio.** {*;}
+-dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
+-keep class org.apache.** {*;}
+-keep class org.junit.** {*;}
+-keep class junit.** {*;}
+-keep class org.hamcrest.** {*;}
+
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
 
-# Add any project specific keep options here:
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
 
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-#   public *;
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
+-keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
+-keep class com.google.gson.** {*;}
+-keep class com.google.gson.stream.** {*;}
+-keep class com.android.volley.** {*;}
+
+#butterknife
+-keep class butterknife.** { *; }
+-dontwarn butterknife.internal.**
+-keep class **$$ViewBinder { *; }
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
+-keep class cat.ereza.customactivityoncrash.** {*;}
+-keep class uk.co.senab.photoview.** {*;}
+-keep class com.flipboard.bottomsheet.** {*;}
+-keep class flipboard.bottomsheet.** {*;}
+
+#glide
+-keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
+-keep class com.chad.library.** {*;}
+-keep class com.tonicartos.widget.stickygridheaders.** {*;}
+-keep class com.orhanobut.logger.** {*;}
+-keep class com.readystatesoftware.systembartint.** {*;}
+-keep class com.scwang.smartrefresh.** {*;}
+-keep class com.squareup.** {*;}
+-keep class com.tencent.** {*;}
+-keep class com.youth.banner.** {*;}
+-keep class de.hdodenhof.circleimageview.** {*;}
+
+-keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
+-keep class me.gujun.android.taggroup.** {*;}
+-keep class me.zhanghai.android.materialprogressbar.** {*;}
+-keep class android.net.** {*;}
+-keep class com.android.internal.http.multipart.** {*;}
+-keep class se.emilsjolander.stickylistheaders.** {*;}
+-keep class com.alipay.** {*;}
+-dontwarn com.alipay.**
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
+}
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
 #}
 
-# Uncomment this to preserve the line number information for
-# debugging stack traces.
-#-keepattributes SourceFile,LineNumberTable
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
+
+###############################
+#
+# 自己的代码
+# 引用的其他Module可以直接在app的这个混淆文件里配置
+#
+###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
+#实体类
+-keep class com.modular.booking.model.** {*;}
+-keep class com.uas.appcontact.model.** {*;}
+-keep class com.modular.login.model.** {*;}
+-keep class com.modular.booking.model.** {*;}
+-keep class com.uas.appme.settings.model.** {*;}
+-keep class com.modular.appmessages.model.** {*;}
+-keep class com.modular.apputils.model.** {*;}
+-keep class com.uas.appworks.model.** {*;}
+-keep class com.xzjmyk.pm.activity.bean.** {*;}
+-keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
+#自定义控件
+-keep class com.core.widget.** {*;}
+-keep class com.modular.booking.widget.** {*;}
+-keep class com.uas.appcontact.ui.widget.stickylistheaders.** {*;}
+-keep class com.uas.appme.widget.** {*;}
+-keep class com.modular.appmessages.widget.** {*;}
+-keep class com.modular.apputils.widget.** {*;}
+-keep class com.uas.appworks.widget.** {*;}
+-keep class com.ipaulpro.afilechooser.** {*;}
+-keep class com.roamer.slidelistview.** {*;}
+-keep class com.xzjmyk.pm.activity.view.** {*;}
+-keep class com.xzjmyk.pm.activity.video.** {*;}
+-keep class com.modular.apputils.utils.** {*;}
+#与js互相调用的类
+-keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 
-# If you keep the line number information, uncomment this to
-# hide the original source file name.
-#-renamesourcefileattribute SourceFile

+ 172 - 10
app_modular/appbooking/proguard-rules.pro

@@ -24,7 +24,10 @@
 # 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
 -dontpreverify
 # 保留Annotation不混淆
--keepattributes *Annotation*,InnerClasses
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
 # 避免混淆泛型
 -keepattributes Signature
 # 抛出异常时保留代码行号
@@ -39,6 +42,7 @@
 -keep public class * extends android.app.Activity
 -keep public class * extends android.app.Application
 -keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
 -keep public class * extends android.content.BroadcastReceiver
 -keep public class * extends android.content.ContentProvider
 -keep public class * extends android.app.backup.BackupAgentHelper
@@ -130,7 +134,7 @@
 #
 ###############################
 -keep class com.baidu.** {*;}
--keep class vi.com.** {*;}
+-keep class mapsdkvi.com.** {*;}
 -dontwarn com.baidu.**
 
 -keep class com.uuzuche.lib_zxing.** {*;}
@@ -153,28 +157,118 @@
 -keep class com.facebook.stetho.** {*;}
 -keep class javax.annotation.** {*;}
 -keep class com.lidroid.xutils.** {*;}
--keep class okhttp3.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
 -keep class okio.** {*;}
 -dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
 -keep class org.apache.** {*;}
 -keep class org.junit.** {*;}
 -keep class junit.** {*;}
 -keep class org.hamcrest.** {*;}
 
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
+
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
+
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
 -keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
 -keep class com.google.gson.** {*;}
 -keep class com.google.gson.stream.** {*;}
 -keep class com.android.volley.** {*;}
 
--keep class butterknife.** {*;}
+#butterknife
+-keep class butterknife.** { *; }
 -dontwarn butterknife.internal.**
 -keep class **$$ViewBinder { *; }
-
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
 -keep class cat.ereza.customactivityoncrash.** {*;}
 -keep class uk.co.senab.photoview.** {*;}
 -keep class com.flipboard.bottomsheet.** {*;}
 -keep class flipboard.bottomsheet.** {*;}
+
+#glide
 -keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
 -keep class com.chad.library.** {*;}
 -keep class com.tonicartos.widget.stickygridheaders.** {*;}
 -keep class com.orhanobut.logger.** {*;}
@@ -182,22 +276,67 @@
 -keep class com.scwang.smartrefresh.** {*;}
 -keep class com.squareup.** {*;}
 -keep class com.tencent.** {*;}
--keep class com.umeng.analytics.** {*;}
 -keep class com.youth.banner.** {*;}
 -keep class de.hdodenhof.circleimageview.** {*;}
--keep class rx.** {*;}
+
 -keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
 -keep class me.gujun.android.taggroup.** {*;}
 -keep class me.zhanghai.android.materialprogressbar.** {*;}
 -keep class android.net.** {*;}
 -keep class com.android.internal.http.multipart.** {*;}
--keep class pl.droidsonroids.gif.** {*;}
 -keep class se.emilsjolander.stickylistheaders.** {*;}
 -keep class com.alipay.** {*;}
 -dontwarn com.alipay.**
--keep class com.tencent.mm.sdk.** {
-   *;
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
 }
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
+#}
+
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
 
 ###############################
 #
@@ -205,6 +344,8 @@
 # 引用的其他Module可以直接在app的这个混淆文件里配置
 #
 ###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
 #实体类
 -keep class com.modular.booking.model.** {*;}
 -keep class com.uas.appcontact.model.** {*;}
@@ -216,6 +357,10 @@
 -keep class com.uas.appworks.model.** {*;}
 -keep class com.xzjmyk.pm.activity.bean.** {*;}
 -keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
 #自定义控件
 -keep class com.core.widget.** {*;}
 -keep class com.modular.booking.widget.** {*;}
@@ -231,4 +376,21 @@
 -keep class com.modular.apputils.utils.** {*;}
 #与js互相调用的类
 -keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 

+ 172 - 10
app_modular/appcontact/proguard-rules.pro

@@ -24,7 +24,10 @@
 # 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
 -dontpreverify
 # 保留Annotation不混淆
--keepattributes *Annotation*,InnerClasses
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
 # 避免混淆泛型
 -keepattributes Signature
 # 抛出异常时保留代码行号
@@ -39,6 +42,7 @@
 -keep public class * extends android.app.Activity
 -keep public class * extends android.app.Application
 -keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
 -keep public class * extends android.content.BroadcastReceiver
 -keep public class * extends android.content.ContentProvider
 -keep public class * extends android.app.backup.BackupAgentHelper
@@ -130,7 +134,7 @@
 #
 ###############################
 -keep class com.baidu.** {*;}
--keep class vi.com.** {*;}
+-keep class mapsdkvi.com.** {*;}
 -dontwarn com.baidu.**
 
 -keep class com.uuzuche.lib_zxing.** {*;}
@@ -153,28 +157,118 @@
 -keep class com.facebook.stetho.** {*;}
 -keep class javax.annotation.** {*;}
 -keep class com.lidroid.xutils.** {*;}
--keep class okhttp3.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
 -keep class okio.** {*;}
 -dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
 -keep class org.apache.** {*;}
 -keep class org.junit.** {*;}
 -keep class junit.** {*;}
 -keep class org.hamcrest.** {*;}
 
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
+
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
+
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
 -keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
 -keep class com.google.gson.** {*;}
 -keep class com.google.gson.stream.** {*;}
 -keep class com.android.volley.** {*;}
 
--keep class butterknife.** {*;}
+#butterknife
+-keep class butterknife.** { *; }
 -dontwarn butterknife.internal.**
 -keep class **$$ViewBinder { *; }
-
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
 -keep class cat.ereza.customactivityoncrash.** {*;}
 -keep class uk.co.senab.photoview.** {*;}
 -keep class com.flipboard.bottomsheet.** {*;}
 -keep class flipboard.bottomsheet.** {*;}
+
+#glide
 -keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
 -keep class com.chad.library.** {*;}
 -keep class com.tonicartos.widget.stickygridheaders.** {*;}
 -keep class com.orhanobut.logger.** {*;}
@@ -182,22 +276,67 @@
 -keep class com.scwang.smartrefresh.** {*;}
 -keep class com.squareup.** {*;}
 -keep class com.tencent.** {*;}
--keep class com.umeng.analytics.** {*;}
 -keep class com.youth.banner.** {*;}
 -keep class de.hdodenhof.circleimageview.** {*;}
--keep class rx.** {*;}
+
 -keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
 -keep class me.gujun.android.taggroup.** {*;}
 -keep class me.zhanghai.android.materialprogressbar.** {*;}
 -keep class android.net.** {*;}
 -keep class com.android.internal.http.multipart.** {*;}
--keep class pl.droidsonroids.gif.** {*;}
 -keep class se.emilsjolander.stickylistheaders.** {*;}
 -keep class com.alipay.** {*;}
 -dontwarn com.alipay.**
--keep class com.tencent.mm.sdk.** {
-   *;
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
 }
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
+#}
+
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
 
 ###############################
 #
@@ -205,6 +344,8 @@
 # 引用的其他Module可以直接在app的这个混淆文件里配置
 #
 ###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
 #实体类
 -keep class com.modular.booking.model.** {*;}
 -keep class com.uas.appcontact.model.** {*;}
@@ -216,6 +357,10 @@
 -keep class com.uas.appworks.model.** {*;}
 -keep class com.xzjmyk.pm.activity.bean.** {*;}
 -keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
 #自定义控件
 -keep class com.core.widget.** {*;}
 -keep class com.modular.booking.widget.** {*;}
@@ -231,4 +376,21 @@
 -keep class com.modular.apputils.utils.** {*;}
 #与js互相调用的类
 -keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 

+ 2 - 2
app_modular/appcontact/src/main/java/com/uas/appcontact/ui/activity/CompanyContactsActivity.java

@@ -912,7 +912,7 @@ public class CompanyContactsActivity extends BaseActivity {
                     R.layout.item_pop_employee,
                     new String[]{"item_name", "item_sub"}, new int[]{R.id.name_tv, R.id.sub_tv});
             plist.setAdapter(adapter);
-          
+
             plist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                 @Override
                 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
@@ -941,7 +941,7 @@ public class CompanyContactsActivity extends BaseActivity {
                 }
             });
             popupWindow = new PopupWindow(view, windowManager.getDefaultDisplay().getWidth(), windowManager.getDefaultDisplay().getHeight() / 3);
-          
+
         }
         // 使其聚集
         popupWindow.setFocusable(true);

+ 172 - 10
app_modular/applogin/proguard-rules.pro

@@ -24,7 +24,10 @@
 # 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
 -dontpreverify
 # 保留Annotation不混淆
--keepattributes *Annotation*,InnerClasses
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
 # 避免混淆泛型
 -keepattributes Signature
 # 抛出异常时保留代码行号
@@ -39,6 +42,7 @@
 -keep public class * extends android.app.Activity
 -keep public class * extends android.app.Application
 -keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
 -keep public class * extends android.content.BroadcastReceiver
 -keep public class * extends android.content.ContentProvider
 -keep public class * extends android.app.backup.BackupAgentHelper
@@ -130,7 +134,7 @@
 #
 ###############################
 -keep class com.baidu.** {*;}
--keep class vi.com.** {*;}
+-keep class mapsdkvi.com.** {*;}
 -dontwarn com.baidu.**
 
 -keep class com.uuzuche.lib_zxing.** {*;}
@@ -153,28 +157,118 @@
 -keep class com.facebook.stetho.** {*;}
 -keep class javax.annotation.** {*;}
 -keep class com.lidroid.xutils.** {*;}
--keep class okhttp3.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
 -keep class okio.** {*;}
 -dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
 -keep class org.apache.** {*;}
 -keep class org.junit.** {*;}
 -keep class junit.** {*;}
 -keep class org.hamcrest.** {*;}
 
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
+
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
+
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
 -keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
 -keep class com.google.gson.** {*;}
 -keep class com.google.gson.stream.** {*;}
 -keep class com.android.volley.** {*;}
 
--keep class butterknife.** {*;}
+#butterknife
+-keep class butterknife.** { *; }
 -dontwarn butterknife.internal.**
 -keep class **$$ViewBinder { *; }
-
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
 -keep class cat.ereza.customactivityoncrash.** {*;}
 -keep class uk.co.senab.photoview.** {*;}
 -keep class com.flipboard.bottomsheet.** {*;}
 -keep class flipboard.bottomsheet.** {*;}
+
+#glide
 -keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
 -keep class com.chad.library.** {*;}
 -keep class com.tonicartos.widget.stickygridheaders.** {*;}
 -keep class com.orhanobut.logger.** {*;}
@@ -182,22 +276,67 @@
 -keep class com.scwang.smartrefresh.** {*;}
 -keep class com.squareup.** {*;}
 -keep class com.tencent.** {*;}
--keep class com.umeng.analytics.** {*;}
 -keep class com.youth.banner.** {*;}
 -keep class de.hdodenhof.circleimageview.** {*;}
--keep class rx.** {*;}
+
 -keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
 -keep class me.gujun.android.taggroup.** {*;}
 -keep class me.zhanghai.android.materialprogressbar.** {*;}
 -keep class android.net.** {*;}
 -keep class com.android.internal.http.multipart.** {*;}
--keep class pl.droidsonroids.gif.** {*;}
 -keep class se.emilsjolander.stickylistheaders.** {*;}
 -keep class com.alipay.** {*;}
 -dontwarn com.alipay.**
--keep class com.tencent.mm.sdk.** {
-   *;
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
 }
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
+#}
+
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
 
 ###############################
 #
@@ -205,6 +344,8 @@
 # 引用的其他Module可以直接在app的这个混淆文件里配置
 #
 ###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
 #实体类
 -keep class com.modular.booking.model.** {*;}
 -keep class com.uas.appcontact.model.** {*;}
@@ -216,6 +357,10 @@
 -keep class com.uas.appworks.model.** {*;}
 -keep class com.xzjmyk.pm.activity.bean.** {*;}
 -keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
 #自定义控件
 -keep class com.core.widget.** {*;}
 -keep class com.modular.booking.widget.** {*;}
@@ -231,4 +376,21 @@
 -keep class com.modular.apputils.utils.** {*;}
 #与js互相调用的类
 -keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 

+ 172 - 10
app_modular/appme/proguard-rules.pro

@@ -24,7 +24,10 @@
 # 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
 -dontpreverify
 # 保留Annotation不混淆
--keepattributes *Annotation*,InnerClasses
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
 # 避免混淆泛型
 -keepattributes Signature
 # 抛出异常时保留代码行号
@@ -39,6 +42,7 @@
 -keep public class * extends android.app.Activity
 -keep public class * extends android.app.Application
 -keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
 -keep public class * extends android.content.BroadcastReceiver
 -keep public class * extends android.content.ContentProvider
 -keep public class * extends android.app.backup.BackupAgentHelper
@@ -130,7 +134,7 @@
 #
 ###############################
 -keep class com.baidu.** {*;}
--keep class vi.com.** {*;}
+-keep class mapsdkvi.com.** {*;}
 -dontwarn com.baidu.**
 
 -keep class com.uuzuche.lib_zxing.** {*;}
@@ -153,28 +157,118 @@
 -keep class com.facebook.stetho.** {*;}
 -keep class javax.annotation.** {*;}
 -keep class com.lidroid.xutils.** {*;}
--keep class okhttp3.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
 -keep class okio.** {*;}
 -dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
 -keep class org.apache.** {*;}
 -keep class org.junit.** {*;}
 -keep class junit.** {*;}
 -keep class org.hamcrest.** {*;}
 
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
+
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
+
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
 -keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
 -keep class com.google.gson.** {*;}
 -keep class com.google.gson.stream.** {*;}
 -keep class com.android.volley.** {*;}
 
--keep class butterknife.** {*;}
+#butterknife
+-keep class butterknife.** { *; }
 -dontwarn butterknife.internal.**
 -keep class **$$ViewBinder { *; }
-
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
 -keep class cat.ereza.customactivityoncrash.** {*;}
 -keep class uk.co.senab.photoview.** {*;}
 -keep class com.flipboard.bottomsheet.** {*;}
 -keep class flipboard.bottomsheet.** {*;}
+
+#glide
 -keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
 -keep class com.chad.library.** {*;}
 -keep class com.tonicartos.widget.stickygridheaders.** {*;}
 -keep class com.orhanobut.logger.** {*;}
@@ -182,22 +276,67 @@
 -keep class com.scwang.smartrefresh.** {*;}
 -keep class com.squareup.** {*;}
 -keep class com.tencent.** {*;}
--keep class com.umeng.analytics.** {*;}
 -keep class com.youth.banner.** {*;}
 -keep class de.hdodenhof.circleimageview.** {*;}
--keep class rx.** {*;}
+
 -keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
 -keep class me.gujun.android.taggroup.** {*;}
 -keep class me.zhanghai.android.materialprogressbar.** {*;}
 -keep class android.net.** {*;}
 -keep class com.android.internal.http.multipart.** {*;}
--keep class pl.droidsonroids.gif.** {*;}
 -keep class se.emilsjolander.stickylistheaders.** {*;}
 -keep class com.alipay.** {*;}
 -dontwarn com.alipay.**
--keep class com.tencent.mm.sdk.** {
-   *;
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
 }
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
+#}
+
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
 
 ###############################
 #
@@ -205,6 +344,8 @@
 # 引用的其他Module可以直接在app的这个混淆文件里配置
 #
 ###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
 #实体类
 -keep class com.modular.booking.model.** {*;}
 -keep class com.uas.appcontact.model.** {*;}
@@ -216,6 +357,10 @@
 -keep class com.uas.appworks.model.** {*;}
 -keep class com.xzjmyk.pm.activity.bean.** {*;}
 -keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
 #自定义控件
 -keep class com.core.widget.** {*;}
 -keep class com.modular.booking.widget.** {*;}
@@ -231,4 +376,21 @@
 -keep class com.modular.apputils.utils.** {*;}
 #与js互相调用的类
 -keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 

+ 172 - 10
app_modular/appmessages/proguard-rules.pro

@@ -24,7 +24,10 @@
 # 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
 -dontpreverify
 # 保留Annotation不混淆
--keepattributes *Annotation*,InnerClasses
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
 # 避免混淆泛型
 -keepattributes Signature
 # 抛出异常时保留代码行号
@@ -39,6 +42,7 @@
 -keep public class * extends android.app.Activity
 -keep public class * extends android.app.Application
 -keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
 -keep public class * extends android.content.BroadcastReceiver
 -keep public class * extends android.content.ContentProvider
 -keep public class * extends android.app.backup.BackupAgentHelper
@@ -130,7 +134,7 @@
 #
 ###############################
 -keep class com.baidu.** {*;}
--keep class vi.com.** {*;}
+-keep class mapsdkvi.com.** {*;}
 -dontwarn com.baidu.**
 
 -keep class com.uuzuche.lib_zxing.** {*;}
@@ -153,28 +157,118 @@
 -keep class com.facebook.stetho.** {*;}
 -keep class javax.annotation.** {*;}
 -keep class com.lidroid.xutils.** {*;}
--keep class okhttp3.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
 -keep class okio.** {*;}
 -dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
 -keep class org.apache.** {*;}
 -keep class org.junit.** {*;}
 -keep class junit.** {*;}
 -keep class org.hamcrest.** {*;}
 
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
+
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
+
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
 -keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
 -keep class com.google.gson.** {*;}
 -keep class com.google.gson.stream.** {*;}
 -keep class com.android.volley.** {*;}
 
--keep class butterknife.** {*;}
+#butterknife
+-keep class butterknife.** { *; }
 -dontwarn butterknife.internal.**
 -keep class **$$ViewBinder { *; }
-
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
 -keep class cat.ereza.customactivityoncrash.** {*;}
 -keep class uk.co.senab.photoview.** {*;}
 -keep class com.flipboard.bottomsheet.** {*;}
 -keep class flipboard.bottomsheet.** {*;}
+
+#glide
 -keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
 -keep class com.chad.library.** {*;}
 -keep class com.tonicartos.widget.stickygridheaders.** {*;}
 -keep class com.orhanobut.logger.** {*;}
@@ -182,22 +276,67 @@
 -keep class com.scwang.smartrefresh.** {*;}
 -keep class com.squareup.** {*;}
 -keep class com.tencent.** {*;}
--keep class com.umeng.analytics.** {*;}
 -keep class com.youth.banner.** {*;}
 -keep class de.hdodenhof.circleimageview.** {*;}
--keep class rx.** {*;}
+
 -keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
 -keep class me.gujun.android.taggroup.** {*;}
 -keep class me.zhanghai.android.materialprogressbar.** {*;}
 -keep class android.net.** {*;}
 -keep class com.android.internal.http.multipart.** {*;}
--keep class pl.droidsonroids.gif.** {*;}
 -keep class se.emilsjolander.stickylistheaders.** {*;}
 -keep class com.alipay.** {*;}
 -dontwarn com.alipay.**
--keep class com.tencent.mm.sdk.** {
-   *;
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
 }
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
+#}
+
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
 
 ###############################
 #
@@ -205,6 +344,8 @@
 # 引用的其他Module可以直接在app的这个混淆文件里配置
 #
 ###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
 #实体类
 -keep class com.modular.booking.model.** {*;}
 -keep class com.uas.appcontact.model.** {*;}
@@ -216,6 +357,10 @@
 -keep class com.uas.appworks.model.** {*;}
 -keep class com.xzjmyk.pm.activity.bean.** {*;}
 -keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
 #自定义控件
 -keep class com.core.widget.** {*;}
 -keep class com.modular.booking.widget.** {*;}
@@ -231,4 +376,21 @@
 -keep class com.modular.apputils.utils.** {*;}
 #与js互相调用的类
 -keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 

+ 172 - 10
app_modular/appmoments/proguard-rules.pro

@@ -24,7 +24,10 @@
 # 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
 -dontpreverify
 # 保留Annotation不混淆
--keepattributes *Annotation*,InnerClasses
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
 # 避免混淆泛型
 -keepattributes Signature
 # 抛出异常时保留代码行号
@@ -39,6 +42,7 @@
 -keep public class * extends android.app.Activity
 -keep public class * extends android.app.Application
 -keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
 -keep public class * extends android.content.BroadcastReceiver
 -keep public class * extends android.content.ContentProvider
 -keep public class * extends android.app.backup.BackupAgentHelper
@@ -130,7 +134,7 @@
 #
 ###############################
 -keep class com.baidu.** {*;}
--keep class vi.com.** {*;}
+-keep class mapsdkvi.com.** {*;}
 -dontwarn com.baidu.**
 
 -keep class com.uuzuche.lib_zxing.** {*;}
@@ -153,28 +157,118 @@
 -keep class com.facebook.stetho.** {*;}
 -keep class javax.annotation.** {*;}
 -keep class com.lidroid.xutils.** {*;}
--keep class okhttp3.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
 -keep class okio.** {*;}
 -dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
 -keep class org.apache.** {*;}
 -keep class org.junit.** {*;}
 -keep class junit.** {*;}
 -keep class org.hamcrest.** {*;}
 
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
+
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
+
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
 -keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
 -keep class com.google.gson.** {*;}
 -keep class com.google.gson.stream.** {*;}
 -keep class com.android.volley.** {*;}
 
--keep class butterknife.** {*;}
+#butterknife
+-keep class butterknife.** { *; }
 -dontwarn butterknife.internal.**
 -keep class **$$ViewBinder { *; }
-
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
 -keep class cat.ereza.customactivityoncrash.** {*;}
 -keep class uk.co.senab.photoview.** {*;}
 -keep class com.flipboard.bottomsheet.** {*;}
 -keep class flipboard.bottomsheet.** {*;}
+
+#glide
 -keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
 -keep class com.chad.library.** {*;}
 -keep class com.tonicartos.widget.stickygridheaders.** {*;}
 -keep class com.orhanobut.logger.** {*;}
@@ -182,22 +276,67 @@
 -keep class com.scwang.smartrefresh.** {*;}
 -keep class com.squareup.** {*;}
 -keep class com.tencent.** {*;}
--keep class com.umeng.analytics.** {*;}
 -keep class com.youth.banner.** {*;}
 -keep class de.hdodenhof.circleimageview.** {*;}
--keep class rx.** {*;}
+
 -keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
 -keep class me.gujun.android.taggroup.** {*;}
 -keep class me.zhanghai.android.materialprogressbar.** {*;}
 -keep class android.net.** {*;}
 -keep class com.android.internal.http.multipart.** {*;}
--keep class pl.droidsonroids.gif.** {*;}
 -keep class se.emilsjolander.stickylistheaders.** {*;}
 -keep class com.alipay.** {*;}
 -dontwarn com.alipay.**
--keep class com.tencent.mm.sdk.** {
-   *;
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
 }
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
+#}
+
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
 
 ###############################
 #
@@ -205,6 +344,8 @@
 # 引用的其他Module可以直接在app的这个混淆文件里配置
 #
 ###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
 #实体类
 -keep class com.modular.booking.model.** {*;}
 -keep class com.uas.appcontact.model.** {*;}
@@ -216,6 +357,10 @@
 -keep class com.uas.appworks.model.** {*;}
 -keep class com.xzjmyk.pm.activity.bean.** {*;}
 -keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
 #自定义控件
 -keep class com.core.widget.** {*;}
 -keep class com.modular.booking.widget.** {*;}
@@ -231,4 +376,21 @@
 -keep class com.modular.apputils.utils.** {*;}
 #与js互相调用的类
 -keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 

+ 385 - 14
app_modular/appmusic/proguard-rules.pro

@@ -3,23 +3,394 @@
 # in C:\Android\sdk/tools/proguard/proguard-android.txt
 # You can edit the include path and order by changing the proguardFiles
 # directive in build.gradle.
+
+###############################
+#
+# 公共部分(固定不变)
 #
-# For more details, see
-#   http://developer.android.com/guide/developing/tools/proguard.html
+###############################
+#1.基本指令区
+# 代码混淆压缩比,在0~7之间,默认为5,一般不做修改
+-optimizationpasses 5
+# 混合时不使用大小写混合,混合后的类名为小写
+-dontusemixedcaseclassnames
+# 指定不去忽略非公共库的类
+-dontskipnonpubliclibraryclasses
+# 这句话能够使我们的项目混淆后产生映射文件
+# 包含有类名->混淆后类名的映射关系
+-verbose
+# 指定不去忽略非公共库的类成员
+-dontskipnonpubliclibraryclassmembers
+# 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
+-dontpreverify
+# 保留Annotation不混淆
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
+# 避免混淆泛型
+-keepattributes Signature
+# 抛出异常时保留代码行号
+-keepattributes SourceFile,LineNumberTable
+# 指定混淆是采用的算法,后面的参数是一个过滤器
+# 这个过滤器是谷歌推荐的算法,一般不做更改
+-optimizations !code/simplification/cast,!field/*,!class/merging/*
+
+#2.默认保留区
+# 保留我们使用的四大组件,自定义的Application等等这些类不被混淆
+# 因为这些子类都有可能被外部调用
+-keep public class * extends android.app.Activity
+-keep public class * extends android.app.Application
+-keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.preference.Preference
+-keep public class * extends android.view.View
+-keep public class com.android.vending.licensing.ILicensingService
+# 保留support下的所有类及其内部类
+-keep class android.support.** {*;}
+# 保留继承的
+-keep public class * extends android.support.v4.**
+-keep public class * extends android.support.v7.**
+-keep public class * extends android.support.annotation.**
+# 保留R下面的资源
+-keep class **.R$* {*;}
+
+# 保留本地native方法不被混淆
+-keepclasseswithmembernames class * {
+    native <methods>;
+}
+# 保留在Activity中的方法参数是view的方法,
+# 这样以来我们在layout中写的onClick就不会被影响
+-keepclassmembers class * extends android.app.Activity{
+    public void *(android.view.View);
+}
+# 保留枚举类不被混淆
+-keepclassmembers enum * {
+    public static **[] values();
+    public static ** valueOf(java.lang.String);
+}
+# 保留我们自定义控件(继承自View)不被混淆
+-keep public class * extends android.view.View{
+    *** get*();
+    void set*(***);
+    public <init>(android.content.Context);
+    public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+-keepclasseswithmembers class * {
+    public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+
+# 保留Parcelable序列化类不被混淆
+-keep class * implements android.os.Parcelable {
+    public static final android.os.Parcelable$Creator *;
+}
+# 保留Serializable序列化的类不被混淆
+-keepclassmembers class * implements java.io.Serializable {
+    static final long serialVersionUID;
+    private static final java.io.ObjectStreamField[] serialPersistentFields;
+    !static !transient <fields>;
+    !private <fields>;
+    !private <methods>;
+    private void writeObject(java.io.ObjectOutputStream);
+    private void readObject(java.io.ObjectInputStream);
+    java.lang.Object writeReplace();
+    java.lang.Object readResolve();
+}
+# 对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆
+-keepclassmembers class * {
+    void *(**On*Event);
+}
+
+#3.webview
+-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+   public *;
+}
+-keepclassmembers class * extends android.webkit.webViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.webViewClient {
+    public void *(android.webkit.webView, jav.lang.String);
+}
+#移除Log类打印各个等级日志的代码,打正式包的时候可以做为禁log使用
+#这里可以作为禁止log打印的功能使用,另外的一种实现方案是通过BuildConfig.DEBUG的变量来控制
+-assumenosideeffects class android.util.Log {
+    public static *** v(...);
+    public static *** i(...);
+    public static *** d(...);
+    public static *** w(...);
+    public static *** e(...);
+}
+
+
+###############################
+#
+# 第三方jar包
+#
+###############################
+-keep class com.baidu.** {*;}
+-keep class mapsdkvi.com.** {*;}
+-dontwarn com.baidu.**
+
+-keep class com.uuzuche.lib_zxing.** {*;}
+-keep class com.andreabaccega.** {*;}
+-keep class com.github.clans.fab.** {*;}
+-keep class com.yalantis.phoenix.** {*;}
+-keep class com.baoyz.swipemenulistview.** {*;}
+-keep class com.viewpagerindicator.** {*;}
+-keep class com.afollestad.materialdialogs.** {*;}
+-keep class com.github.mikephil.charting.** {*;}
+-keep class com.module.recyclerlibrary.** {*;}
+-keep class com.handmark.pulltorefresh.library.** {*;}
+-keep class cc.cloudist.acplibrary.** {*;}
+
+-keep class android.arch.core.internal.** {*;}
+-keep class android.arch.lifecycle.** {*;}
+-keep class com.alibaba.fastjson.** {*;}
+-dontwarn com.alibaba.fastjson.**
+-keep class android.support.graphics.drawable.** {*;}
+-keep class com.facebook.stetho.** {*;}
+-keep class javax.annotation.** {*;}
+-keep class com.lidroid.xutils.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
+-keep class okio.** {*;}
+-dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
+-keep class org.apache.** {*;}
+-keep class org.junit.** {*;}
+-keep class junit.** {*;}
+-keep class org.hamcrest.** {*;}
+
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
 
-# Add any project specific keep options here:
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
 
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-#   public *;
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
+-keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
+-keep class com.google.gson.** {*;}
+-keep class com.google.gson.stream.** {*;}
+-keep class com.android.volley.** {*;}
+
+#butterknife
+-keep class butterknife.** { *; }
+-dontwarn butterknife.internal.**
+-keep class **$$ViewBinder { *; }
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
+-keep class cat.ereza.customactivityoncrash.** {*;}
+-keep class uk.co.senab.photoview.** {*;}
+-keep class com.flipboard.bottomsheet.** {*;}
+-keep class flipboard.bottomsheet.** {*;}
+
+#glide
+-keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
+-keep class com.chad.library.** {*;}
+-keep class com.tonicartos.widget.stickygridheaders.** {*;}
+-keep class com.orhanobut.logger.** {*;}
+-keep class com.readystatesoftware.systembartint.** {*;}
+-keep class com.scwang.smartrefresh.** {*;}
+-keep class com.squareup.** {*;}
+-keep class com.tencent.** {*;}
+-keep class com.youth.banner.** {*;}
+-keep class de.hdodenhof.circleimageview.** {*;}
+
+-keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
+-keep class me.gujun.android.taggroup.** {*;}
+-keep class me.zhanghai.android.materialprogressbar.** {*;}
+-keep class android.net.** {*;}
+-keep class com.android.internal.http.multipart.** {*;}
+-keep class se.emilsjolander.stickylistheaders.** {*;}
+-keep class com.alipay.** {*;}
+-dontwarn com.alipay.**
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
+}
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
 #}
 
-# Uncomment this to preserve the line number information for
-# debugging stack traces.
-#-keepattributes SourceFile,LineNumberTable
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
+
+###############################
+#
+# 自己的代码
+# 引用的其他Module可以直接在app的这个混淆文件里配置
+#
+###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
+#实体类
+-keep class com.modular.booking.model.** {*;}
+-keep class com.uas.appcontact.model.** {*;}
+-keep class com.modular.login.model.** {*;}
+-keep class com.modular.booking.model.** {*;}
+-keep class com.uas.appme.settings.model.** {*;}
+-keep class com.modular.appmessages.model.** {*;}
+-keep class com.modular.apputils.model.** {*;}
+-keep class com.uas.appworks.model.** {*;}
+-keep class com.xzjmyk.pm.activity.bean.** {*;}
+-keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
+#自定义控件
+-keep class com.core.widget.** {*;}
+-keep class com.modular.booking.widget.** {*;}
+-keep class com.uas.appcontact.ui.widget.stickylistheaders.** {*;}
+-keep class com.uas.appme.widget.** {*;}
+-keep class com.modular.appmessages.widget.** {*;}
+-keep class com.modular.apputils.widget.** {*;}
+-keep class com.uas.appworks.widget.** {*;}
+-keep class com.ipaulpro.afilechooser.** {*;}
+-keep class com.roamer.slidelistview.** {*;}
+-keep class com.xzjmyk.pm.activity.view.** {*;}
+-keep class com.xzjmyk.pm.activity.video.** {*;}
+-keep class com.modular.apputils.utils.** {*;}
+#与js互相调用的类
+-keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 
-# If you keep the line number information, uncomment this to
-# hide the original source file name.
-#-renamesourcefileattribute SourceFile

+ 172 - 10
app_modular/apptasks/proguard-rules.pro

@@ -24,7 +24,10 @@
 # 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
 -dontpreverify
 # 保留Annotation不混淆
--keepattributes *Annotation*,InnerClasses
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
 # 避免混淆泛型
 -keepattributes Signature
 # 抛出异常时保留代码行号
@@ -39,6 +42,7 @@
 -keep public class * extends android.app.Activity
 -keep public class * extends android.app.Application
 -keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
 -keep public class * extends android.content.BroadcastReceiver
 -keep public class * extends android.content.ContentProvider
 -keep public class * extends android.app.backup.BackupAgentHelper
@@ -130,7 +134,7 @@
 #
 ###############################
 -keep class com.baidu.** {*;}
--keep class vi.com.** {*;}
+-keep class mapsdkvi.com.** {*;}
 -dontwarn com.baidu.**
 
 -keep class com.uuzuche.lib_zxing.** {*;}
@@ -153,28 +157,118 @@
 -keep class com.facebook.stetho.** {*;}
 -keep class javax.annotation.** {*;}
 -keep class com.lidroid.xutils.** {*;}
--keep class okhttp3.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
 -keep class okio.** {*;}
 -dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
 -keep class org.apache.** {*;}
 -keep class org.junit.** {*;}
 -keep class junit.** {*;}
 -keep class org.hamcrest.** {*;}
 
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
+
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
+
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
 -keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
 -keep class com.google.gson.** {*;}
 -keep class com.google.gson.stream.** {*;}
 -keep class com.android.volley.** {*;}
 
--keep class butterknife.** {*;}
+#butterknife
+-keep class butterknife.** { *; }
 -dontwarn butterknife.internal.**
 -keep class **$$ViewBinder { *; }
-
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
 -keep class cat.ereza.customactivityoncrash.** {*;}
 -keep class uk.co.senab.photoview.** {*;}
 -keep class com.flipboard.bottomsheet.** {*;}
 -keep class flipboard.bottomsheet.** {*;}
+
+#glide
 -keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
 -keep class com.chad.library.** {*;}
 -keep class com.tonicartos.widget.stickygridheaders.** {*;}
 -keep class com.orhanobut.logger.** {*;}
@@ -182,22 +276,67 @@
 -keep class com.scwang.smartrefresh.** {*;}
 -keep class com.squareup.** {*;}
 -keep class com.tencent.** {*;}
--keep class com.umeng.analytics.** {*;}
 -keep class com.youth.banner.** {*;}
 -keep class de.hdodenhof.circleimageview.** {*;}
--keep class rx.** {*;}
+
 -keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
 -keep class me.gujun.android.taggroup.** {*;}
 -keep class me.zhanghai.android.materialprogressbar.** {*;}
 -keep class android.net.** {*;}
 -keep class com.android.internal.http.multipart.** {*;}
--keep class pl.droidsonroids.gif.** {*;}
 -keep class se.emilsjolander.stickylistheaders.** {*;}
 -keep class com.alipay.** {*;}
 -dontwarn com.alipay.**
--keep class com.tencent.mm.sdk.** {
-   *;
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
 }
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
+#}
+
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
 
 ###############################
 #
@@ -205,6 +344,8 @@
 # 引用的其他Module可以直接在app的这个混淆文件里配置
 #
 ###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
 #实体类
 -keep class com.modular.booking.model.** {*;}
 -keep class com.uas.appcontact.model.** {*;}
@@ -216,6 +357,10 @@
 -keep class com.uas.appworks.model.** {*;}
 -keep class com.xzjmyk.pm.activity.bean.** {*;}
 -keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
 #自定义控件
 -keep class com.core.widget.** {*;}
 -keep class com.modular.booking.widget.** {*;}
@@ -231,4 +376,21 @@
 -keep class com.modular.apputils.utils.** {*;}
 #与js互相调用的类
 -keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 

+ 172 - 10
app_modular/apputils/proguard-rules.pro

@@ -24,7 +24,10 @@
 # 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
 -dontpreverify
 # 保留Annotation不混淆
--keepattributes *Annotation*,InnerClasses
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
 # 避免混淆泛型
 -keepattributes Signature
 # 抛出异常时保留代码行号
@@ -39,6 +42,7 @@
 -keep public class * extends android.app.Activity
 -keep public class * extends android.app.Application
 -keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
 -keep public class * extends android.content.BroadcastReceiver
 -keep public class * extends android.content.ContentProvider
 -keep public class * extends android.app.backup.BackupAgentHelper
@@ -130,7 +134,7 @@
 #
 ###############################
 -keep class com.baidu.** {*;}
--keep class vi.com.** {*;}
+-keep class mapsdkvi.com.** {*;}
 -dontwarn com.baidu.**
 
 -keep class com.uuzuche.lib_zxing.** {*;}
@@ -153,28 +157,118 @@
 -keep class com.facebook.stetho.** {*;}
 -keep class javax.annotation.** {*;}
 -keep class com.lidroid.xutils.** {*;}
--keep class okhttp3.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
 -keep class okio.** {*;}
 -dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
 -keep class org.apache.** {*;}
 -keep class org.junit.** {*;}
 -keep class junit.** {*;}
 -keep class org.hamcrest.** {*;}
 
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
+
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
+
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
 -keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
 -keep class com.google.gson.** {*;}
 -keep class com.google.gson.stream.** {*;}
 -keep class com.android.volley.** {*;}
 
--keep class butterknife.** {*;}
+#butterknife
+-keep class butterknife.** { *; }
 -dontwarn butterknife.internal.**
 -keep class **$$ViewBinder { *; }
-
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
 -keep class cat.ereza.customactivityoncrash.** {*;}
 -keep class uk.co.senab.photoview.** {*;}
 -keep class com.flipboard.bottomsheet.** {*;}
 -keep class flipboard.bottomsheet.** {*;}
+
+#glide
 -keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
 -keep class com.chad.library.** {*;}
 -keep class com.tonicartos.widget.stickygridheaders.** {*;}
 -keep class com.orhanobut.logger.** {*;}
@@ -182,22 +276,67 @@
 -keep class com.scwang.smartrefresh.** {*;}
 -keep class com.squareup.** {*;}
 -keep class com.tencent.** {*;}
--keep class com.umeng.analytics.** {*;}
 -keep class com.youth.banner.** {*;}
 -keep class de.hdodenhof.circleimageview.** {*;}
--keep class rx.** {*;}
+
 -keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
 -keep class me.gujun.android.taggroup.** {*;}
 -keep class me.zhanghai.android.materialprogressbar.** {*;}
 -keep class android.net.** {*;}
 -keep class com.android.internal.http.multipart.** {*;}
--keep class pl.droidsonroids.gif.** {*;}
 -keep class se.emilsjolander.stickylistheaders.** {*;}
 -keep class com.alipay.** {*;}
 -dontwarn com.alipay.**
--keep class com.tencent.mm.sdk.** {
-   *;
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
 }
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
+#}
+
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
 
 ###############################
 #
@@ -205,6 +344,8 @@
 # 引用的其他Module可以直接在app的这个混淆文件里配置
 #
 ###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
 #实体类
 -keep class com.modular.booking.model.** {*;}
 -keep class com.uas.appcontact.model.** {*;}
@@ -216,6 +357,10 @@
 -keep class com.uas.appworks.model.** {*;}
 -keep class com.xzjmyk.pm.activity.bean.** {*;}
 -keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
 #自定义控件
 -keep class com.core.widget.** {*;}
 -keep class com.modular.booking.widget.** {*;}
@@ -231,4 +376,21 @@
 -keep class com.modular.apputils.utils.** {*;}
 #与js互相调用的类
 -keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 

+ 8 - 5
app_modular/apputils/src/main/AndroidManifest.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.modular.apputils">
+<manifest package="com.modular.apputils"
+          xmlns:android="http://schemas.android.com/apk/res/android">
 
     <application
         android:allowBackup="true"
@@ -42,7 +42,7 @@
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
         </activity>
-        <activity android:name=".IntentUrlActivity" >
+        <activity android:name=".IntentUrlActivity">
             <intent-filter>
                 <action android:name="android.intent.action.VIEW" />
 
@@ -54,8 +54,11 @@
                     android:scheme="app"></data>
             </intent-filter>
         </activity>
-    <activity android:name=".activity.PDFViewActivity"
-        android:label="PDF预览"/>
+        <activity
+            android:name=".activity.PDFViewActivity"
+            android:label="PDF预览" />
+
+        <service android:name=".service.CommonIntentService" />
     </application>
 
 </manifest>

+ 124 - 0
app_modular/apputils/src/main/java/com/modular/apputils/service/CommonIntentService.java

@@ -0,0 +1,124 @@
+package com.modular.apputils.service;
+
+import android.app.IntentService;
+import android.content.Context;
+import android.content.Intent;
+import android.support.annotation.Nullable;
+import android.text.TextUtils;
+
+import com.core.app.Constants;
+import com.core.net.ProgressDownloader;
+import com.core.net.ProgressResponseBody;
+import com.core.utils.CommonUtil;
+
+import java.io.File;
+import java.io.IOException;
+
+import okhttp3.Call;
+import okhttp3.Response;
+
+/**
+ * @author RaoMeng
+ * @describe
+ * @date 2018/6/7 9:37
+ */
+public class CommonIntentService extends IntentService {
+    private static final String SERVICE_NAME = "CommonIntentService";
+
+    /**
+     * action
+     */
+    private static final String ACTION_DOWNLOAD_SPLASH = "action_download_splash";
+
+    /**
+     * extras
+     */
+    private static final String EXTRA_STRING1 = "extra_string1";
+
+    private ProgressDownloader mDownloader;
+
+    public CommonIntentService() {
+        super(SERVICE_NAME);
+    }
+
+    public static void downloadSplash(Context context, String resUrl) {
+        Intent intent = new Intent(context, CommonIntentService.class);
+        intent.setAction(ACTION_DOWNLOAD_SPLASH);
+        intent.putExtra(EXTRA_STRING1, resUrl);
+        context.startService(intent);
+    }
+
+    @Override
+    protected void onHandleIntent(@Nullable Intent intent) {
+        if (intent != null) {
+            String action = intent.getAction();
+            if (TextUtils.isEmpty(action)) {
+                return;
+            }
+            switch (action) {
+                case ACTION_DOWNLOAD_SPLASH:
+                    String resUrl = intent.getStringExtra(EXTRA_STRING1);
+                    if (TextUtils.isEmpty(resUrl)) {
+                        initSplashDir();
+                        CommonUtil.setSharedPreferences(this, Constants.CACHE.CACHE_SPLASH_URL, "");
+                        return;
+                    }
+                    downloadSplashImp(resUrl);
+                    break;
+                default:
+                    break;
+            }
+        }
+    }
+
+    private void downloadSplashImp(final String resUrl) {
+        int dotIndex = resUrl.lastIndexOf(".");
+        if (dotIndex >= 0) {
+            String resExtension = resUrl.substring(dotIndex);
+            File splashFile = new File(Constants.SPLASH_FILE_PATH, Constants.SPLASH_FILE_NAME + resExtension);
+            try {
+                splashFile.createNewFile();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+            mDownloader = new ProgressDownloader(resUrl, splashFile, new ProgressResponseBody.ProgressListener() {
+                @Override
+                public void onPreExecute(long contentLength) {
+
+                }
+
+                @Override
+                public void update(long totalBytes, boolean done) {
+                    if (done) {
+                        if (!TextUtils.isEmpty(resUrl)) {
+                            CommonUtil.setSharedPreferences(CommonIntentService.this, Constants.CACHE.CACHE_SPLASH_URL, resUrl);
+                        }
+                    }
+                }
+            });
+            mDownloader.download(0L, new ProgressDownloader.DownloadCallBack() {
+                @Override
+                public void onFailure(Call call, IOException e) {
+                    initSplashDir();
+                    CommonUtil.setSharedPreferences(CommonIntentService.this, Constants.CACHE.CACHE_SPLASH_URL, "");
+                    downloadSplashImp(resUrl);
+                }
+
+                @Override
+                public void onResponse(Call call, Response response) {
+
+                }
+            });
+        }
+    }
+
+    private void initSplashDir() {
+        File directory = new File(Constants.SPLASH_FILE_PATH);
+        if (!directory.exists() && !directory.isDirectory()) {
+            boolean mkdirs = directory.mkdirs();
+        } else {
+            CommonUtil.delAllFile(Constants.SPLASH_FILE_PATH);
+        }
+    }
+
+}

+ 172 - 10
app_modular/appworks/proguard-rules.pro

@@ -24,7 +24,10 @@
 # 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
 -dontpreverify
 # 保留Annotation不混淆
--keepattributes *Annotation*,InnerClasses
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
 # 避免混淆泛型
 -keepattributes Signature
 # 抛出异常时保留代码行号
@@ -39,6 +42,7 @@
 -keep public class * extends android.app.Activity
 -keep public class * extends android.app.Application
 -keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
 -keep public class * extends android.content.BroadcastReceiver
 -keep public class * extends android.content.ContentProvider
 -keep public class * extends android.app.backup.BackupAgentHelper
@@ -130,7 +134,7 @@
 #
 ###############################
 -keep class com.baidu.** {*;}
--keep class vi.com.** {*;}
+-keep class mapsdkvi.com.** {*;}
 -dontwarn com.baidu.**
 
 -keep class com.uuzuche.lib_zxing.** {*;}
@@ -153,28 +157,118 @@
 -keep class com.facebook.stetho.** {*;}
 -keep class javax.annotation.** {*;}
 -keep class com.lidroid.xutils.** {*;}
--keep class okhttp3.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
 -keep class okio.** {*;}
 -dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
 -keep class org.apache.** {*;}
 -keep class org.junit.** {*;}
 -keep class junit.** {*;}
 -keep class org.hamcrest.** {*;}
 
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
+
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
+
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
 -keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
 -keep class com.google.gson.** {*;}
 -keep class com.google.gson.stream.** {*;}
 -keep class com.android.volley.** {*;}
 
--keep class butterknife.** {*;}
+#butterknife
+-keep class butterknife.** { *; }
 -dontwarn butterknife.internal.**
 -keep class **$$ViewBinder { *; }
-
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
 -keep class cat.ereza.customactivityoncrash.** {*;}
 -keep class uk.co.senab.photoview.** {*;}
 -keep class com.flipboard.bottomsheet.** {*;}
 -keep class flipboard.bottomsheet.** {*;}
+
+#glide
 -keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
 -keep class com.chad.library.** {*;}
 -keep class com.tonicartos.widget.stickygridheaders.** {*;}
 -keep class com.orhanobut.logger.** {*;}
@@ -182,22 +276,67 @@
 -keep class com.scwang.smartrefresh.** {*;}
 -keep class com.squareup.** {*;}
 -keep class com.tencent.** {*;}
--keep class com.umeng.analytics.** {*;}
 -keep class com.youth.banner.** {*;}
 -keep class de.hdodenhof.circleimageview.** {*;}
--keep class rx.** {*;}
+
 -keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
 -keep class me.gujun.android.taggroup.** {*;}
 -keep class me.zhanghai.android.materialprogressbar.** {*;}
 -keep class android.net.** {*;}
 -keep class com.android.internal.http.multipart.** {*;}
--keep class pl.droidsonroids.gif.** {*;}
 -keep class se.emilsjolander.stickylistheaders.** {*;}
 -keep class com.alipay.** {*;}
 -dontwarn com.alipay.**
--keep class com.tencent.mm.sdk.** {
-   *;
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
 }
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
+#}
+
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
 
 ###############################
 #
@@ -205,6 +344,8 @@
 # 引用的其他Module可以直接在app的这个混淆文件里配置
 #
 ###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
 #实体类
 -keep class com.modular.booking.model.** {*;}
 -keep class com.uas.appcontact.model.** {*;}
@@ -216,6 +357,10 @@
 -keep class com.uas.appworks.model.** {*;}
 -keep class com.xzjmyk.pm.activity.bean.** {*;}
 -keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
 #自定义控件
 -keep class com.core.widget.** {*;}
 -keep class com.modular.booking.widget.** {*;}
@@ -231,4 +376,21 @@
 -keep class com.modular.apputils.utils.** {*;}
 #与js互相调用的类
 -keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 

+ 0 - 2
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/WorkReportAddActivity.java

@@ -31,7 +31,6 @@ import com.common.data.StringUtil;
 import com.core.app.Constants;
 import com.core.app.MyApplication;
 import com.core.base.BaseActivity;
-import com.core.base.view.AndroidBug5497Workaround;
 import com.core.model.SelectBean;
 import com.core.net.http.ViewUtil;
 import com.core.utils.CommonUtil;
@@ -302,7 +301,6 @@ public class WorkReportAddActivity extends BaseActivity implements View.OnClickL
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_work_report_add);
-        AndroidBug5497Workaround.assistActivity(this);
         Intent intent = getIntent();
         if (intent != null) {
             mReportType = intent.getIntExtra("report_type", Constants.WORK_REPORT_DAY);

+ 53 - 0
app_modular/appworks/src/main/java/com/uas/appworks/activity/B2BBusinessMainActivity.java

@@ -1,5 +1,6 @@
 package com.uas.appworks.activity;
 
+import android.content.Context;
 import android.content.Intent;
 import android.support.v7.app.ActionBar;
 import android.support.v7.widget.LinearLayoutManager;
@@ -15,6 +16,7 @@ import com.afollestad.materialdialogs.MaterialDialog;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.bumptech.glide.Glide;
 import com.chad.library.adapter.base.BaseQuickAdapter;
 import com.common.LogUtil;
 import com.common.data.DateFormatUtil;
@@ -39,6 +41,9 @@ import com.uas.appworks.adapter.B2bBusinessListAdapter;
 import com.uas.appworks.model.bean.B2BBusinessListBean;
 import com.uas.appworks.model.bean.B2BCompanyBean;
 import com.uas.appworks.presenter.WorkPlatPresenter;
+import com.youth.banner.Banner;
+import com.youth.banner.listener.OnBannerListener;
+import com.youth.banner.loader.ImageLoader;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -61,6 +66,7 @@ public class B2BBusinessMainActivity extends BaseMVPActivity<WorkPlatPresenter>
     private TextView mPurchaseOrderAllTv, mCustomerInquiryAllTv, mPublicInquiryAllTv, mAccountSureTextView, mAccountCancelTextView;
     private RecyclerView mPurchaseOrderRv, mCustomerInquiryRv, mPublicInquiryRv, mAccountRecyclerView;
     private MaterialDialog mAccountDialog;
+    private Banner mHeaderBanner;
 
     private B2BCompanyBean mB2BCompanyBean;
     private SpanUtils mSpanUtils;
@@ -71,6 +77,18 @@ public class B2BBusinessMainActivity extends BaseMVPActivity<WorkPlatPresenter>
     private boolean isPurchaseSuccess, isCustomerSuccess, isPublicSuccess;
     private int mSelectPosition = -1;
 
+    @Override
+    protected void onStart() {
+        super.onStart();
+        mHeaderBanner.startAutoPlay();
+    }
+
+    @Override
+    protected void onStop() {
+        super.onStop();
+        mHeaderBanner.stopAutoPlay();
+    }
+
     @Override
     protected int getLayout() {
         return R.layout.activity_b2b_business_main;
@@ -102,6 +120,15 @@ public class B2BBusinessMainActivity extends BaseMVPActivity<WorkPlatPresenter>
         mCustomerInquiryRv = $(R.id.b2b_business_main_customer_inquiry_rv);
         mPublicInquiryAllTv = $(R.id.b2b_business_main_public_inquiry_all_tv);
         mPublicInquiryRv = $(R.id.b2b_business_main_public_inquiry_rv);
+        mHeaderBanner = $(R.id.b2b_business_main_header_banner);
+        mHeaderBanner.setImageLoader(new ImageLoader() {
+            @Override
+            public void displayImage(Context context, Object path, ImageView imageView) {
+                imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
+                Glide.with(context).load(path).into(imageView);
+//                imageView.setImageResource((Integer) path);
+            }
+        });
 
         View accountView = View.inflate(mContext, R.layout.pop_b2b_change_account, null);
         mAccountRecyclerView = (RecyclerView) accountView.findViewById(R.id.b2b_change_account_rv);
@@ -157,6 +184,25 @@ public class B2BBusinessMainActivity extends BaseMVPActivity<WorkPlatPresenter>
         mAccountSureTextView.setOnClickListener(this);
         mAccountCancelTextView.setOnClickListener(this);
 
+        mHeaderBanner.setOnBannerListener(new OnBannerListener() {
+            @Override
+            public void OnBannerClick(int position) {
+                switch (position) {
+                    case 0:
+                        startActivity(PurchaseOrderListActivity.class);
+                        break;
+                    case 1:
+                        startActivity(CustomerInquiryListActivity.class);
+                        break;
+                    case 2:
+                        startActivity(PublicInquiryListActivity.class);
+                        break;
+                    default:
+                        break;
+                }
+            }
+        });
+
         mRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
             @Override
             public void onRefresh(RefreshLayout refreshLayout) {
@@ -235,6 +281,13 @@ public class B2BBusinessMainActivity extends BaseMVPActivity<WorkPlatPresenter>
             mCompanyNameTextView.setText(companyName);
         }
 
+        List<Integer> headerImages = new ArrayList<>();
+        headerImages.add(R.drawable.ic_b2b_header_purchase);
+        headerImages.add(R.drawable.ic_b2b_header_customer);
+        headerImages.add(R.drawable.ic_b2b_header_public);
+        mHeaderBanner.setImages(headerImages);
+        mHeaderBanner.start();
+
         if (CommonUtil.isNetWorkConnected(mContext)) {
             showLoading(null);
             getListData(OBTAIN_PURCHASE_ORDER_LIST);

BIN
app_modular/appworks/src/main/res/drawable-hdpi/ic_b2b_header_customer.png


BIN
app_modular/appworks/src/main/res/drawable-hdpi/ic_b2b_header_public.png


BIN
app_modular/appworks/src/main/res/drawable-hdpi/ic_b2b_header_purchase.png


BIN
app_modular/appworks/src/main/res/drawable-xhdpi/ic_b2b_header_customer.png


BIN
app_modular/appworks/src/main/res/drawable-xhdpi/ic_b2b_header_public.png


BIN
app_modular/appworks/src/main/res/drawable-xhdpi/ic_b2b_header_purchase.png


BIN
app_modular/appworks/src/main/res/drawable-xxhdpi/ic_b2b_header_customer.png


BIN
app_modular/appworks/src/main/res/drawable-xxhdpi/ic_b2b_header_public.png


BIN
app_modular/appworks/src/main/res/drawable-xxhdpi/ic_b2b_header_purchase.png


+ 10 - 1
app_modular/appworks/src/main/res/layout/activity_b2b_business_main.xml

@@ -30,7 +30,8 @@
                 android:layout_height="100dp"
                 android:background="@color/white"
                 android:gravity="center_vertical"
-                android:orientation="horizontal">
+                android:orientation="horizontal"
+                android:visibility="gone">
 
                 <LinearLayout
                     android:id="@+id/b2b_business_main_purchase_order_iv"
@@ -118,6 +119,14 @@
 
             </LinearLayout>
 
+            <com.youth.banner.Banner
+                android:id="@+id/b2b_business_main_header_banner"
+                android:layout_width="match_parent"
+                android:layout_height="140dp"
+                app:delay_time="3000"
+                app:is_auto_play="true"
+                app:scroll_time="800" />
+
             <LinearLayout
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"

+ 2 - 2
version.gradle

@@ -36,7 +36,7 @@ ext {
             leakcanaryVersion                   : '1.5',
             materialDialogsVersion              : '0.9.0.2',
             stickyGridHeadersVersion            : '1.0.1',
-            stickyListHeadersVersion            : '2.7.0',
+            stickyListHeadersVersion            : 'master-SNAPSHOT',
             activityOnCrashVersion              : '1.5.0',
             analyticsVersion                    : 'latest.integration',
             tagGroupVersion                     : '1.4@aar',
@@ -89,7 +89,7 @@ ext {
             tagGroup                     : 'me.gujun.android.taggroup:library:' + depsVersion.tagGroupVersion,
             analytics                    : 'com.umeng.analytics:analytics:' + depsVersion.analyticsVersion,
             activityOnCrash              : 'cat.ereza:customactivityoncrash:' + depsVersion.activityOnCrashVersion,
-            stickyListHeaders            : 'se.emilsjolander:stickylistheaders:' + depsVersion.stickyListHeadersVersion,
+            stickyListHeaders            : 'com.github.mtotschnig:StickyListHeaders:' + depsVersion.stickyListHeadersVersion,
             stickyGridHeaders            : 'com.github.TonicArtos:StickyGridHeaders:' + depsVersion.stickyGridHeadersVersion,
             materialDialogs              : 'com.afollestad.material-dialogs:core:' + depsVersion.materialDialogsVersion,
             leakcanary                   : 'com.squareup.leakcanary:leakcanary-android:' + depsVersion.leakcanaryVersion,