YanYi 6 jaren geleden
bovenliggende
commit
d07feaed90

+ 108 - 0
app/proguard-rules.pro

@@ -19,3 +19,111 @@
 # If you keep the line number information, uncomment this to
 # hide the original source file name.
 #-renamesourcefileattribute SourceFile
+#------------------------基本不用动区域-----------------
+#------------------------基本指令区---------------------
+-dontwarn
+-ignorewarnings
+-optimizationpasses 5
+-dontusemixedcaseclassnames
+-dontskipnonpubliclibraryclasses
+-dontskipnonpubliclibraryclassmembers
+-dontpreverify
+-verbose
+-printmapping proguardMapping.txt
+-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
+-keepattributes *Annotation*,InnerClasses
+-keepattributes Signature
+-keepattributes SourceFile,LineNumberTable
+#=====================================================
+
+
+#----------------------------默认保留区------------------------
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.view.View
+-keep public class com.android.vending.licensing.ILicensingService
+-keep class android.support.** {*;}
+
+-keep public class * extends android.app.Fragment
+-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.content.BroadcastReceiver
+-keep public class * extends android.preference.Preference
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.support.v4.**
+-keep public class * extends android.support.annotation.**
+-keep public class * extends android.support.v7.**
+
+# natvie 方法不混淆
+-keepclasseswithmembernames class * {
+    native <methods>;
+}
+# 这个主要是在layout 中写的onclick方法android:onclick="onClick",不进行混淆
+-keepclassmembers class * extends android.app.Activity{
+    public void *(android.view.View);
+}
+# 枚举类不能被混淆
+-keepclassmembers enum * {
+    public static **[] values();
+    public static ** valueOf(java.lang.String);
+}
+# 所有View的子类及其子类的get、set方法都不进行混淆
+-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;
+    private void writeObject(java.io.ObjectOutputStream);
+    private void readObject(java.io.ObjectInputStream);
+    java.lang.Object writeReplace();
+    java.lang.Object readResolve();
+}
+# 不混淆R类里及其所有内部static类中的所有static变量字段,$是用来分割内嵌类与其母体的标志
+-keep class **.R$* {
+ *;
+}
+# 对于带有回调函数onXXEvent的,不能被混淆
+-keepclassmembers class * {
+    void *(**On*Event);
+}
+
+#(可选)避免Log打印输出
+-assumenosideeffects class android.util.Log {
+   public static *** v(...);
+   public static *** d(...);
+   public static *** i(...);
+   public static *** w(...);
+ }
+#============================================================
+
+#-------------------------------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);
+}
+
+
+
+-keep class com.mylove.** {*;}
+-keep class * extends java.lang.annotation.Annotation { *; }
+-keep interface * extends java.lang.annotation.Annotation { *; }

+ 20 - 0
app/src/main/java/com/mylove/bindviewlib/IndexActivity.java

@@ -0,0 +1,20 @@
+package com.mylove.bindviewlib;
+
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v7.app.AppCompatActivity;
+
+/**
+ * @author YanYi
+ * @date 2019/3/1 17:27
+ * @email ben@yanyi.red
+ * @overview
+ */
+public class IndexActivity extends AppCompatActivity {
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.act_main);
+    }
+
+}

+ 12 - 0
app/src/main/res/layout/act_main.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <Button
+        android:id="@+id/but"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/app_name" />
+</LinearLayout>

+ 33 - 0
viewbind/src/main/java/com/mylove/viewbind/Exceptions.java

@@ -0,0 +1,33 @@
+package com.mylove.viewbind;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @author BenYanYi
+ * @date 2019/01/04 16:44
+ * @email ben@yanyi.red
+ * @overview
+ */
+//@Documented:指明该注解可以用于生成doc
+//@Inherited:该注解可以被自动继承
+//@Retention:指明在什么级别显示该注解:
+//        RetentionPolicy.SOURCE 注解存在于源代码中,编译时会被抛弃
+//        RetentionPolicy.CLASS 注解会被编译到class文件中,但是JVM会忽略
+//        RetentionPolicy.RUNTIME JVM会读取注解,同时会保存到class文件中
+//@Target:指明该注解可以注解的程序范围
+//        ElementType.TYPE 用于类,接口,枚举但不能是注解
+//        ElementType.FIELD 作用于字段,包含枚举值
+//        ElementType.METHOD 作用于方法,不包含构造方法
+//        ElementType.PARAMETER 作用于方法的参数
+//        ElementType.CONSTRUCTOR 作用于构造方法
+//        ElementType.LOCAL_VERIABLE 作用于本地变量或者catch语句
+//        ElementType.ANNOTATION_TYPE 作用于注解
+//        ElementType.PACKAGE 作用于包
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Exceptions {
+
+}

+ 1 - 0
viewbind/src/main/java/com/mylove/viewbind/ViewBind.java

@@ -26,5 +26,6 @@ public class ViewBind {
     private static void bind(ViewInit inject, Object object) {
         ViewInject.injectFiled(inject, object);
         ViewInject.injectClick(inject, object);
+        ViewInject.injectException(inject, object);
     }
 }

+ 17 - 0
viewbind/src/main/java/com/mylove/viewbind/ViewInject.java

@@ -12,6 +12,9 @@ import java.lang.reflect.Method;
  * @overview
  */
 class ViewInject {
+    /**
+     * 控件id反射
+     */
     static void injectFiled(ViewInit inject, Object object) {
         Class<?> aClass = object.getClass();
         Field[] fields = aClass.getDeclaredFields();
@@ -32,6 +35,9 @@ class ViewInject {
         }
     }
 
+    /**
+     * 控件点击事件反射
+     */
     static void injectClick(ViewInit inject, Object object) {
         Class<?> aClass = object.getClass();
         Method[] methods = aClass.getMethods();
@@ -57,4 +63,15 @@ class ViewInject {
             }
         }
     }
+
+    static void injectException(ViewInit inject, Object object) {
+        Class<?> aClass = object.getClass();
+        Method[] methods = aClass.getMethods();
+        for (Method method : methods) {
+            Exceptions exceptions = method.getAnnotation(Exceptions.class);
+            if (exceptions != null) {
+
+            }
+        }
+    }
 }