左晓为主开发手持机充值管理机
zuoxiao
2024-09-10 f0de01d017c0ce0a4954dd1215449ceea05af29b
添加混淆,修复因权限问题的bug
15个文件已修改
779 ■■■■■ 已修改文件
app/build.gradle 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/proguard-rules.pro 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/activity/LoginActivity.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_login.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
baselibrary/build.gradle 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
baselibrary/proguard-rules.pro 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
baselibrary/src/main/java/com/dayu/baselibrary/dao/BaseDaoSingleton.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
henanlibrary/build.gradle 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
henanlibrary/proguard-rules.pro 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
qihealonelibrary/build.gradle 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
qihealonelibrary/proguard-rules.pro 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
qiheonlinelibrary/build.gradle 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
qiheonlinelibrary/proguard-rules.pro 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/RechargeActivity.java 77 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/Constants.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/build.gradle
@@ -16,8 +16,8 @@
        applicationId "com.dayu.recharge"
        minSdk 23
        targetSdk 26
        versionCode 265
        versionName "2.6.5"
        versionCode 266
        versionName "2.6.6"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        ndk {
@@ -28,7 +28,10 @@
    buildTypes {
        release {
            minifyEnabled false
            //表示启用代码混淆。
            minifyEnabled true
            // 表示移除未使用的资源文件。
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
app/proguard-rules.pro
@@ -18,4 +18,129 @@
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
#-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
-keepattributes Exceptions, Signature, InnerClasses
-keepclasseswithmembernames class * { # 保持native方法不被混淆
    native <methods>;
}
-keep class * implements Android.os.Parcelable { # 保持Parcelable不被混淆
    public static final Android.os.Parcelable$Creator *;
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keepattributes *Annotation*        #保持注解
#---------------------------------默认保留区---------------------------------
-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.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
-keep class android.support.** {*;}
-keepclasseswithmembernames class * {
    native <methods>;
}
-keepclassmembers class * extends android.app.Activity{
    public void *(android.view.View);
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-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);
}
-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}
-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();
}
-keep class **.R$* {
 *;
}
-keepclassmembers class * {
    void *(**On*Event);
}
# 移除日志语句
-assumenosideeffects class android.util.Log {
    public static *** d(...);
#    public static *** v(...);
#    public static *** i(...);
#    public static *** w(...);
#    public static *** e(...);
}
#----------------------------------------------------------------------------
-keep public class * extends android.view.View {
}
-keep class **.R$* {*;}
#okhttp
-dontwarn okhttp3.**
-keep class okhttp3.**{*;}
-keep interface okhttp3.**{*;}
#rxjava
-keep public class io.reactivex.android.**{*;}
-keep public class io.reactivex.**{*;}
-keep public class rx.android.**{*;}
-keep public class rx.**{*;}
-keep public class javax.annotation.**{*;}
-keep public class javax.inject.**{*;}
-keep class com.google.gson.** { *; }
#glide
-keep public class com.bumptech.glide.**{*;}
-keep public class com.luck.picture.lib.**{*;}
-keep public class androidx.**{*;}
-keep public class com.bumptech.**{*;}
-keep public class com.scwang.**{*;}
-keep public class kotlin.**{*;}
-keep public class retrofit2.**{*;}
-keep public class okio.**{*;}
-keep public class com.google.**{*;}
# 若Android API 高于27添加以下(不需要/):
-dontwarn com.bumptech.glide.load.resource.bitmap.VideoDecoder
# for DexGuard only
#-keep resource xmlelements manifest/application/meta-data@value=GlideModule
-keep class com.xuexiang.xupdate.entity.** { *; }
# Note: if you use a custom API parser for parsing, you need to add confusion to your custom API entities. Here are the custom API entity obfuscation rules configured in this demo:
-keep class com.xuexiang.xupdatedemo.entity.** { *; }
-keep class com.hjq.permissions.** {*;}
#腾讯相关
-keep class com.qq.** {*;}
-keep class com.tencent.** {*;}
#权限申请
-keep class com.hjq.** {*;}
#列表相关
-keep class com.scwang.** {*;}
#其他
-keep class com.contrarywind.** {*;}
-keep class com.bigkoo.** {*;}
-keep class org.** {*;}
app/src/main/java/com/dayu/recharge/activity/LoginActivity.java
@@ -47,7 +47,6 @@
    ActivityLoginBinding binding;
    PassWordBean passWordBean;
    //    com.dayu.qihealonelibrary.dbBean.PassWordBean
    int clickNumber;
    @Override
@@ -55,12 +54,9 @@
        super.onCreate(savedInstanceState);
        binding = ActivityLoginBinding.inflate(LayoutInflater.from(this));
        setContentView(binding.getRoot());
        getPermission();
        initView();
        if (MyApplication.myApplication.libraryType == BaseCommon.NoLibrary) {
            choesLibrary();
            //没有选择版本先选择版本
        }
        getPermission();
    }
    private void initView() {
@@ -194,6 +190,9 @@
        }
    }
    /**
     * 获取通用权限
     */
    private void getPermission() {
        try {
            XXPermissions.with(this)
@@ -212,6 +211,10 @@
                                            file.mkdirs();
                                        }
                                        passWordBean = BaseDaoSingleton.getInstance(LoginActivity.this).loginPsDao().findFirst();
                                        if (MyApplication.myApplication.libraryType == BaseCommon.NoLibrary) {
                                            choesLibrary();
                                            //没有选择版本先选择版本
                                        }
                                    } catch (Exception e) {
                                        e.printStackTrace();
                                    }
