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