From 0baf94225974a8a993789f671860f3679e1a9ff0 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期二, 09 一月 2024 16:11:01 +0800
Subject: [PATCH] 修改权限框架 添加包名和签名验证 数据库文件隐藏

---
 app/src/main/java/com/dayu/recharge/activity/LoginActivity.java   |   71 ++++++++++++++++-------
 settings.gradle                                                   |    1 
 app/src/main/java/com/dayu/recharge/activity/NewCardActivity.java |   56 +++++++++++++-----
 app/src/main/java/com/dayu/recharge/dao/BaseDaoSingleton.java     |    2 
 app/src/main/java/com/dayu/recharge/activity/BaseActivity.java    |   28 +++++++++
 app/src/main/java/com/dayu/recharge/activity/HomeActivity.java    |    3 -
 app/build.gradle                                                  |   14 +---
 7 files changed, 123 insertions(+), 52 deletions(-)

diff --git a/app/build.gradle b/app/build.gradle
index df6defb..be4093b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -21,9 +21,9 @@
 
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
 
-        ndk{
-            abiFilters 'armeabi-v7a'
-        }
+//        ndk{
+//            abiFilters 'armeabi-v7a'
+//        }
         signingConfig signingConfigs.debug
 
     }
@@ -79,12 +79,8 @@
     implementation 'com.tencent.bugly:crashreport:latest.release'
 //    澶勭悊鍥剧墖
 //    implementation (name: 'ocr-library', ext: 'aar')
-    //鏉冮檺
-    implementation ('com.guolindev.permissionx:permissionx:1.7.1'){
-        exclude group: 'androidx.core';
-        exclude group: 'androidx.appcompat';
-        exclude group: 'androidx.annotation';
-    }
+    //鏉冮檺鐢宠
+    implementation 'com.github.getActivity:XXPermissions:18.5'
     //婊氬姩閫夋嫨妗�
     implementation 'com.contrarywind:Android-PickerView:4.1.9'
 
diff --git a/app/src/main/java/com/dayu/recharge/activity/BaseActivity.java b/app/src/main/java/com/dayu/recharge/activity/BaseActivity.java
index c9d70d2..c7158e9 100644
--- a/app/src/main/java/com/dayu/recharge/activity/BaseActivity.java
+++ b/app/src/main/java/com/dayu/recharge/activity/BaseActivity.java
@@ -1,11 +1,16 @@
 package com.dayu.recharge.activity;
 
 import android.app.Activity;
+import android.content.Context;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.Signature;
 import android.os.Bundle;
 import android.view.View;
 
 import androidx.appcompat.app.AppCompatActivity;
 
+import com.dayu.recharge.MyApplication;
 import com.dayu.recharge.R;
 import com.dayu.recharge.dao.AppDatabase;
 import com.dayu.recharge.dao.BaseDaoSingleton;
@@ -22,12 +27,16 @@
     public AppDatabase baseDao;
     //寮傛绾跨▼鏌ヨ
     public AppDatabase asynchBaseDao;
+    public final String SIGN = "308202b8308201a0020101300d06092a864886f70d01010b05003022310f300d06035504030c06e5a4a7e7a6b9310f300d06035504070c06e5a4a9e6b4a5301e170d3233313132303035333131325a170d3438313131333035333131325a3022310f300d06035504030c06e5a4a7e7a6b9310f300d06035504070c06e5a4a9e6b4a530820122300d06092a864886f70d01010105000382010f003082010a0282010100a0924f3d618e4a622def691e16e54ce5bdfd035bd73e7cb947d2bf3bd0c00afa26e52963e0299fc06d76d153be696c5285d630577e1dcb2b740a72b6d904482217de308fb91c8435441ed05e844ced1e5c3446d82cb8f38751049df26a42adcfc33f1f12c2ce03f676e5d148aad800ace89670b87835e2c02a8570a0b6740d9c0669d4cb3c597d0b2dd49fc0904e885773b6d3a87d9f1e73eb526e0d1a9e9e3c48d986938286cd824151b5a6214faf89d3e699524511b23c86d3b110a7f0bb56a6d2436f69816538a62a38cb1fee6eb685d267cc200df8af51b936bd280beaa2023f75678d77a11ac6de734b30af63d394c8b63bccf2115a47ea15c9212c740d0203010001300d06092a864886f70d01010b05000382010100307cafa9b14be91ba6424cfcc6aed75b069a1c4d6eb646eab0de93f372f236f5f0a6097499df99391075d6ced18d419a2b15adb041890e2b56a3bfbd6be40efee99c5c713ba8ea1d45da09b67916106116e96eb735271c4d53e0739f753145cbc42e149ad3d9507d422ec1c6f1a7f792a4542f9a64f0de3d4f4af69f0fb3390ef3577dcf8844cf744426d173b0934d879148062c5ca64022dc99af370dbfeaf2b5d4a279b20c54a361bca12c25bf185c2885519bbbc36e46ddb083080f0cc5b1f2eafe964ebce5071b0ae7d92a34a9193861b996d2c0299b1993f41063a27038199365a6e3cb27a02ffa9facdc48a63713eb5fbf90e9fd73056aba16b28e5fee";
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         baseDao = BaseDaoSingleton.getInstance(this);
         asynchBaseDao = BaseDaoSingleton.getAsynchInstance(this);
