Skip to content

Commit 43e76ff

Browse files
committed
see 10/27 log
1 parent a509f94 commit 43e76ff

File tree

10 files changed

+106
-62
lines changed

10 files changed

+106
-62
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
* `20/10/27` [add] Fix AppUtils#getAppSignatures. Add DeviceUtils#isDevelopmentSettingsEnabled. Publish v1.30.2.
12
* `20/10/26` [add] Fix AppUtils#isAppForeground. Publish v1.30.1.
23
* `20/10/24` [add] Publish v1.30.0.
34
* `20/10/23` [fix] LanguageUtils crash on some device.

buildSrc/src/main/groovy/Config.groovy

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ class Config {
1414
static compileSdkVersion = 29
1515
static minSdkVersion = 14
1616
static targetSdkVersion = 29
17-
static versionCode = 1_030_001
18-
static versionName = '1.30.1'// E.g. 1.9.72 => 1,009,072
17+
static versionCode = 1_030_002
18+
static versionName = '1.30.2'// E.g. 1.9.72 => 1,009,072
1919

2020
// lib version
2121
static gradlePluginVersion = '3.5.0'

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,9 @@ class AppActivity : CommonActivity(), Utils.OnAppStatusChangedListener {
7575
CommonItemTitle("getAppPath", AppUtils.getAppPath()),
7676
CommonItemTitle("getAppVersionName", AppUtils.getAppVersionName()),
7777
CommonItemTitle("getAppVersionCode", AppUtils.getAppVersionCode().toString()),
78-
CommonItemTitle("getAppSignatureSHA1", AppUtils.getAppSignatureSHA1()),
79-
CommonItemTitle("getAppSignatureSHA256", AppUtils.getAppSignatureSHA256()),
80-
CommonItemTitle("getAppSignatureMD5", AppUtils.getAppSignatureMD5()),
78+
CommonItemTitle("getAppSignaturesSHA1", AppUtils.getAppSignaturesSHA1().toString()),
79+
CommonItemTitle("getAppSignaturesSHA256", AppUtils.getAppSignaturesSHA256().toString()),
80+
CommonItemTitle("getAppSignaturesMD5", AppUtils.getAppSignaturesMD5().toString()),
8181
CommonItemTitle("getAppUid", AppUtils.getAppUid().toString()),
8282
CommonItemTitle("getApkInfo", AppUtils.getApkInfo(AppUtils.getAppPath()).toString()),
8383

feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/device/DeviceActivity.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ class DeviceActivity : CommonActivity() {
4646
add(CommonItemTitle("getABIs", Arrays.asList(*DeviceUtils.getABIs()).toString()))
4747
add(CommonItemTitle("isTablet", DeviceUtils.isTablet().toString()))
4848
add(CommonItemTitle("isEmulator", DeviceUtils.isEmulator().toString()))
49+
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
50+
add(CommonItemTitle("isDevelopmentSettingsEnabled", DeviceUtils.isDevelopmentSettingsEnabled().toString()))
51+
}
4952
add(CommonItemTitle("getUniqueDeviceId", DeviceUtils.getUniqueDeviceId("util")))
5053
add(CommonItemTitle("isSameDevice", DeviceUtils.isSameDevice(DeviceUtils.getUniqueDeviceId()).toString()))
5154
}

lib/utilcode/README-CN.md

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
Gradle:
44
```groovy
5-
implementation 'com.blankj:utilcode:1.30.1'
5+
implementation 'com.blankj:utilcode:1.30.2'
66
77
// if u use AndroidX, use the following
8-
implementation 'com.blankj:utilcodex:1.30.1'
8+
implementation 'com.blankj:utilcodex:1.30.2'
99
```
1010

1111

@@ -71,10 +71,10 @@ getAppName : 获取 App 名称
7171
getAppPath : 获取 App 路径
7272
getAppVersionName : 获取 App 版本号
7373
getAppVersionCode : 获取 App 版本码
74-
getAppSignature : 获取 App 签名
75-
getAppSignatureSHA1 : 获取应用签名的的 SHA1 值
76-
getAppSignatureSHA256 : 获取应用签名的的 SHA256 值
77-
getAppSignatureMD5 : 获取应用签名的的 MD5 值
74+
getAppSignatures : 获取 App 签名
75+
getAppSignaturesSHA1 : 获取应用签名的的 SHA1 值
76+
getAppSignaturesSHA256 : 获取应用签名的的 SHA256 值
77+
getAppSignaturesMD5 : 获取应用签名的的 MD5 值
7878
getAppInfo : 获取 App 信息
7979
getAppsInfo : 获取所有已安装 App 信息
8080
getApkInfo : 获取 Apk 信息
@@ -401,19 +401,20 @@ isValid: 是否有效
401401

402402
* ### 设备相关 -> [DeviceUtils.java][device.java] -> [Demo][device.demo]
403403
```
404-
isDeviceRooted : 判断设备是否 rooted
405-
isAdbEnabled : 判断设备 ADB 是否可用
406-
getSDKVersionName: 获取设备系统版本号
407-
getSDKVersionCode: 获取设备系统版本码
408-
getAndroidID : 获取设备 AndroidID
409-
getMacAddress : 获取设备 MAC 地址
410-
getManufacturer : 获取设备厂商
411-
getModel : 获取设备型号
412-
getABIs : 获取设备 ABIs
413-
isTablet : 判断是否是平板
414-
isEmulator : 判断是否是模拟器
415-
getUniqueDeviceId: 获取唯一设备 ID
416-
isSameDevice : 判断是否同一设备
404+
isDeviceRooted : 判断设备是否 rooted
405+
isAdbEnabled : 判断设备 ADB 是否可用
406+
getSDKVersionName : 获取设备系统版本号
407+
getSDKVersionCode : 获取设备系统版本码
408+
getAndroidID : 获取设备 AndroidID
409+
getMacAddress : 获取设备 MAC 地址
410+
getManufacturer : 获取设备厂商
411+
getModel : 获取设备型号
412+
getABIs : 获取设备 ABIs
413+
isTablet : 判断是否是平板
414+
isEmulator : 判断是否是模拟器
415+
isDevelopmentSettingsEnabled: 开发者选项是否打开
416+
getUniqueDeviceId : 获取唯一设备 ID
417+
isSameDevice : 判断是否同一设备
417418
```
418419

419420
* ### 闪光灯相关 -> [FlashlightUtils.java][flashlight.java] -> [Demo][flashlight.demo]

lib/utilcode/README.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
Gradle:
44
```groovy
5-
implementation 'com.blankj:utilcode:1.30.1'
5+
implementation 'com.blankj:utilcode:1.30.2'
66
77
// if u use AndroidX, use the following
8-
implementation 'com.blankj:utilcodex:1.30.1'
8+
implementation 'com.blankj:utilcodex:1.30.2'
99
```
1010

1111

@@ -71,10 +71,10 @@ getAppName
7171
getAppPath
7272
getAppVersionName
7373
getAppVersionCode
74-
getAppSignature
75-
getAppSignatureSHA1
76-
getAppSignatureSHA256
77-
getAppSignatureMD5
74+
getAppSignatures
75+
getAppSignaturesSHA1
76+
getAppSignaturesSHA256
77+
getAppSignaturesMD5
7878
getAppInfo
7979
getAppsInfo
8080
getApkInfo
@@ -412,6 +412,7 @@ getModel
412412
getABIs
413413
isTablet
414414
isEmulator
415+
isDevelopmentSettingsEnabled
415416
getUniqueDeviceId
416417
isSameDevice
417418
```

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

Lines changed: 54 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import android.content.pm.PackageInfo;
99
import android.content.pm.PackageManager;
1010
import android.content.pm.Signature;
11+
import android.content.pm.SigningInfo;
1112
import android.graphics.drawable.Drawable;
1213
import android.net.Uri;
1314
import android.os.Build;
@@ -498,8 +499,8 @@ public static int getAppVersionCode(final String packageName) {
498499
*
499500
* @return the application's signature
500501
*/
501-
public static Signature[] getAppSignature() {
502-
return getAppSignature(Utils.getApp().getPackageName());
502+
public static Signature[] getAppSignatures() {
503+
return getAppSignatures(Utils.getApp().getPackageName());
503504
}
504505

505506
/**
@@ -508,17 +509,26 @@ public static Signature[] getAppSignature() {
508509
* @param packageName The name of the package.
509510
* @return the application's signature
510511
*/
511-
public static Signature[] getAppSignature(final String packageName) {
512+
public static Signature[] getAppSignatures(final String packageName) {
512513
if (UtilsBridge.isSpace(packageName)) return null;
513514
try {
514515
PackageManager pm = Utils.getApp().getPackageManager();
515-
PackageInfo pi;
516516
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
517-
pi = pm.getPackageInfo(packageName, PackageManager.GET_SIGNING_CERTIFICATES);
517+
PackageInfo pi = pm.getPackageInfo(packageName, PackageManager.GET_SIGNING_CERTIFICATES);
518+
if (pi == null) return null;
519+
520+
SigningInfo signingInfo = pi.signingInfo;
521+
if (signingInfo.hasMultipleSigners()) {
522+
return signingInfo.getApkContentsSigners();
523+
} else {
524+
return signingInfo.getSigningCertificateHistory();
525+
}
518526
} else {
519-
pi = pm.getPackageInfo(packageName, PackageManager.GET_SIGNATURES);
527+
PackageInfo pi = pm.getPackageInfo(packageName, PackageManager.GET_SIGNATURES);
528+
if (pi == null) return null;
529+
530+
return pi.signatures;
520531
}
521-
return pi == null ? null : pi.signatures;
522532
} catch (PackageManager.NameNotFoundException e) {
523533
e.printStackTrace();
524534
return null;
@@ -531,25 +541,34 @@ public static Signature[] getAppSignature(final String packageName) {
531541
* @param file The file.
532542
* @return the application's signature
533543
*/
534-
public static Signature[] getAppSignature(final File file) {
544+
public static Signature[] getAppSignatures(final File file) {
535545
if (file == null) return null;
536546
PackageManager pm = Utils.getApp().getPackageManager();
537-
PackageInfo pi;
538547
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
539-
pi = pm.getPackageArchiveInfo(file.getAbsolutePath(), PackageManager.GET_SIGNING_CERTIFICATES);
548+
PackageInfo pi = pm.getPackageArchiveInfo(file.getAbsolutePath(), PackageManager.GET_SIGNING_CERTIFICATES);
549+
if (pi == null) return null;
550+
551+
SigningInfo signingInfo = pi.signingInfo;
552+
if (signingInfo.hasMultipleSigners()) {
553+
return signingInfo.getApkContentsSigners();
554+
} else {
555+
return signingInfo.getSigningCertificateHistory();
556+
}
540557
} else {
541-
pi = pm.getPackageArchiveInfo(file.getAbsolutePath(), PackageManager.GET_SIGNATURES);
558+
PackageInfo pi = pm.getPackageArchiveInfo(file.getAbsolutePath(), PackageManager.GET_SIGNATURES);
559+
if (pi == null) return null;
560+
561+
return pi.signatures;
542562
}
543-
return pi == null ? null : pi.signatures;
544563
}
545564

546565
/**
547566
* Return the application's signature for SHA1 value.
548567
*
549568
* @return the application's signature for SHA1 value
550569
*/
551-
public static String getAppSignatureSHA1() {
552-
return getAppSignatureSHA1(Utils.getApp().getPackageName());
570+
public static List<String> getAppSignaturesSHA1() {
571+
return getAppSignaturesSHA1(Utils.getApp().getPackageName());
553572
}
554573

555574
/**
@@ -558,17 +577,17 @@ public static String getAppSignatureSHA1() {
558577
* @param packageName The name of the package.
559578
* @return the application's signature for SHA1 value
560579
*/
561-
public static String getAppSignatureSHA1(final String packageName) {
562-
return getAppSignatureHash(packageName, "SHA1");
580+
public static List<String> getAppSignaturesSHA1(final String packageName) {
581+
return getAppSignaturesHash(packageName, "SHA1");
563582
}
564583

565584
/**
566585
* Return the application's signature for SHA256 value.
567586
*
568587
* @return the application's signature for SHA256 value
569588
*/
570-
public static String getAppSignatureSHA256() {
571-
return getAppSignatureSHA256(Utils.getApp().getPackageName());
589+
public static List<String> getAppSignaturesSHA256() {
590+
return getAppSignaturesSHA256(Utils.getApp().getPackageName());
572591
}
573592

574593
/**
@@ -577,17 +596,17 @@ public static String getAppSignatureSHA256() {
577596
* @param packageName The name of the package.
578597
* @return the application's signature for SHA256 value
579598
*/
580-
public static String getAppSignatureSHA256(final String packageName) {
581-
return getAppSignatureHash(packageName, "SHA256");
599+
public static List<String> getAppSignaturesSHA256(final String packageName) {
600+
return getAppSignaturesHash(packageName, "SHA256");
582601
}
583602

584603
/**
585604
* Return the application's signature for MD5 value.
586605
*
587606
* @return the application's signature for MD5 value
588607
*/
589-
public static String getAppSignatureMD5() {
590-
return getAppSignatureMD5(Utils.getApp().getPackageName());
608+
public static List<String> getAppSignaturesMD5() {
609+
return getAppSignaturesMD5(Utils.getApp().getPackageName());
591610
}
592611

593612
/**
@@ -596,11 +615,10 @@ public static String getAppSignatureMD5() {
596615
* @param packageName The name of the package.
597616
* @return the application's signature for MD5 value
598617
*/
599-
public static String getAppSignatureMD5(final String packageName) {
600-
return getAppSignatureHash(packageName, "MD5");
618+
public static List<String> getAppSignaturesMD5(final String packageName) {
619+
return getAppSignaturesHash(packageName, "MD5");
601620
}
602621

603-
604622
/**
605623
* Return the application's user-ID.
606624
*
@@ -625,12 +643,17 @@ public static int getAppUid(String pkgName) {
625643
}
626644
}
627645

628-
private static String getAppSignatureHash(final String packageName, final String algorithm) {
629-
if (UtilsBridge.isSpace(packageName)) return "";
630-
Signature[] signature = getAppSignature(packageName);
631-
if (signature == null || signature.length <= 0) return "";
632-
return UtilsBridge.bytes2HexString(UtilsBridge.hashTemplate(signature[0].toByteArray(), algorithm))
633-
.replaceAll("(?<=[0-9A-F]{2})[0-9A-F]{2}", ":$0");
646+
private static List<String> getAppSignaturesHash(final String packageName, final String algorithm) {
647+
ArrayList<String> result = new ArrayList<>();
648+
if (UtilsBridge.isSpace(packageName)) return result;
649+
Signature[] signatures = getAppSignatures(packageName);
650+
if (signatures == null || signatures.length <= 0) return result;
651+
for (Signature signature : signatures) {
652+
String hash = UtilsBridge.bytes2HexString(UtilsBridge.hashTemplate(signature.toByteArray(), algorithm))
653+
.replaceAll("(?<=[0-9A-F]{2})[0-9A-F]{2}", ":$0");
654+
result.add(hash);
655+
}
656+
return result;
634657
}
635658

636659
/**

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,19 @@ public static boolean isEmulator() {
387387
return false;
388388
}
389389

390+
/**
391+
* Whether user has enabled development settings.
392+
*
393+
* @return whether user has enabled development settings.
394+
*/
395+
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
396+
public static boolean isDevelopmentSettingsEnabled() {
397+
return Settings.Global.getInt(
398+
Utils.getApp().getContentResolver(),
399+
Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0
400+
) > 0;
401+
}
402+
390403

391404
private static final String KEY_UDID = "KEY_UDID";
392405
private volatile static String udid;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ public static void launchAppDetailsSettings() {
210210
* @return the single {@link PermissionUtils} instance
211211
*/
212212
public static PermissionUtils permissionGroup(@PermissionGroup final String... permissions) {
213-
return new PermissionUtils(permissions);
213+
return permission(permissions);
214214
}
215215

216216
/**

lib/utilcode/src/test/java/com/blankj/utilcode/util/ObjectUtilsTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import android.support.v4.util.LongSparseArray;
44
import android.support.v4.util.SimpleArrayMap;
5+
import android.text.Editable;
6+
import android.text.SpannableStringBuilder;
57
import android.util.SparseArray;
68
import android.util.SparseBooleanArray;
79
import android.util.SparseIntArray;

0 commit comments

Comments
 (0)