Skip to content

Commit d746f14

Browse files
committed
[M] AppUtils增加getAppMinSdkVersion, getAppTargetSdkVersion支持
1 parent cf98305 commit d746f14

File tree

5 files changed

+173
-69
lines changed

5 files changed

+173
-69
lines changed

feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/app/AppActivity.kt

+60-48
Original file line numberDiff line numberDiff line change
@@ -54,63 +54,74 @@ class AppActivity : CommonActivity(), Utils.OnAppStatusChangedListener {
5454

5555
override fun bindItems(): MutableList<CommonItem<*>> {
5656
return CollectionUtils.newArrayList(
57-
CommonItemSwitch("registerAppStatusChangedListener", { isRegisterAppStatusChangedListener }, {
57+
CommonItemSwitch(
58+
"registerAppStatusChangedListener",
59+
{ isRegisterAppStatusChangedListener },
60+
{
5861
isRegisterAppStatusChangedListener = it
5962
if (it) {
6063
AppUtils.registerAppStatusChangedListener(this)
6164
} else {
6265
AppUtils.unregisterAppStatusChangedListener(this)
6366
}
6467
}),
65-
CommonItemTitle("isAppRoot", AppUtils.isAppRoot().toString()),
66-
CommonItemTitle("isAppDebug", AppUtils.isAppDebug().toString()),
67-
CommonItemTitle("isAppSystem", AppUtils.isAppSystem().toString()),
68-
CommonItemTitle("isAppForeground", AppUtils.isAppForeground(AppUtils.getAppPackageName()).toString()),
69-
CommonItemTitle("isAppRunning", AppUtils.isAppRunning(AppUtils.getAppPackageName()).toString()),
70-
CommonItemImage("getAppIcon") {
71-
it.setImageDrawable(AppUtils.getAppIcon())
72-
},
73-
CommonItemTitle("getAppPackageName", AppUtils.getAppPackageName()),
74-
CommonItemTitle("getAppName", AppUtils.getAppName()),
75-
CommonItemTitle("getAppPath", AppUtils.getAppPath()),
76-
CommonItemTitle("getAppVersionName", AppUtils.getAppVersionName()),
77-
CommonItemTitle("getAppVersionCode", AppUtils.getAppVersionCode().toString()),
78-
CommonItemTitle("getAppSignaturesSHA1", AppUtils.getAppSignaturesSHA1().toString()),
79-
CommonItemTitle("getAppSignaturesSHA256", AppUtils.getAppSignaturesSHA256().toString()),
80-
CommonItemTitle("getAppSignaturesMD5", AppUtils.getAppSignaturesMD5().toString()),
81-
CommonItemTitle("getAppUid", AppUtils.getAppUid().toString()),
82-
CommonItemTitle("getApkInfo", AppUtils.getApkInfo(AppUtils.getAppPath()).toString()),
83-
84-
CommonItemClick(R.string.app_install) {
85-
if (AppUtils.isAppInstalled(Config.TEST_PKG)) {
86-
ToastUtils.showShort(R.string.app_install_tips)
68+
CommonItemTitle("isAppRoot", AppUtils.isAppRoot().toString()),
69+
CommonItemTitle("isAppDebug", AppUtils.isAppDebug().toString()),
70+
CommonItemTitle("isAppSystem", AppUtils.isAppSystem().toString()),
71+
CommonItemTitle(
72+
"isAppForeground",
73+
AppUtils.isAppForeground(AppUtils.getAppPackageName()).toString()
74+
),
75+
CommonItemTitle(
76+
"isAppRunning",
77+
AppUtils.isAppRunning(AppUtils.getAppPackageName()).toString()
78+
),
79+
CommonItemImage("getAppIcon") {
80+
it.setImageDrawable(AppUtils.getAppIcon())
81+
},
82+
CommonItemTitle("getAppPackageName", AppUtils.getAppPackageName()),
83+
CommonItemTitle("getAppName", AppUtils.getAppName()),
84+
CommonItemTitle("getAppPath", AppUtils.getAppPath()),
85+
CommonItemTitle("getAppVersionName", AppUtils.getAppVersionName()),
86+
CommonItemTitle("getAppVersionCode", AppUtils.getAppVersionCode().toString()),
87+
CommonItemTitle("getAppMinSdkVersion", AppUtils.getAppMinSdkVersion().toString()),
88+
CommonItemTitle("getAppTargetSdkVersion", AppUtils.getAppTargetSdkVersion().toString()),
89+
CommonItemTitle("getAppSignaturesSHA1", AppUtils.getAppSignaturesSHA1().toString()),
90+
CommonItemTitle("getAppSignaturesSHA256", AppUtils.getAppSignaturesSHA256().toString()),
91+
CommonItemTitle("getAppSignaturesMD5", AppUtils.getAppSignaturesMD5().toString()),
92+
CommonItemTitle("getAppUid", AppUtils.getAppUid().toString()),
93+
CommonItemTitle("getApkInfo", AppUtils.getApkInfo(AppUtils.getAppPath()).toString()),
94+
95+
CommonItemClick(R.string.app_install) {
96+
if (AppUtils.isAppInstalled(Config.TEST_PKG)) {
97+
ToastUtils.showShort(R.string.app_install_tips)
98+
} else {
99+
if (!FileUtils.isFileExists(Config.TEST_APK_PATH)) {
100+
ReleaseInstallApkTask(listener).execute()
87101
} else {
88-
if (!FileUtils.isFileExists(Config.TEST_APK_PATH)) {
89-
ReleaseInstallApkTask(listener).execute()
90-
} else {
91-
listener.onReleased()
92-
}
102+
listener.onReleased()
93103
}
94-
},
95-
CommonItemClick(R.string.app_uninstall) {
96-
if (AppUtils.isAppInstalled(Config.TEST_PKG)) {
97-
AppUtils.uninstallApp(Config.TEST_PKG)
98-
} else {
99-
ToastUtils.showShort(R.string.app_uninstall_tips)
100-
}
101-
},
102-
CommonItemClick(R.string.app_launch) {
103-
AppUtils.launchApp(this.packageName)
104-
},
105-
CommonItemClick(R.string.app_relaunch) {
106-
AppUtils.relaunchApp()
107-
},
108-
CommonItemClick(R.string.app_launch_details_settings, true) {
109-
AppUtils.launchAppDetailsSettings()
110-
},
111-
CommonItemClick(R.string.app_exit) {
112-
AppUtils.exitApp()
113104
}
105+
},
106+
CommonItemClick(R.string.app_uninstall) {
107+
if (AppUtils.isAppInstalled(Config.TEST_PKG)) {
108+
AppUtils.uninstallApp(Config.TEST_PKG)
109+
} else {
110+
ToastUtils.showShort(R.string.app_uninstall_tips)
111+
}
112+
},
113+
CommonItemClick(R.string.app_launch) {
114+
AppUtils.launchApp(this.packageName)
115+
},
116+
CommonItemClick(R.string.app_relaunch) {
117+
AppUtils.relaunchApp()
118+
},
119+
CommonItemClick(R.string.app_launch_details_settings, true) {
120+
AppUtils.launchAppDetailsSettings()
121+
},
122+
CommonItemClick(R.string.app_exit) {
123+
AppUtils.exitApp()
124+
}
114125
)
115126
}
116127

@@ -130,7 +141,8 @@ class AppActivity : CommonActivity(), Utils.OnAppStatusChangedListener {
130141
}
131142
}
132143

133-
class ReleaseInstallApkTask(private val mListener: OnReleasedListener) : ThreadUtils.SimpleTask<Unit>() {
144+
class ReleaseInstallApkTask(private val mListener: OnReleasedListener) :
145+
ThreadUtils.SimpleTask<Unit>() {
134146

135147
override fun doInBackground() {
136148
ResourceUtils.copyFileFromAssets("test_install", Config.TEST_APK_PATH)

lib/utilcode/README-CN.md

+2
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ getAppName : 获取 App 名称
7272
getAppPath : 获取 App 路径
7373
getAppVersionName : 获取 App 版本号
7474
getAppVersionCode : 获取 App 版本码
75+
getAppMinSdkVersion : 获取 App 支持最低系统版本号
76+
getAppTargetSdkVersion : 获取 App 目标系统版本号
7577
getAppSignatures : 获取 App 签名
7678
getAppSignaturesSHA1 : 获取应用签名的的 SHA1 值
7779
getAppSignaturesSHA256 : 获取应用签名的的 SHA256 值

lib/utilcode/README.md

+2
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ getAppName
7272
getAppPath
7373
getAppVersionName
7474
getAppVersionCode
75+
getAppMinSdkVersion
76+
getAppTargetSdkVersion
7577
getAppSignatures
7678
getAppSignaturesSHA1
7779
getAppSignaturesSHA256

lib/utilcode/src/main/java/com/blankj/utilcode/util/AppUtils.java

+102-13
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@
1414
import android.os.Build;
1515
import android.util.Log;
1616

17+
import androidx.annotation.NonNull;
18+
import androidx.annotation.Nullable;
19+
1720
import java.io.File;
1821
import java.util.ArrayList;
1922
import java.util.List;
2023

21-
import androidx.annotation.NonNull;
22-
import androidx.annotation.Nullable;
23-
2424
/**
2525
* <pre>
2626
* author: Blankj
@@ -541,6 +541,65 @@ public static int getAppVersionCode(final String packageName) {
541541
}
542542
}
543543

544+
/**
545+
* Return the application's minimum sdk version code.
546+
*
547+
* @return the application's minimum sdk version code
548+
*/
549+
public static int getAppMinSdkVersion() {
550+
return getAppMinSdkVersion(Utils.getApp().getPackageName());
551+
}
552+
553+
/**
554+
* Return the application's minimum sdk version code.
555+
*
556+
* @param packageName The name of the package.
557+
* @return the application's minimum sdk version code
558+
*/
559+
public static int getAppMinSdkVersion(final String packageName) {
560+
if (UtilsBridge.isSpace(packageName)) return -1;
561+
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.N) return -1;
562+
try {
563+
PackageManager pm = Utils.getApp().getPackageManager();
564+
PackageInfo pi = pm.getPackageInfo(packageName, 0);
565+
if (null == pi) return -1;
566+
ApplicationInfo ai = pi.applicationInfo;
567+
return null == ai ? -1 : ai.minSdkVersion;
568+
} catch (PackageManager.NameNotFoundException e) {
569+
e.printStackTrace();
570+
return -1;
571+
}
572+
}
573+
574+
/**
575+
* Return the application's target sdk version code.
576+
*
577+
* @return the application's target sdk version code
578+
*/
579+
public static int getAppTargetSdkVersion() {
580+
return getAppTargetSdkVersion(Utils.getApp().getPackageName());
581+
}
582+
583+
/**
584+
* Return the application's target sdk version code.
585+
*
586+
* @param packageName The name of the package.
587+
* @return the application's target sdk version code
588+
*/
589+
public static int getAppTargetSdkVersion(final String packageName) {
590+
if (UtilsBridge.isSpace(packageName)) return -1;
591+
try {
592+
PackageManager pm = Utils.getApp().getPackageManager();
593+
PackageInfo pi = pm.getPackageInfo(packageName, 0);
594+
if (null == pi) return -1;
595+
ApplicationInfo ai = pi.applicationInfo;
596+
return null == ai ? -1 : ai.targetSdkVersion;
597+
} catch (PackageManager.NameNotFoundException e) {
598+
e.printStackTrace();
599+
return -1;
600+
}
601+
}
602+
544603
/**
545604
* Return the application's signature.
546605
*
@@ -721,6 +780,8 @@ private static List<String> getAppSignaturesHash(final String packageName, final
721780
* <li>path of package</li>
722781
* <li>version name</li>
723782
* <li>version code</li>
783+
* <li>minimum sdk version code</li>
784+
* <li>target sdk version code</li>
724785
* <li>is system</li>
725786
* </ul>
726787
*
@@ -740,6 +801,8 @@ public static AppInfo getAppInfo() {
740801
* <li>path of package</li>
741802
* <li>version name</li>
742803
* <li>version code</li>
804+
* <li>minimum sdk version code</li>
805+
* <li>target sdk version code</li>
743806
* <li>is system</li>
744807
* </ul>
745808
*
@@ -829,27 +892,34 @@ private static AppInfo getBean(final PackageManager pm, final PackageInfo pi) {
829892
String packageName = pi.packageName;
830893
ApplicationInfo ai = pi.applicationInfo;
831894
if (ai == null) {
832-
return new AppInfo(packageName, "", null, "", versionName, versionCode, false);
895+
return new AppInfo(packageName, "", null, "", versionName, versionCode, -1, -1, false);
833896
}
834897
String name = ai.loadLabel(pm).toString();
835898
Drawable icon = ai.loadIcon(pm);
836899
String packagePath = ai.sourceDir;
900+
int minSdkVersion = -1;
901+
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
902+
minSdkVersion = ai.minSdkVersion;
903+
}
904+
int targetSdkVersion = ai.targetSdkVersion;
837905
boolean isSystem = (ApplicationInfo.FLAG_SYSTEM & ai.flags) != 0;
838-
return new AppInfo(packageName, name, icon, packagePath, versionName, versionCode, isSystem);
906+
return new AppInfo(packageName, name, icon, packagePath, versionName, versionCode, minSdkVersion, targetSdkVersion, isSystem);
839907
}
840908

841909
/**
842910
* The application's information.
843911
*/
844912
public static class AppInfo {
845913

846-
private String packageName;
847-
private String name;
914+
private String packageName;
915+
private String name;
848916
private Drawable icon;
849-
private String packagePath;
850-
private String versionName;
851-
private int versionCode;
852-
private boolean isSystem;
917+
private String packagePath;
918+
private String versionName;
919+
private int versionCode;
920+
private int minSdkVersion;
921+
private int targetSdkVersion;
922+
private boolean isSystem;
853923

854924
public Drawable getIcon() {
855925
return icon;
@@ -907,14 +977,31 @@ public void setVersionName(final String versionName) {
907977
this.versionName = versionName;
908978
}
909979

910-
public AppInfo(String packageName, String name, Drawable icon, String packagePath,
911-
String versionName, int versionCode, boolean isSystem) {
980+
public int getMinSdkVersion() {
981+
return minSdkVersion;
982+
}
983+
984+
public void setMinSdkVersion(int minSdkVersion) {
985+
this.minSdkVersion = minSdkVersion;
986+
}
987+
988+
public int getTargetSdkVersion() {
989+
return targetSdkVersion;
990+
}
991+
992+
public void setTargetSdkVersion(int targetSdkVersion) {
993+
this.targetSdkVersion = targetSdkVersion;
994+
}
995+
996+
public AppInfo(String packageName, String name, Drawable icon, String packagePath, String versionName, int versionCode, int minSdkVersion, int targetSdkVersion, boolean isSystem) {
912997
this.setName(name);
913998
this.setIcon(icon);
914999
this.setPackageName(packageName);
9151000
this.setPackagePath(packagePath);
9161001
this.setVersionName(versionName);
9171002
this.setVersionCode(versionCode);
1003+
this.setMinSdkVersion(minSdkVersion);
1004+
this.setTargetSdkVersion(targetSdkVersion);
9181005
this.setSystem(isSystem);
9191006
}
9201007

@@ -928,6 +1015,8 @@ public String toString() {
9281015
"\n app path: " + getPackagePath() +
9291016
"\n app v name: " + getVersionName() +
9301017
"\n app v code: " + getVersionCode() +
1018+
"\n app v min: " + getMinSdkVersion() +
1019+
"\n app v target: " + getTargetSdkVersion() +
9311020
"\n is system: " + isSystem() +
9321021
"\n}";
9331022
}

lib/utildebug/src/main/java/com/blankj/utildebug/debug/tool/appInfo/AppInfoItem.java

+7-8
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,19 @@
55
import android.view.View.OnClickListener;
66
import android.widget.TextView;
77

8+
import androidx.annotation.NonNull;
9+
import androidx.annotation.StringRes;
10+
811
import com.blankj.utilcode.util.AppUtils;
912
import com.blankj.utilcode.util.ClickUtils;
1013
import com.blankj.utilcode.util.StringUtils;
11-
import com.blankj.utildebug.DebugUtils;
1214
import com.blankj.utildebug.R;
1315
import com.blankj.utildebug.base.rv.BaseItem;
1416
import com.blankj.utildebug.base.rv.ItemViewHolder;
1517

1618
import java.util.ArrayList;
1719
import java.util.List;
1820

19-
import androidx.annotation.NonNull;
20-
import androidx.annotation.StringRes;
21-
2221
/**
2322
* <pre>
2423
* author: blankj
@@ -29,8 +28,8 @@
2928
*/
3029
public class AppInfoItem extends BaseItem<AppInfoItem> {
3130

32-
private String mTitle;
33-
private String mContent;
31+
private String mTitle;
32+
private String mContent;
3433
private OnClickListener mListener;
3534

3635
private TextView titleTv;
@@ -71,9 +70,9 @@ public static List<AppInfoItem> getAppInfoItems() {
7170
appInfoItems.add(new AppInfoItem(R.string.du_app_info_version_name, AppUtils.getAppVersionName()));
7271
appInfoItems.add(new AppInfoItem(R.string.du_app_info_version_code, String.valueOf(AppUtils.getAppVersionCode())));
7372
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
74-
appInfoItems.add(new AppInfoItem(R.string.du_app_info_min_sdk_version, String.valueOf(DebugUtils.getApp().getApplicationInfo().minSdkVersion)));
73+
appInfoItems.add(new AppInfoItem(R.string.du_app_info_min_sdk_version, String.valueOf(AppUtils.getAppMinSdkVersion())));
7574
}
76-
appInfoItems.add(new AppInfoItem(R.string.du_app_info_target_sdk_version, String.valueOf(DebugUtils.getApp().getApplicationInfo().targetSdkVersion)));
75+
appInfoItems.add(new AppInfoItem(R.string.du_app_info_target_sdk_version, String.valueOf(AppUtils.getAppTargetSdkVersion())));
7776
appInfoItems.add(new AppInfoItem(R.string.du_app_info_open_app_info_page, "", new OnClickListener() {
7877
@Override
7978
public void onClick(View v) {

0 commit comments

Comments
 (0)