Browse Source

1:keep不可混淆的类;
2:增加主动寻找View的代码样例;

guiying712 8 years ago
parent
commit
f08a03744d
18 changed files with 180 additions and 15 deletions
  1. 2 0
      lib_common/src/main/java/com/guiying/module/common/base/BaseActionBarActivity.java
  2. 2 0
      lib_common/src/main/java/com/guiying/module/common/base/BaseActivity.java
  3. 6 6
      lib_common/src/main/java/com/guiying/module/common/base/BaseApplication.java
  4. 8 0
      lib_common/src/main/java/com/guiying/module/common/base/BaseFragment.java
  5. 9 0
      lib_common/src/main/java/com/guiying/module/common/base/BasePresenter.java
  6. 10 0
      lib_common/src/main/java/com/guiying/module/common/base/BaseView.java
  7. 2 0
      lib_common/src/main/java/com/guiying/module/common/base/ClassUtils.java
  8. 4 1
      lib_common/src/main/java/com/guiying/module/common/base/IApplicationDelegate.java
  9. 21 0
      lib_common/src/main/java/com/guiying/module/common/base/IViewDelegate.java
  10. 3 0
      lib_common/src/main/java/com/guiying/module/common/base/InfoCallback.java
  11. 2 0
      lib_common/src/main/java/com/guiying/module/common/base/ViewManager.java
  12. 10 0
      module_girls/src/main/java/com/guiying/module/girls/GirlsFragment.java
  13. 7 3
      module_girls/src/main/java/com/guiying/module/girls/MyDelegate.java
  14. 28 0
      module_girls/src/main/java/com/guiying/module/girls/MyViewDelegate.java
  15. 20 2
      module_main/src/main/java/com/guiying/module/main/BottomNavigationActivity.java
  16. 7 3
      module_news/src/main/java/com/guiying/module/news/MyDelegate.java
  17. 28 0
      module_news/src/main/java/com/guiying/module/news/MyViewDelegate.java
  18. 11 0
      module_news/src/main/java/com/guiying/module/news/NewsFragment.java

+ 2 - 0
lib_common/src/main/java/com/guiying/module/common/base/BaseActionBarActivity.java

@@ -8,6 +8,7 @@
 package com.guiying.module.common.base;
 
 import android.os.Bundle;
+import android.support.annotation.Keep;
 import android.support.annotation.StringRes;
 import android.support.v7.app.ActionBar;
 
@@ -22,6 +23,7 @@ import com.guiying.module.common.R;
  * @version V1.2.0
  * @name BaseActionBarActivity
  */