@@ -282,6 +285,7 @@
    }
    long mExitTime;
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
app/src/main/res/layout/activity_login.xml
@@ -45,7 +45,7 @@
                android:hint="请输入账号"
                android:maxLines="1"
                android:singleLine="true"
                android:text="zuoxiao" />
                android:text="" />
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
@@ -66,7 +66,7 @@
                android:layout_height="wrap_content"
                android:hint="初始密码为数字1-6"
                android:inputType="textPassword"
                android:text="ZX@@123qwA" />
                android:text="" />
        </LinearLayout>
baselibrary/build.gradle
@@ -12,7 +12,7 @@
    buildTypes {
        release {
            minifyEnabled false
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
@@ -30,7 +30,7 @@
dependencies {
    implementation fileTree(include: ['*.jar','*.aar'], dir: 'libs')
    implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'androidx.core:core-ktx:1.8.0'
baselibrary/proguard-rules.pro
@@ -18,4 +18,135 @@
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
#-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
-keepattributes Exceptions, Signature, InnerClasses
-keepclasseswithmembernames class * { # 保持native方法不被混淆
    native <methods>;
}
-keep class * implements Android.os.Parcelable { # 保持Parcelable不被混淆
    public static final Android.os.Parcelable$Creator *;
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keepattributes *Annotation*        #保持注解
#---------------------------------默认保留区---------------------------------
-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.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
-keep class android.support.** {*;}
-keepclasseswithmembernames class * {
    native <methods>;
}
-keepclassmembers class * extends android.app.Activity{
    public void *(android.view.View);
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-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);
}
-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}
-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();
}
-keep class **.R$* {
 *;
}
-keepclassmembers class * {
    void *(**On*Event);
}
# 移除日志语句
-assumenosideeffects class android.util.Log {
    public static *** d(...);
#    public static *** v(...);
#    public static *** i(...);
#    public static *** w(...);
#    public static *** e(...);
}
#----------------------------------------------------------------------------
-keep public class * extends android.view.View {
}
-keep class **.R$* {*;}
#okhttp
-dontwarn okhttp3.**
-keep class okhttp3.**{*;}
-keep interface okhttp3.**{*;}
#rxjava
-keep public class io.reactivex.android.**{*;}
-keep public class io.reactivex.**{*;}
-keep public class rx.android.**{*;}
-keep public class rx.**{*;}
-keep public class javax.annotation.**{*;}
-keep public class javax.inject.**{*;}
-keep class com.google.gson.** { *; }
#glide
-keep public class com.bumptech.glide.**{*;}
-keep public class com.luck.picture.lib.**{*;}
-keep public class androidx.**{*;}
-keep public class com.bumptech.**{*;}
-keep public class com.scwang.**{*;}
-keep public class kotlin.**{*;}
-keep public class retrofit2.**{*;}
-keep public class okio.**{*;}
-keep public class com.google.**{*;}
# 若Android API 高于27添加以下(不需要/):
-dontwarn com.bumptech.glide.load.resource.bitmap.VideoDecoder
# for DexGuard only
#-keep resource xmlelements manifest/application/meta-data@value=GlideModule
-keep class com.xuexiang.xupdate.entity.** { *; }
# Note: if you use a custom API parser for parsing, you need to add confusion to your custom API entities. Here are the custom API entity obfuscation rules configured in this demo:
-keep class com.xuexiang.xupdatedemo.entity.** { *; }
-keep class com.hjq.permissions.** {*;}
#腾讯相关
-keep class com.qq.** {*;}
-keep class com.tencent.** {*;}
#权限申请
-keep class com.hjq.** {*;}
#列表相关
-keep class com.scwang.** {*;}
#其他
-keep class com.contrarywind.** {*;}
-keep class com.bigkoo.** {*;}
-keep class org.** {*;}
#当前模块
-keep class com.dayu.baselibrary.R
-keep class com.dayu.baselibrary.activity.** {*;}
-keep class com.dayu.baselibrary.view.** {*;}
-keep class com.dayu.baselibrary.bean.** {*;}
-keep class com.dayu.baselibrary.dbbean.** {*;}
baselibrary/src/main/java/com/dayu/baselibrary/dao/BaseDaoSingleton.java
@@ -2,6 +2,7 @@
import android.content.Context;
import android.os.Environment;
import android.util.Log;
import androidx.room.Room;
henanlibrary/build.gradle
@@ -14,7 +14,7 @@
    buildTypes {
        release {
            minifyEnabled false
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
henanlibrary/proguard-rules.pro
@@ -18,4 +18,136 @@
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
#-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
-keepattributes Exceptions, Signature, InnerClasses
-keepclasseswithmembernames class * { # 保持native方法不被混淆
    native <methods>;
}
-keep class * implements Android.os.Parcelable { # 保持Parcelable不被混淆
    public static final Android.os.Parcelable$Creator *;
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keepattributes *Annotation*        #保持注解
#---------------------------------默认保留区---------------------------------
-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.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
-keep class android.support.** {*;}
-keepclasseswithmembernames class * {
    native <methods>;
}
-keepclassmembers class * extends android.app.Activity{
    public void *(android.view.View);
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-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);
}
-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}
-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();
}
-keep class **.R$* {
 *;
}
-keepclassmembers class * {
    void *(**On*Event);
}
# 移除日志语句
-assumenosideeffects class android.util.Log {
    public static *** d(...);
#    public static *** v(...);
#    public static *** i(...);
#    public static *** w(...);
#    public static *** e(...);
}
#----------------------------------------------------------------------------
-keep public class * extends android.view.View {
}
-keep class **.R$* {*;}
#okhttp
-dontwarn okhttp3.**
-keep class okhttp3.**{*;}
-keep interface okhttp3.**{*;}
#rxjava
-keep public class io.reactivex.android.**{*;}
-keep public class io.reactivex.**{*;}
-keep public class rx.android.**{*;}
-keep public class rx.**{*;}
-keep public class javax.annotation.**{*;}
-keep public class javax.inject.**{*;}
-keep class com.google.gson.** { *; }
#glide
-keep public class com.bumptech.glide.**{*;}
-keep public class com.luck.picture.lib.**{*;}
-keep public class androidx.**{*;}
-keep public class com.bumptech.**{*;}
-keep public class com.scwang.**{*;}
-keep public class kotlin.**{*;}
-keep public class retrofit2.**{*;}
-keep public class okio.**{*;}
-keep public class com.google.**{*;}
# 若Android API 高于27添加以下(不需要/):
-dontwarn com.bumptech.glide.load.resource.bitmap.VideoDecoder
# for DexGuard only
#-keep resource xmlelements manifest/application/meta-data@value=GlideModule
-keep class com.xuexiang.xupdate.entity.** { *; }
# Note: if you use a custom API parser for parsing, you need to add confusion to your custom API entities. Here are the custom API entity obfuscation rules configured in this demo:
-keep class com.xuexiang.xupdatedemo.entity.** { *; }
-keep class com.hjq.permissions.** {*;}
#腾讯相关
-keep class com.qq.** {*;}
-keep class com.tencent.** {*;}
#权限申请
-keep class com.hjq.** {*;}
#列表相关
-keep class com.scwang.** {*;}
#其他
-keep class com.contrarywind.** {*;}
-keep class com.bigkoo.** {*;}
-keep class org.** {*;}
#当前模块
-keep class com.dayu.henanlibrary.view.** {*;}
-keep class com.dayu.henanlibrary.activity.** {*;}
-keep class com.dayu.henanlibrary.card.** {*;}
-keep class com.dayu.henanlibrary.dbBean.** {*;}
-keep class com.dayu.henanlibrary.net.** {*;}
-keep class com.dayu.henanlibrary.socketBean.** {*;}
qihealonelibrary/build.gradle
@@ -14,7 +14,7 @@
    buildTypes {
        release {
            minifyEnabled false
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
qihealonelibrary/proguard-rules.pro
@@ -18,4 +18,135 @@
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
#-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
-keepattributes Exceptions, Signature, InnerClasses
-keepclasseswithmembernames class * { # 保持native方法不被混淆
    native <methods>;
}
-keep class * implements Android.os.Parcelable { # 保持Parcelable不被混淆
    public static final Android.os.Parcelable$Creator *;
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keepattributes *Annotation*        #保持注解
#---------------------------------默认保留区---------------------------------
-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.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
-keep class android.support.** {*;}
-keepclasseswithmembernames class * {
    native <methods>;
}
-keepclassmembers class * extends android.app.Activity{
    public void *(android.view.View);
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-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);
}
-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}
-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();
}
-keep class **.R$* {
 *;
}
-keepclassmembers class * {
    void *(**On*Event);
}
# 移除日志语句
-assumenosideeffects class android.util.Log {
    public static *** d(...);
#    public static *** v(...);
#    public static *** i(...);
#    public static *** w(...);
#    public static *** e(...);
}
#----------------------------------------------------------------------------
-keep public class * extends android.view.View {
}
-keep class **.R$* {*;}
#okhttp
-dontwarn okhttp3.**
-keep class okhttp3.**{*;}
-keep interface okhttp3.**{*;}
#rxjava
-keep public class io.reactivex.android.**{*;}
-keep public class io.reactivex.**{*;}
-keep public class rx.android.**{*;}
-keep public class rx.**{*;}
-keep public class javax.annotation.**{*;}
-keep public class javax.inject.**{*;}
-keep class com.google.gson.** { *; }
#glide
-keep public class com.bumptech.glide.**{*;}
-keep public class com.luck.picture.lib.**{*;}
-keep public class androidx.**{*;}
-keep public class com.bumptech.**{*;}
-keep public class com.scwang.**{*;}
-keep public class kotlin.**{*;}
-keep public class retrofit2.**{*;}
-keep public class okio.**{*;}
-keep public class com.google.**{*;}
# 若Android API 高于27添加以下(不需要/):
-dontwarn com.bumptech.glide.load.resource.bitmap.VideoDecoder
# for DexGuard only
#-keep resource xmlelements manifest/application/meta-data@value=GlideModule
-keep class com.xuexiang.xupdate.entity.** { *; }
# Note: if you use a custom API parser for parsing, you need to add confusion to your custom API entities. Here are the custom API entity obfuscation rules configured in this demo:
-keep class com.xuexiang.xupdatedemo.entity.** { *; }
-keep class com.hjq.permissions.** {*;}
#腾讯相关
-keep class com.qq.** {*;}
-keep class com.tencent.** {*;}
#权限申请
-keep class com.hjq.** {*;}
#列表相关
-keep class com.scwang.** {*;}
#其他
-keep class com.contrarywind.** {*;}
-keep class com.bigkoo.** {*;}
-keep class org.** {*;}
#当前模块
-keep class com.dayu.qihealonelibrary.view.** {*;}
-keep class com.dayu.qihealonelibrary.card.** {*;}
-keep class com.dayu.qihealonelibrary.activity.** {*;}
-keep class com.dayu.qihealonelibrary.dbBean.** {*;}
qiheonlinelibrary/build.gradle
@@ -14,7 +14,7 @@
    buildTypes {
        release {
            minifyEnabled false
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
qiheonlinelibrary/proguard-rules.pro
@@ -19,7 +19,133 @@
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
-keepattributes Exceptions, Signature, InnerClasses
-keepclasseswithmembernames class * { # 保持native方法不被混淆
    native <methods>;
}
-keep class * implements Android.os.Parcelable { # 保持Parcelable不被混淆
    public static final Android.os.Parcelable$Creator *;
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keepattributes *Annotation*        #保持注解
#---------------------------------默认保留区---------------------------------
-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.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
-keep class android.support.** {*;}
-keep class androidx.room.** { *; }
-keep @androidx.room.** class *
-keep interface androidx.room.** { *; }
-keepclasseswithmembernames class * {
    native <methods>;
}
-keepclassmembers class * extends android.app.Activity{
    public void *(android.view.View);
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-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);
}
-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}
-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();
}
-keep class **.R$* {
 *;
}
-keepclassmembers class * {
    void *(**On*Event);
}
# 移除日志语句
-assumenosideeffects class android.util.Log {
    public static *** d(...);
#    public static *** v(...);
#    public static *** i(...);
#    public static *** w(...);
#    public static *** e(...);
}
#----------------------------------------------------------------------------
-keep public class * extends android.view.View {
}
-keep class **.R$* {*;}
#okhttp
-dontwarn okhttp3.**
-keep class okhttp3.**{*;}
-keep interface okhttp3.**{*;}
#rxjava
-keep public class io.reactivex.android.**{*;}
-keep public class io.reactivex.**{*;}
-keep public class rx.android.**{*;}
-keep public class rx.**{*;}
-keep public class javax.annotation.**{*;}
-keep public class javax.inject.**{*;}
-keep class com.google.gson.** { *; }
#glide
-keep public class com.bumptech.glide.**{*;}
-keep public class com.luck.picture.lib.**{*;}
-keep public class androidx.**{*;}
-keep public class com.bumptech.**{*;}
-keep public class com.scwang.**{*;}
-keep public class kotlin.**{*;}
-keep public class retrofit2.**{*;}
-keep public class okio.**{*;}
-keep public class com.google.**{*;}
# 若Android API 高于27添加以下(不需要/):
-dontwarn com.bumptech.glide.load.resource.bitmap.VideoDecoder
# for DexGuard only
#-keep resource xmlelements manifest/application/meta-data@value=GlideModule
-keep class com.xuexiang.xupdate.entity.** { *; }
# Note: if you use a custom API parser for parsing, you need to add confusion to your custom API entities. Here are the custom API entity obfuscation rules configured in this demo:
-keep class com.xuexiang.xupdatedemo.entity.** { *; }
-keep class com.hjq.permissions.** {*;}
#腾讯相关
-keep class com.qq.** {*;}
-keep class com.tencent.** {*;}
#权限申请
-keep class com.hjq.** {*;}
#列表相关
-keep class com.scwang.** {*;}
#其他
-keep class com.contrarywind.** {*;}
-keep class com.bigkoo.** {*;}
-keep class org.** {*;}
#当前模块
-keep class com.dayu.qiheonlinelibrary.view.** {*;}
-keep class com.dayu.qiheonlinelibrary.activity.** {*;}
-keep class com.dayu.qiheonlinelibrary.card.** {*;}
-keep class com.dayu.qiheonlinelibrary.dbBean.** {*;}
qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/RechargeActivity.java
@@ -1,7 +1,5 @@
package com.dayu.qiheonlinelibrary.activity;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
@@ -11,37 +9,25 @@
import android.view.View;
import android.widget.EditText;
import com.dayu.baselibrary.tools.HexUtil;
import com.dayu.baselibrary.utils.DeviceUtils;
import com.dayu.baselibrary.utils.MornyUtil;
import com.dayu.baselibrary.utils.TipUtil;
import com.dayu.baselibrary.utils.ToastUtil;
import com.dayu.baselibrary.view.TipDialog;
import com.dayu.qiheonlinelibrary.QHOnLineApplication;
import com.dayu.qiheonlinelibrary.R;
import com.dayu.qiheonlinelibrary.bean.CardInfoResult;
import com.dayu.qiheonlinelibrary.bean.RechargeResult;
import com.dayu.qiheonlinelibrary.card.UserCard;
import com.dayu.qiheonlinelibrary.databinding.ActivityRechargeQhlBinding;
import com.dayu.qiheonlinelibrary.dbBean.AdminDataBean;
import com.dayu.qiheonlinelibrary.dbBean.ElectricPriceBean;
import com.dayu.qiheonlinelibrary.dbBean.RechargeBean;
import com.dayu.qiheonlinelibrary.dbBean.UserCardBean;
import com.dayu.qiheonlinelibrary.net.ApiManager;
import com.dayu.qiheonlinelibrary.net.BaseResponse;
import com.dayu.qiheonlinelibrary.net.RSAUtile;
import com.dayu.qiheonlinelibrary.net.subscribers.SubscriberListener;
import com.dayu.qiheonlinelibrary.tools.NfcReadHelper;
import com.dayu.qiheonlinelibrary.utils.CardCommon;
import com.tencent.bugly.crashreport.CrashReport;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -68,7 +54,7 @@
    CardInfoResult cardInfoResult;
    UserCard mOldUserCard;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
@@ -106,13 +92,24 @@
            cardType = cardType.split(",")[1];
        }
        //获取卡内信息
        mOldUserCard = NfcReadHelper.getInstence(intent, this).getUserCardData();
        getUserInfoAndCardInfo(cardNumber,mOldUserCard.getMyUserCode());
        userCard = NfcReadHelper.getInstence(intent, this).getUserCardData();
        if (userCard != null) {
            try {
                getUserInfoAndCardInfo(cardNumber, userCard.getMyUserCode());
            } catch (Exception e) {
                e.printStackTrace();
                CrashReport.postCatchedException(e);
                TipUtil.show(this, "读卡失败,请刷卡后不要立即移开");
            }
        } else {
            TipUtil.show(this, "读卡失败,请刷卡后不要立即移开");
        }
    }
    private void setUserData(String cardNumber, String userName, String lastRechargeTime, List<byte[]> data) {
    private void setUserData(String cardNumber, String userName, String lastRechargeTime) {
        if (cardType.equalsIgnoreCase(CardCommon.USER_CARD_TYPE_1)) {
            setCardState("终端写卡");
            binding.rechargeLL.setVisibility(View.VISIBLE);
@@ -127,25 +124,31 @@
            TipUtil.show(this, "非用户卡,不能充值");
            return;
        }
        if (userCard != null) {
            try {
                if (Integer.valueOf(QHOnLineApplication.getInstance().arerNumber) == userCard.getArerNumber()) {
                    binding.rechargeReadLL.setVisibility(View.GONE);
                    binding.rechargeTextLL.setVisibility(View.VISIBLE);
                    binding.userName.setText(userName);
                    binding.redInitCode.setText(cardNumber);
                    binding.redRechargeDate.setText("本卡最后购水日期:\n\n" + lastRechargeTime);
                    binding.redUserCode.setText(cardInfoResult.getIccardCode());
                    if (userCard != null) {
                        binding.redRemainderBlance.setText(MornyUtil.changeF2Y(userCard.getBalance()) + " 元");
                        binding.redBalanceElectric.setText("充值后剩余电量:" + MornyUtil.changeF2Y(userCard.getSurplusElecticity()) + " 度");
                    }
                    binding.redRechargeElectric.setText("电量单价:" + QHOnLineApplication.getInstance().electriclePriceStr + "元/度");
        userCard = UserCard.getBean(data);
        if (Integer.valueOf(QHOnLineApplication.getInstance().arerNumber) == userCard.getArerNumber()) {
            binding.rechargeReadLL.setVisibility(View.GONE);
            binding.rechargeTextLL.setVisibility(View.VISIBLE);
            binding.userName.setText(userName);
            binding.redInitCode.setText(cardNumber);
            binding.redRechargeDate.setText("本卡最后购水日期:\n\n" + lastRechargeTime);
            binding.redUserCode.setText(cardInfoResult.getIccardCode());
            if (userCard != null) {
                binding.redRemainderBlance.setText(MornyUtil.changeF2Y(userCard.getBalance()) + " 元");
                binding.redBalanceElectric.setText("充值后剩余电量:" + MornyUtil.changeF2Y(userCard.getSurplusElecticity()) + " 度");
                } else {
                    TipUtil.show(this, "非本区域卡\n不能充值!!!");
                }
            } catch (Exception e) {
                e.printStackTrace();
                CrashReport.postCatchedException(e);
                TipUtil.show(this, "读卡失败,请刷卡后不要立即移开");
            }
            binding.redRechargeElectric.setText("电量单价:" + QHOnLineApplication.getInstance().electriclePriceStr + "元/度");
        } else {
            TipUtil.show(this, "非本区域卡\n不能充值!!!");
            TipUtil.show(this, "读卡失败,请刷卡后不要立即移开");
        }
@@ -225,7 +228,7 @@
    private void startNfcActivity(String morny, String balance, float rechargeElectric, float iccardBalanceElectric, float totalMorny, String iccardRechargeRecordId) {
        //先处理补扣
        //充值补扣金额=充值金额+充值前读取的卡内余额-充值回调返回卡内余额
        int deductionMorny = MornyUtil.changeY2F(morny) + mOldUserCard.getBalance() - MornyUtil.changeY2F(balance);
        int deductionMorny = MornyUtil.changeY2F(morny) + userCard.getBalance() - MornyUtil.changeY2F(balance);
        if (MornyUtil.changeY2F(morny) < deductionMorny) {
            TipUtil.show(RechargeActivity.this, "当前充值金额小于补扣金额,补扣金额为" + MornyUtil.changeF2Y(deductionMorny) + "元,充值金额应大于补扣金额!");
@@ -341,11 +344,11 @@
                    if (t.getData() != null) {
                        //ic卡状态 0 正常 1 已注销 2 已挂失
                        if (t.getData().getIccardStatus() == 0) {
                            List<byte[]> data = NfcReadHelper.getInstence(intent, RechargeActivity.this).getOnesectorData();
//                            List<byte[]> data = NfcReadHelper.getInstence(intent, RechargeActivity.this).getOnesectorData();
                            if (!data.isEmpty()) {
                                if (!TextUtils.isEmpty(cardNumber)) {
                                    cardInfoResult = t.getData();
                                    setUserData(cardNumber, cardInfoResult.getPeasantName(), cardInfoResult.getLastRechargeTime(), data);
                                    setUserData(cardNumber, cardInfoResult.getPeasantName(), cardInfoResult.getLastRechargeTime());
                                } else {
                                    TipUtil.show(RechargeActivity.this, "读取卡片失败,请重新贴卡");
                                }
qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/Constants.java
@@ -7,7 +7,8 @@
 * Description:
 */
public class Constants {
    public static final String BASE_URL = "http://120.46.45.35:20081/api/sjggqhtest/";
//    http://120.46.45.35:20081/api/sjggqhtest/
    public static final String BASE_URL = "http://120.46.45.35:20081/api/sjgg/";
    /**
     * 代表请求成功