From 666a3bc7d6958f69910889996f25c7ef572c442e Mon Sep 17 00:00:00 2001 From: dxl <64101226@qq.com> Date: Tue, 9 May 2023 14:13:43 +0800 Subject: [PATCH] Adapt to Android 12 or later. --- apprts/build.gradle | 4 ++-- apprts/src/main/AndroidManifest.xml | 16 +++++++++---- .../activities/tools/LoginActivity.java | 23 +++++++++++++++---- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- libcml/build.gradle | 4 ++-- libcom/build.gradle | 4 ++-- .../com/proxgrind/com/UsbSerialControl.java | 7 +++++- libcrapto1/build.gradle | 4 ++-- libflasher/build.gradle | 4 ++-- libmfkey/build.gradle | 4 ++-- libnfc/build.gradle | 4 ++-- libpm3/build.gradle | 2 -- libtag/build.gradle | 4 ++-- .../mifare/StdMifareIntent.java | 16 +++++++------ libutils/build.gradle | 4 ++-- terminal-emulator/build.gradle | 4 ++-- terminal-view/build.gradle | 4 ++-- termux-app/build.gradle | 4 ++-- termux-app/src/main/AndroidManifest.xml | 4 +++- .../com/termux/app/TermuxHelpActivity.java | 3 ++- .../java/com/termux/app/TermuxService.java | 23 +++++++++++++++---- 22 files changed, 96 insertions(+), 50 deletions(-) diff --git a/apprts/build.gradle b/apprts/build.gradle index 6e213613..8f5e616e 100644 --- a/apprts/build.gradle +++ b/apprts/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 29 + compileSdkVersion 33 defaultConfig { applicationId "com.rfidresearchgroup.rfidtools" minSdkVersion 21 - targetSdkVersion 29 + targetSdkVersion 33 testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' versionCode 26 versionName "1.4.8 SDK21 && PM3 CWD" diff --git a/apprts/src/main/AndroidManifest.xml b/apprts/src/main/AndroidManifest.xml index afbffed5..d7d60bb7 100644 --- a/apprts/src/main/AndroidManifest.xml +++ b/apprts/src/main/AndroidManifest.xml @@ -2,8 +2,16 @@ xmlns:tools="http://schemas.android.com/tools" package="com.rfidresearchgroup.rfidtools"> - - + + + + + + + + @@ -22,7 +30,7 @@ android:usesCleartextTraffic="true" tools:targetApi="q"> - + @@ -42,7 +50,7 @@ android:name="com.rfidresearchgroup.activities.connect.Proxmark3Rdv4RRGConnectActivity" android:configChanges="keyboardHidden|orientation|screenSize|screenLayout" /> - + diff --git a/apprts/src/main/java/com/rfidresearchgroup/activities/tools/LoginActivity.java b/apprts/src/main/java/com/rfidresearchgroup/activities/tools/LoginActivity.java index dc1f783e..c1dd6b5a 100644 --- a/apprts/src/main/java/com/rfidresearchgroup/activities/tools/LoginActivity.java +++ b/apprts/src/main/java/com/rfidresearchgroup/activities/tools/LoginActivity.java @@ -3,6 +3,7 @@ package com.rfidresearchgroup.activities.tools; import android.Manifest; import android.content.Context; import android.content.pm.PackageManager; +import android.os.Build; import android.os.Bundle; import androidx.annotation.NonNull; @@ -27,6 +28,10 @@ import com.rfidresearchgroup.common.implement.PermissionCallback; import com.rfidresearchgroup.common.util.FragmentUtil; import com.rfidresearchgroup.common.util.PermissionUtil; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; + /* * 登陆界面,,用于登陆用户系统,初始化环境,对于用户的验证,都放在这里实现 */ @@ -90,11 +95,21 @@ public class LoginActivity } }); - String[] permissionArray = new String[]{ + ArrayList permissionArray = new ArrayList<>(); + Collections.addAll(permissionArray, + // 以下是一定要添加的权限 Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.READ_EXTERNAL_STORAGE, - }; - permissionUtil.setPermissions(permissionArray); + Manifest.permission.READ_EXTERNAL_STORAGE + ); + + // android 12或者以上,要单独申请蓝牙权限 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + permissionArray.add( Manifest.permission.BLUETOOTH_SCAN); + permissionArray.add( Manifest.permission.BLUETOOTH_CONNECT); + permissionArray.add( Manifest.permission.BLUETOOTH_ADVERTISE); + } + + permissionUtil.setPermissions(permissionArray.toArray(new String[]{})); permissionUtil.checks(); } diff --git a/build.gradle b/build.gradle index c3d29085..4fa0823c 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:7.0.2' + classpath 'com.android.tools.build:gradle:7.1.2' classpath('com.github.dcendents:android-maven-gradle-plugin:1.5') } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index f1920f4b..a7ceb09a 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip diff --git a/libcml/build.gradle b/libcml/build.gradle index 2e095c60..1be2d382 100644 --- a/libcml/build.gradle +++ b/libcml/build.gradle @@ -1,11 +1,11 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 29 + compileSdkVersion 33 defaultConfig { minSdkVersion 19 - targetSdkVersion 29 + targetSdkVersion 33 } buildTypes { diff --git a/libcom/build.gradle b/libcom/build.gradle index 55586e0f..44ae75e4 100644 --- a/libcom/build.gradle +++ b/libcom/build.gradle @@ -1,11 +1,11 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 29 + compileSdkVersion 33 defaultConfig { minSdkVersion 19 - targetSdkVersion 29 + targetSdkVersion 33 } buildTypes { diff --git a/libcom/src/main/java/com/proxgrind/com/UsbSerialControl.java b/libcom/src/main/java/com/proxgrind/com/UsbSerialControl.java index da8cd089..746ec1ac 100644 --- a/libcom/src/main/java/com/proxgrind/com/UsbSerialControl.java +++ b/libcom/src/main/java/com/proxgrind/com/UsbSerialControl.java @@ -185,7 +185,12 @@ public class UsbSerialControl implements DriverInterface { //如果对于这个设备没有权限! if (!usbManager.hasPermission(usbDevice)) { //发送广播申请权限 - PendingIntent intent = PendingIntent.getBroadcast(mContext, 0, new Intent(ACTION_PERMISSION), 0); + PendingIntent intent; + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) { + intent = PendingIntent.getActivity(mContext, 0, new Intent(ACTION_PERMISSION), PendingIntent.FLAG_IMMUTABLE); + } else { + intent = PendingIntent.getActivity(mContext, 0, new Intent(ACTION_PERMISSION), PendingIntent.FLAG_ONE_SHOT); + } //Log.d(LOG_TAG, "尝试获得USB权限!"); usbManager.requestPermission(usbDevice, intent); //当没有权限的时候应当直接返回 diff --git a/libcrapto1/build.gradle b/libcrapto1/build.gradle index f43ca463..e1634f12 100644 --- a/libcrapto1/build.gradle +++ b/libcrapto1/build.gradle @@ -1,11 +1,11 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 29 + compileSdkVersion 33 defaultConfig { minSdkVersion 19 - targetSdkVersion 29 + targetSdkVersion 33 externalNativeBuild { cmake { arguments '-DANDROID_STL=c++_static' diff --git a/libflasher/build.gradle b/libflasher/build.gradle index df3c90ee..b2822ad1 100644 --- a/libflasher/build.gradle +++ b/libflasher/build.gradle @@ -1,11 +1,11 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 29 + compileSdkVersion 33 defaultConfig { minSdkVersion 19 - targetSdkVersion 29 + targetSdkVersion 33 externalNativeBuild { cmake { diff --git a/libmfkey/build.gradle b/libmfkey/build.gradle index 8af01050..88e665cc 100644 --- a/libmfkey/build.gradle +++ b/libmfkey/build.gradle @@ -1,11 +1,11 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 29 + compileSdkVersion 33 defaultConfig { minSdkVersion 18 - targetSdkVersion 29 + targetSdkVersion 33 externalNativeBuild { cmake { /* diff --git a/libnfc/build.gradle b/libnfc/build.gradle index 51e40af0..e2fb0a5b 100644 --- a/libnfc/build.gradle +++ b/libnfc/build.gradle @@ -1,11 +1,11 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 29 + compileSdkVersion 33 defaultConfig { minSdkVersion 19 - targetSdkVersion 29 + targetSdkVersion 33 externalNativeBuild { cmake { diff --git a/libpm3/build.gradle b/libpm3/build.gradle index ec6e7f99..7487b9d7 100644 --- a/libpm3/build.gradle +++ b/libpm3/build.gradle @@ -6,8 +6,6 @@ android { defaultConfig { minSdk 21 targetSdk 29 - versionCode 1 - versionName "1.0" } buildTypes { diff --git a/libtag/build.gradle b/libtag/build.gradle index f0ab3a4a..4da23a59 100644 --- a/libtag/build.gradle +++ b/libtag/build.gradle @@ -1,11 +1,11 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 29 + compileSdkVersion 33 defaultConfig { minSdkVersion 19 - targetSdkVersion 29 + targetSdkVersion 33 consumerProguardFiles 'consumer-rules.pro' } diff --git a/libtag/src/main/java/com/rfidresearchgroup/mifare/StdMifareIntent.java b/libtag/src/main/java/com/rfidresearchgroup/mifare/StdMifareIntent.java index c5f6af3a..4be100c2 100644 --- a/libtag/src/main/java/com/rfidresearchgroup/mifare/StdMifareIntent.java +++ b/libtag/src/main/java/com/rfidresearchgroup/mifare/StdMifareIntent.java @@ -32,13 +32,15 @@ public class StdMifareIntent { public void enableForegroundDispatch(Activity targetAct) { if (mAdapter == null) return; //进行前台广播拦截! - Intent intent = new Intent(targetAct, - targetAct.getClass()).addFlags( - Intent.FLAG_ACTIVITY_SINGLE_TOP); - PendingIntent pendingIntent = PendingIntent.getActivity( - targetAct, 0, intent, 0); - mAdapter.enableForegroundDispatch(targetAct, pendingIntent, null, new String[][]{ - new String[]{MifareClassic.class.getName()}}); + Intent intent = new Intent(targetAct, targetAct.getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); + PendingIntent pendingIntent; + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) { + pendingIntent = PendingIntent.getActivity(targetAct, 0, intent, PendingIntent.FLAG_IMMUTABLE); + } else { + pendingIntent = PendingIntent.getActivity(targetAct, 0, intent, PendingIntent.FLAG_ONE_SHOT); + } + + mAdapter.enableForegroundDispatch(targetAct, pendingIntent, null, new String[][]{new String[]{MifareClassic.class.getName()}}); } /* diff --git a/libutils/build.gradle b/libutils/build.gradle index 807dab09..529c1d5d 100644 --- a/libutils/build.gradle +++ b/libutils/build.gradle @@ -1,11 +1,11 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 29 + compileSdkVersion 33 defaultConfig { minSdkVersion 19 - targetSdkVersion 29 + targetSdkVersion 33 } buildTypes { diff --git a/terminal-emulator/build.gradle b/terminal-emulator/build.gradle index a4d47cd2..912e06dc 100644 --- a/terminal-emulator/build.gradle +++ b/terminal-emulator/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 29 + compileSdkVersion 33 // ndkVersion '21.3.6528147' defaultConfig { minSdkVersion 21 - targetSdkVersion 29 + targetSdkVersion 33 externalNativeBuild { ndkBuild { diff --git a/terminal-view/build.gradle b/terminal-view/build.gradle index 8e6706f1..ffb5568c 100644 --- a/terminal-view/build.gradle +++ b/terminal-view/build.gradle @@ -1,7 +1,7 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 29 + compileSdkVersion 33 dependencies { implementation "androidx.annotation:annotation:1.1.0" @@ -10,7 +10,7 @@ android { defaultConfig { minSdkVersion 21 - targetSdkVersion 29 + targetSdkVersion 33 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } diff --git a/termux-app/build.gradle b/termux-app/build.gradle index 049fce7a..d7b43633 100644 --- a/termux-app/build.gradle +++ b/termux-app/build.gradle @@ -3,7 +3,7 @@ plugins { } android { - compileSdkVersion 29 + compileSdkVersion 33 // ndkVersion '21.3.6528147' dependencies { @@ -16,7 +16,7 @@ android { defaultConfig { // applicationId "com.termux" minSdkVersion 21 - targetSdkVersion 29 + targetSdkVersion 33 /*externalNativeBuild { ndkBuild { diff --git a/termux-app/src/main/AndroidManifest.xml b/termux-app/src/main/AndroidManifest.xml index d4635af6..0b2fc669 100644 --- a/termux-app/src/main/AndroidManifest.xml +++ b/termux-app/src/main/AndroidManifest.xml @@ -74,6 +74,7 @@ android:label="@string/application_name" android:noHistory="true" android:resizeableActivity="true" + android:exported="true" android:taskAffinity="com.termux.filereceiver"> @@ -104,7 +105,8 @@ + android:targetActivity="com.termux.app.TermuxActivity" + android:exported="true"> diff --git a/termux-app/src/main/java/com/termux/app/TermuxHelpActivity.java b/termux-app/src/main/java/com/termux/app/TermuxHelpActivity.java index 0aa8a97a..102fde40 100644 --- a/termux-app/src/main/java/com/termux/app/TermuxHelpActivity.java +++ b/termux-app/src/main/java/com/termux/app/TermuxHelpActivity.java @@ -32,7 +32,8 @@ public final class TermuxHelpActivity extends Activity { mWebView = new WebView(this); WebSettings settings = mWebView.getSettings(); settings.setCacheMode(WebSettings.LOAD_NO_CACHE); - settings.setAppCacheEnabled(false); + // deprecate api + // settings.setAppCacheEnabled(false); setContentView(progressLayout); mWebView.clearCache(true); diff --git a/termux-app/src/main/java/com/termux/app/TermuxService.java b/termux-app/src/main/java/com/termux/app/TermuxService.java index 8fbed3e7..3dde39b0 100644 --- a/termux-app/src/main/java/com/termux/app/TermuxService.java +++ b/termux-app/src/main/java/com/termux/app/TermuxService.java @@ -224,8 +224,12 @@ public final class TermuxService extends Service implements SessionChangedCallba // PendingIntent#getActivity(): "Note that the activity will be started outside of the context of an existing // activity, so you must use the Intent.FLAG_ACTIVITY_NEW_TASK launch flag in the Intent": notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notifyIntent, 0); - + PendingIntent pendingIntent; + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) { + pendingIntent = PendingIntent.getActivity(this, 0, notifyIntent, PendingIntent.FLAG_IMMUTABLE); + } else { + pendingIntent = PendingIntent.getActivity(this, 0, notifyIntent, PendingIntent.FLAG_ONE_SHOT); + } int sessionCount = mTerminalSessions.size(); int taskCount = mBackgroundTasks.size(); String contentText = sessionCount + " session" + (sessionCount == 1 ? "" : "s"); @@ -259,7 +263,13 @@ public final class TermuxService extends Service implements SessionChangedCallba Resources res = getResources(); Intent exitIntent = new Intent(this, TermuxService.class).setAction(ACTION_STOP_SERVICE); - builder.addAction(android.R.drawable.ic_delete, res.getString(R.string.notification_action_exit), PendingIntent.getService(this, 0, exitIntent, 0)); + PendingIntent pendingIntentService; + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) { + pendingIntentService = PendingIntent.getActivity(this, 0, exitIntent, PendingIntent.FLAG_IMMUTABLE); + } else { + pendingIntentService = PendingIntent.getActivity(this, 0, exitIntent, PendingIntent.FLAG_ONE_SHOT); + } + builder.addAction(android.R.drawable.ic_delete, res.getString(R.string.notification_action_exit), pendingIntentService); String newWakeAction = wakeLockHeld ? ACTION_UNLOCK_WAKE : ACTION_LOCK_WAKE; Intent toggleWakeLockIntent = new Intent(this, TermuxService.class).setAction(newWakeAction); @@ -267,7 +277,12 @@ public final class TermuxService extends Service implements SessionChangedCallba R.string.notification_action_wake_unlock : R.string.notification_action_wake_lock); int actionIcon = wakeLockHeld ? android.R.drawable.ic_lock_idle_lock : android.R.drawable.ic_lock_lock; - builder.addAction(actionIcon, actionTitle, PendingIntent.getService(this, 0, toggleWakeLockIntent, 0)); + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) { + pendingIntentService = PendingIntent.getActivity(this, 0, toggleWakeLockIntent, PendingIntent.FLAG_IMMUTABLE); + } else { + pendingIntentService = PendingIntent.getActivity(this, 0, toggleWakeLockIntent, PendingIntent.FLAG_ONE_SHOT); + } + builder.addAction(actionIcon, actionTitle, pendingIntentService); return builder.build(); }