+        if (!isMyApp()) {
+            this.finish();
+        }
     }
 
 
@@ -52,5 +61,24 @@
         }
     }
 
+    public boolean isMyApp() {
+        String signStr = getSign();
+        return SIGN.equals(signStr);
+    }
 
+    public String getSign() {
+
+        try {
+            PackageInfo packageInfo = this.getPackageManager().getPackageInfo(this.getPackageName(), PackageManager.GET_SIGNATURES);
+            Signature[] signatures = packageInfo.signatures;
+            StringBuilder builder = new StringBuilder();
+            for (Signature signature : signatures) {
+                builder.append(signature.toCharsString());
+            }
+            return builder.toString();
+        } catch (PackageManager.NameNotFoundException e) {
+            e.printStackTrace();
+        }
+        return "";
+    }
 }
diff --git a/app/src/main/java/com/dayu/recharge/activity/HomeActivity.java b/app/src/main/java/com/dayu/recharge/activity/HomeActivity.java
index 4d52f56..33d033f 100644
--- a/app/src/main/java/com/dayu/recharge/activity/HomeActivity.java
+++ b/app/src/main/java/com/dayu/recharge/activity/HomeActivity.java
@@ -1,6 +1,5 @@
 package com.dayu.recharge.activity;
 
-import android.Manifest;
 import android.content.Intent;
 import android.os.Bundle;
 import android.view.KeyEvent;
@@ -13,8 +12,6 @@
 import com.dayu.recharge.databinding.ActivityHomeBinding;
 import com.dayu.recharge.dbBean.AdminDataBean;
 import com.dayu.recharge.utils.TipUtil;
-import com.dayu.recharge.utils.ToastUtil;
-import com.permissionx.guolindev.PermissionX;
 
 
 /**
diff --git a/app/src/main/java/com/dayu/recharge/activity/LoginActivity.java b/app/src/main/java/com/dayu/recharge/activity/LoginActivity.java
index 664b632..3d59c16 100644
--- a/app/src/main/java/com/dayu/recharge/activity/LoginActivity.java
+++ b/app/src/main/java/com/dayu/recharge/activity/LoginActivity.java
@@ -8,6 +8,7 @@
 import android.view.View;
 import android.widget.Toast;
 
+import androidx.annotation.NonNull;
 import androidx.appcompat.app.AppCompatActivity;
 
 import com.dayu.recharge.MyApplication;
@@ -15,10 +16,12 @@
 import com.dayu.recharge.databinding.ActivityLoginBinding;
 import com.dayu.recharge.dbBean.PassWordBean;
 import com.dayu.recharge.utils.TipUtil;
-import com.dayu.recharge.utils.WSMD5;
-import com.permissionx.guolindev.PermissionX;
+import com.hjq.permissions.OnPermissionCallback;
+import com.hjq.permissions.Permission;
+import com.hjq.permissions.XXPermissions;
 
 import java.io.File;
+import java.util.List;
 
 
 /**
@@ -27,7 +30,7 @@
  * Date: 2023-11-10 19:52
  * Description: 鐧诲綍鐣岄潰
  */