+@Keep
 public abstract class BaseActionBarActivity extends BaseActivity {
 
     /*默认的ActionBar*/

+ 2 - 0
lib_common/src/main/java/com/guiying/module/common/base/BaseActivity.java

@@ -2,6 +2,7 @@ package com.guiying.module.common.base;
 
 import android.os.Bundle;
 import android.support.annotation.IdRes;
+import android.support.annotation.Keep;
 import android.support.v7.app.ActionBar;
 import android.support.v7.app.AppCompatActivity;
 import android.support.v7.widget.Toolbar;
@@ -17,6 +18,7 @@ import com.guiying.module.common.utils.Utils;
  * @version V1.0.0
  * @name BaseActivity
  */
+@Keep
 public abstract class BaseActivity extends AppCompatActivity {
 
 

+ 6 - 6
lib_common/src/main/java/com/guiying/module/common/base/BaseApplication.java

@@ -24,7 +24,7 @@ public class BaseApplication extends Application {
 
     private static BaseApplication sInstance;
 
-    private List<ApplicationDelegate> mAppDelegateList;
+    private List<IApplicationDelegate> mAppDelegateList;
 
 
     public static BaseApplication getIns() {
@@ -37,8 +37,8 @@ public class BaseApplication extends Application {
         sInstance = this;
         Logger.init("pattern").logLevel(LogLevel.FULL);
         Utils.init(this);
-        mAppDelegateList = ClassUtils.getObjectsWithInterface(this, ApplicationDelegate.class, ROOT_PACKAGE);
-        for (ApplicationDelegate delegate : mAppDelegateList) {
+        mAppDelegateList = ClassUtils.getObjectsWithInterface(this, IApplicationDelegate.class, ROOT_PACKAGE);
+        for (IApplicationDelegate delegate : mAppDelegateList) {
             delegate.onCreate();
         }
 
@@ -47,7 +47,7 @@ public class BaseApplication extends Application {
     @Override
     public void onTerminate() {
         super.onTerminate();
-        for (ApplicationDelegate delegate : mAppDelegateList) {
+        for (IApplicationDelegate delegate : mAppDelegateList) {
             delegate.onTerminate();
         }
     }
@@ -56,7 +56,7 @@ public class BaseApplication extends Application {
     @Override
     public void onLowMemory() {
         super.onLowMemory();
-        for (ApplicationDelegate delegate : mAppDelegateList) {
+        for (IApplicationDelegate delegate : mAppDelegateList) {
             delegate.onLowMemory();
         }
     }
@@ -64,7 +64,7 @@ public class BaseApplication extends Application {
     @Override
     public void onTrimMemory(int level) {
         super.onTrimMemory(level);
-        for (ApplicationDelegate delegate : mAppDelegateList) {
+        for (IApplicationDelegate delegate : mAppDelegateList) {
             delegate.onTrimMemory(level);
         }
     }

+ 8 - 0
lib_common/src/main/java/com/guiying/module/common/base/BaseFragment.java

@@ -2,10 +2,18 @@ package com.guiying.module.common.base;
 
 import android.content.Context;
 import android.support.annotation.IdRes;
+import android.support.annotation.Keep;
 import android.support.v4.app.Fragment;
 
 import com.guiying.module.common.utils.Utils;
 
+/**
+ * <p>Fragment的基类</p>
+ *
+ * @author 张华洋
+ * @name BaseFragment
+ */
+@Keep
 public abstract class BaseFragment extends Fragment {
 
     protected BaseActivity mActivity;

+ 9 - 0
lib_common/src/main/java/com/guiying/module/common/base/BasePresenter.java

@@ -1,5 +1,14 @@
 package com.guiying.module.common.base;
 
+import android.support.annotation.Keep;
+
+/**
+ * <p>Presenter的基类</p>
+ *
+ * @author 张华洋
+ * @name BasePresenter
+ */
+@Keep
 public interface BasePresenter {
 
     void start();

+ 10 - 0
lib_common/src/main/java/com/guiying/module/common/base/BaseView.java

@@ -1,5 +1,15 @@
 package com.guiying.module.common.base;
 
+
+import android.support.annotation.Keep;
+
+/**
+ * <p>View接口的基类</p>
+ *
+ * @author 张华洋
+ * @name BaseView
+ */
+@Keep
 public interface BaseView<T> {
 
     void setPresenter(T presenter);

+ 2 - 0
lib_common/src/main/java/com/guiying/module/common/base/ClassUtils.java

@@ -5,6 +5,7 @@ import android.content.SharedPreferences;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.os.Build;
+import android.support.annotation.Keep;
 import android.util.Log;
 
 import com.guiying.module.common.utils.Utils;
@@ -25,6 +26,7 @@ import dalvik.system.DexFile;
  * Copy from galaxy sdk ${com.alibaba.android.galaxy.utils.ClassUtils}
  * Scanner, find out class with any conditions, copy from google source code.
  */
+@Keep
 public class ClassUtils {
     private static final String TAG = "ClassUtils";
 

+ 4 - 1
lib_common/src/main/java/com/guiying/module/common/base/ApplicationDelegate.java → lib_common/src/main/java/com/guiying/module/common/base/IApplicationDelegate.java

@@ -1,5 +1,7 @@
 package com.guiying.module.common.base;
 
+import android.support.annotation.Keep;
+
 /**
  * <p>类说明</p>
  *
@@ -7,7 +9,8 @@ package com.guiying.module.common.base;
  * @version V2.8.3
  * @name ApplicationDelegate
  */
-public interface ApplicationDelegate {
+@Keep
+public interface IApplicationDelegate {
 
     void onCreate();
 

+ 21 - 0
lib_common/src/main/java/com/guiying/module/common/base/IViewDelegate.java

@@ -0,0 +1,21 @@
+package com.guiying.module.common.base;
+
+
+import android.support.annotation.Keep;
+import android.view.View;
+
+/**
+ * <p>类说明</p>
+ *
+ * @author 张华洋 2018/1/4 22:10
+ * @version V2.8.3
+ * @name IFragmentDelegate
+ */
+@Keep
+public interface IViewDelegate {
+
+    BaseFragment getFragment(String name);
+
+    View getView(String name);
+
+}

+ 3 - 0
lib_common/src/main/java/com/guiying/module/common/base/InfoCallback.java

@@ -1,5 +1,7 @@
 package com.guiying.module.common.base;
 
+import android.support.annotation.Keep;
+
 /**
  * <p>数据回调接口</p>
  *
@@ -7,6 +9,7 @@ package com.guiying.module.common.base;
  * @version V1.2.0
  * @name InfoCallback
  */
+@Keep
 public interface InfoCallback<T> {
 
     void onSuccess(T info);

+ 2 - 0
lib_common/src/main/java/com/guiying/module/common/base/ViewManager.java

@@ -2,6 +2,7 @@ package com.guiying.module.common.base;
 
 import android.app.Activity;
 import android.content.Context;
+import android.support.annotation.Keep;
 import android.util.Log;
 
 import java.util.ArrayList;
@@ -15,6 +16,7 @@ import java.util.Stack;
  * @version V1.1
  * @name ViewManager
  */
+@Keep
 public class ViewManager {
 
     private static Stack<Activity> activityStack;

+ 10 - 0
module_girls/src/main/java/com/guiying/module/girls/GirlsFragment.java

@@ -15,6 +15,16 @@ import com.guiying.module.common.base.BaseFragment;
  */
 public class GirlsFragment extends BaseFragment {
 
+    /**
+     * Use this factory method to create a new instance of
+     * this fragment using the provided parameters.
+     *
+     * @return A new instance of fragment GirlsFragment.
+     */
+    public static GirlsFragment newInstance() {
+        return new GirlsFragment();
+    }
+
 
     public GirlsFragment() {
         // Required empty public constructor

+ 7 - 3
module_girls/src/main/java/com/guiying/module/girls/MyDelegate.java

@@ -1,6 +1,8 @@
 package com.guiying.module.girls;
 
-import com.guiying.module.common.base.ApplicationDelegate;
+import android.support.annotation.Keep;
+
+import com.guiying.module.common.base.IApplicationDelegate;
 import com.guiying.module.common.base.ViewManager;
 
 /**
@@ -10,11 +12,13 @@ import com.guiying.module.common.base.ViewManager;
  * @version V2.8.3
  * @name MyDelegate
  */
-public class MyDelegate implements ApplicationDelegate {
+@Keep
+public class MyDelegate implements IApplicationDelegate {
 
     @Override
     public void onCreate() {
-        ViewManager.getInstance().addFragment(0, new GirlsFragment());
+        //主动添加
+        ViewManager.getInstance().addFragment(0, GirlsFragment.newInstance());
     }
 
     @Override

+ 28 - 0
module_girls/src/main/java/com/guiying/module/girls/MyViewDelegate.java

@@ -0,0 +1,28 @@
+package com.guiying.module.girls;
+
+import android.support.annotation.Keep;
+import android.view.View;
+
+import com.guiying.module.common.base.BaseFragment;
+import com.guiying.module.common.base.IViewDelegate;
+
+/**
+ * <p>类说明</p>
+ *
+ * @author 张华洋 2018/1/4 22:16
+ * @version V2.8.3
+ * @name MyViewDelegate
+ */
+@Keep
+public class MyViewDelegate implements IViewDelegate {
+
+    @Override
+    public BaseFragment getFragment(String name) {
+        return GirlsFragment.newInstance();
+    }
+
+    @Override
+    public View getView(String name) {
+        return null;
+    }
+}

+ 20 - 2
module_main/src/main/java/com/guiying/module/main/BottomNavigationActivity.java

@@ -8,6 +8,8 @@ import android.view.MenuItem;
 
 import com.guiying.module.common.base.BaseActivity;
 import com.guiying.module.common.base.BaseFragment;
+import com.guiying.module.common.base.ClassUtils;
+import com.guiying.module.common.base.IViewDelegate;
 import com.guiying.module.common.base.ViewManager;
 import com.guiying.module.common.widget.NoScrollViewPager;
 
@@ -39,7 +41,7 @@ public class BottomNavigationActivity extends BaseActivity {
                 mPager.setCurrentItem(1);
                 return true;
             } else if (i == R.id.navigation_notifications) {
-                mPager.setCurrentItem(0);
+                mPager.setCurrentItem(2);
                 return true;
             }
             return false;
@@ -57,7 +59,9 @@ public class BottomNavigationActivity extends BaseActivity {
     }
 
     private void initViewPager() {
-        mFragments = ViewManager.getInstance().getAllFragment();
+        mFragments = ViewManager.getInstance().getAllFragment();//这几个Fragment是主动添加到ViewManager中的
+        BaseFragment newsFragment = getNewsFragment();//主动寻找
+        mFragments.add(newsFragment);
         mPager = (NoScrollViewPager) findViewById(R.id.container_pager);
         mAdapter = new FragmentAdapter(getSupportFragmentManager(), mFragments);
         mPager.setPagerEnabled(false);
@@ -65,4 +69,18 @@ public class BottomNavigationActivity extends BaseActivity {
     }
 
 
+    /**
+     * 在News模块中寻找实现的Fragment
+     *
+     * @return Fragment
+     */
+    private BaseFragment getNewsFragment() {
+        BaseFragment newsFragment = null;
+        List<IViewDelegate> viewDelegates = ClassUtils.getObjectsWithInterface(this, IViewDelegate.class, "com.guiying.module.news");
+        if (viewDelegates != null && !viewDelegates.isEmpty()) {
+            newsFragment = viewDelegates.get(0).getFragment("");
+        }
+        return newsFragment;
+    }
+
 }

+ 7 - 3
module_news/src/main/java/com/guiying/module/news/MyDelegate.java

@@ -1,6 +1,8 @@
 package com.guiying.module.news;
 
-import com.guiying.module.common.base.ApplicationDelegate;
+import android.support.annotation.Keep;
+
+import com.guiying.module.common.base.IApplicationDelegate;
 import com.guiying.module.common.base.ViewManager;
 import com.orhanobut.logger.Logger;
 
@@ -11,12 +13,14 @@ import com.orhanobut.logger.Logger;
  * @version V2.8.3
  * @name MyDelegate
  */
-public class MyDelegate implements ApplicationDelegate {
+@Keep
+public class MyDelegate implements IApplicationDelegate {
 
     @Override
     public void onCreate() {
         Logger.init("pattern");
-        ViewManager.getInstance().addFragment(0, new NewsFragment());
+        //主动添加
+        ViewManager.getInstance().addFragment(0, NewsFragment.newInstance());
     }
 
     @Override

+ 28 - 0
module_news/src/main/java/com/guiying/module/news/MyViewDelegate.java

@@ -0,0 +1,28 @@
+package com.guiying.module.news;
+
+import android.support.annotation.Keep;
+import android.view.View;
+
+import com.guiying.module.common.base.BaseFragment;
+import com.guiying.module.common.base.IViewDelegate;
+
+/**
+ * <p>类说明</p>
+ *
+ * @author 张华洋 2018/1/4 22:16
+ * @version V2.8.3
+ * @name MyViewDelegate
+ */
+@Keep
+public class MyViewDelegate implements IViewDelegate {
+
+    @Override
+    public BaseFragment getFragment(String name) {
+        return NewsFragment.newInstance();
+    }
+
+    @Override
+    public View getView(String name) {
+        return null;
+    }
+}

+ 11 - 0
module_news/src/main/java/com/guiying/module/news/NewsFragment.java

@@ -15,6 +15,17 @@ import com.guiying.module.common.base.BaseFragment;
  */
 public class NewsFragment extends BaseFragment {
 
+    /**
+     * Use this factory method to create a new instance of
+     * this fragment using the provided parameters.
+     *
+     * @return A new instance of fragment NewsFragment.
+     */
+    public static NewsFragment newInstance() {
+        return new NewsFragment();
+    }
+
+
 
     public NewsFragment() {
         // Required empty public constructor