-public class LoginActivity extends AppCompatActivity {
+public class LoginActivity extends BaseActivity {
 
     ActivityLoginBinding binding;
     PassWordBean passWordBean;
@@ -62,27 +65,51 @@
     }
 
     private void getPermission() {
-        PermissionX.init(LoginActivity.this).permissions(Manifest.permission.READ_PHONE_STATE,
-                        Manifest.permission.READ_EXTERNAL_STORAGE,
-                        Manifest.permission.WRITE_EXTERNAL_STORAGE)
-                .onExplainRequestReason((scope, deniedList) -> {
-                })
-                .request((allGranted, grantedList, deniedList) -> {
-                    if (allGranted) {//鎵�鏈夌敵璇风殑鏉冮檺閮藉凡閫氳繃
-                        MyApplication.myApplication.initEasySocket(false, null);
-                        try {
-                            File file = new File(BaseDaoSingleton.SqlitePath);
-                            if (!file.exists()) {
-                                file.mkdirs();
+        try {
+
+
+            XXPermissions.with(this)
+                    // 鐢宠鍗曚釜鏉冮檺
+//                    .permission(Permission.RECORD_AUDIO)
+                    // 鐢宠澶氫釜鏉冮檺
+                    .permission(Permission.READ_PHONE_STATE,
+                            Permission.READ_EXTERNAL_STORAGE,
+                            Permission.WRITE_EXTERNAL_STORAGE)
+                    // 璁剧疆鏉冮檺璇锋眰鎷︽埅鍣紙灞�閮ㄨ缃級
+                    //.interceptor(new PermissionInterceptor())
+                    // 璁剧疆涓嶈Е鍙戦敊璇娴嬫満鍒讹紙灞�閮ㄨ缃級
+                    //.unchecked()
+                    .request(new OnPermissionCallback() {
+
+                        @Override
+                        public void onGranted(@NonNull List<String> permissions, boolean allGranted) {
+                            if (allGranted) {
+                                if (allGranted) {//鎵�鏈夌敵璇风殑鏉冮檺閮藉凡閫氳繃
+                                    MyApplication.myApplication.initEasySocket(false, null);
+                                    try {
+                                        File file = new File(BaseDaoSingleton.SqlitePath);
+                                        if (!file.exists()) {
+                                            file.mkdirs();
+                                        }
+                                        passWordBean = BaseDaoSingleton.getInstance(LoginActivity.this).loginPsDao().findFirst();
+                                    } catch (Exception e) {
+                                        e.printStackTrace();
+                                    }
+                                }
                             }
-                            passWordBean = BaseDaoSingleton.getInstance(this).loginPsDao().findFirst();
-                        } catch (Exception e) {
-                            e.printStackTrace();
                         }
-                    } else {//鎮ㄦ嫆缁濅簡濡備笅鏉冮檺锛�$deniedList
 
-
-                    }
-                });
+                        @Override
+                        public void onDenied(@NonNull List<String> permissions, boolean doNotAskAgain) {
+                            if (doNotAskAgain) {
+                                // 濡傛灉鏄姘镐箙鎷掔粷灏辫烦杞埌搴旂敤鏉冮檺绯荤粺璁剧疆椤甸潰
+                            } else {
+//                                toast("鑾峰彇褰曢煶鍜屾棩鍘嗘潈闄愬け璐�");
+                            }
+                        }
+                    });
+        } catch (Throwable e) {
+            e.printStackTrace();
+        }
     }
 }
diff --git a/app/src/main/java/com/dayu/recharge/activity/NewCardActivity.java b/app/src/main/java/com/dayu/recharge/activity/NewCardActivity.java
index f552940..1c3029e 100644
--- a/app/src/main/java/com/dayu/recharge/activity/NewCardActivity.java
+++ b/app/src/main/java/com/dayu/recharge/activity/NewCardActivity.java
@@ -1,6 +1,5 @@
 package com.dayu.recharge.activity;
 
-import android.Manifest;
 import android.app.Dialog;
 import android.content.Intent;
 import android.os.Bundle;
@@ -10,8 +9,7 @@
 import android.view.LayoutInflater;
 import android.view.View;
 
-import com.dayu.recharge.utils.DeviceNumberUtils;
-import com.dayu.recharge.view.ProgressDialog;
+import androidx.annotation.NonNull;
 
 import com.dayu.recharge.MyApplication;
 import com.dayu.recharge.card.UserCard;
@@ -28,14 +26,19 @@
 import com.dayu.recharge.tools.HexUtil;
 import com.dayu.recharge.tools.Utils;
 import com.dayu.recharge.utils.CRC8;
+import com.dayu.recharge.utils.DeviceNumberUtils;
 import com.dayu.recharge.utils.SocketUtil;
 import com.dayu.recharge.utils.TipUtil;
-import com.permissionx.guolindev.PermissionX;
+import com.dayu.recharge.view.ProgressDialog;
+import com.hjq.permissions.OnPermissionCallback;
+import com.hjq.permissions.Permission;
+import com.hjq.permissions.XXPermissions;
 
 import org.json.JSONException;
 import org.json.JSONObject;
 
 import java.util.Arrays;
+import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -75,7 +78,7 @@
             @Override
             public void onClick(View v) {
 
-                rxPermission();
+                getPermission();
             }
         });
 
@@ -154,22 +157,40 @@
     }
 
 
-    private void rxPermission() {
-        PermissionX.init(NewCardActivity.this).permissions(Manifest.permission.CAMERA)
-                .onExplainRequestReason((scope, deniedList) -> {
+    private void getPermission() {
+        try {
+            XXPermissions.with(this)
+                    // 鐢宠鍗曚釜鏉冮檺
+//                    .permission(Permission.RECORD_AUDIO)
+                    // 鐢宠澶氫釜鏉冮檺
+                    .permission(Permission.CAMERA)
+                    // 璁剧疆鏉冮檺璇锋眰鎷︽埅鍣紙灞�閮ㄨ缃級
+                    //.interceptor(new PermissionInterceptor())
+                    // 璁剧疆涓嶈Е鍙戦敊璇娴嬫満鍒讹紙灞�閮ㄨ缃級
+                    //.unchecked()
+                    .request(new OnPermissionCallback() {
 
-// val message = "PermissionX闇�瑕佹偍鍚屾剰浠ヤ笅鏉冮檺鎵嶈兘姝e父浣跨敤"
-                })
-                .request((allGranted, grantedList, deniedList) -> {
-                    if (allGranted) {//鎵�鏈夌敵璇风殑鏉冮檺閮藉凡閫氳繃
-//                        startCamera();
-                    } else {//鎮ㄦ嫆缁濅簡濡備笅鏉冮檺锛�$deniedList
+                        @Override
+                        public void onGranted(@NonNull List<String> permissions, boolean allGranted) {
+                            if (allGranted) {
 
+                            }
+                        }
 
-                    }
-                });
+                        @Override
+                        public void onDenied(@NonNull List<String> permissions, boolean doNotAskAgain) {
+                            if (doNotAskAgain) {
+                                // 濡傛灉鏄姘镐箙鎷掔粷灏辫烦杞埌搴旂敤鏉冮檺绯荤粺璁剧疆椤甸潰
+                            } else {
+//                                toast("鑾峰彇褰曢煶鍜屾棩鍘嗘潈闄愬け璐�");
+                            }
+                        }
+                    });
+        } catch (
+                Throwable e) {
+            e.printStackTrace();
+        }
     }
-
 
 
     @Override
@@ -349,6 +370,7 @@
             // 姹夊瓧鐨刄nicode鑼冨洿鏄細0x4e00 - 0x9fa5
             return (c >= 0x4e00 && c <= 0x9fa5);
         }
+
     }
 
     @Override
diff --git a/app/src/main/java/com/dayu/recharge/dao/BaseDaoSingleton.java b/app/src/main/java/com/dayu/recharge/dao/BaseDaoSingleton.java
index d5eb368..752df64 100644
--- a/app/src/main/java/com/dayu/recharge/dao/BaseDaoSingleton.java
+++ b/app/src/main/java/com/dayu/recharge/dao/BaseDaoSingleton.java
@@ -19,7 +19,7 @@
 public class BaseDaoSingleton {
     public static AppDatabase baseDao;
     public static AppDatabase AsynchBaseDao;
-    public static String SqlitePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "dayu" + File.separator + "data" + File.separator;
+    public static String SqlitePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + ".dayu" + File.separator + "data" + File.separator;
 
     //MyFileUtil.SqlitePath +
     public static AppDatabase getInstance(Context context) {
diff --git a/settings.gradle b/settings.gradle
index cbdf108..55ce102 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -11,6 +11,7 @@
         google()
         jcenter()
         mavenCentral()
+        maven {url 'https://www.jitpack.io'}
     }
 }
 rootProject.name = "Recharge"

--
Gitblit v1.8.0