diff --git a/app/build.gradle b/app/build.gradle index 88d20fb..5ac0273 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,14 +6,14 @@ plugins { android { namespace 'com.trustdevice.android.demo' - compileSdk 34 + compileSdk 36 defaultConfig { applicationId "com.trustdevice.android.demo" minSdk 21 - targetSdk 34 - versionCode 12 - versionName "1.1.3" + targetSdk 36 + versionCode 114 + versionName "1.1.4" ndk { abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } @@ -48,6 +48,13 @@ android { viewBinding true dataBinding true } + + dependenciesInfo { + // Disables dependency metadata when building APKs. + includeInApk = false + // Disables dependency metadata when building Android App Bundles. + includeInBundle = false + } } dependencies { diff --git a/app/src/main/kotlin/cn/tongdun/android/activitys/ItemListActivity.kt b/app/src/main/kotlin/cn/tongdun/android/activitys/ItemListActivity.kt index bf402f0..9df7e83 100644 --- a/app/src/main/kotlin/cn/tongdun/android/activitys/ItemListActivity.kt +++ b/app/src/main/kotlin/cn/tongdun/android/activitys/ItemListActivity.kt @@ -81,13 +81,14 @@ class ItemListActivity : BaseActivity() { if (info == null) { continue } - if (!showSystemApp && isSystemApp(info.applicationInfo)) { + val applicationInfo = info.applicationInfo ?: continue + if (!showSystemApp && isSystemApp(applicationInfo)) { continue } val packageName = info.packageName val versionName = info.versionName - val icon = info.applicationInfo.loadIcon(packageManager) - val appName = packageManager.getApplicationLabel(info.applicationInfo).toString() + val icon = info.applicationInfo?.loadIcon(packageManager) + val appName = packageManager.getApplicationLabel(applicationInfo).toString() mItemData.add(AppItemData(icon, appName, packageName, versionName)) } } diff --git a/trustdevice/build.gradle b/trustdevice/build.gradle index 3f52aeb..a8ee290 100644 --- a/trustdevice/build.gradle +++ b/trustdevice/build.gradle @@ -22,12 +22,12 @@ afterEvaluate { android { namespace 'cn.tongdun.mobrisk' - compileSdk 34 + compileSdk 36 ndkVersion "25.2.9519653" defaultConfig { minSdk 21 - targetSdk 34 + targetSdk 36 externalNativeBuild{ cmake { diff --git a/trustdevice/src/main/java/cn/tongdun/mobrisk/core/FMCore.kt b/trustdevice/src/main/java/cn/tongdun/mobrisk/core/FMCore.kt index bf7038c..3dedb00 100644 --- a/trustdevice/src/main/java/cn/tongdun/mobrisk/core/FMCore.kt +++ b/trustdevice/src/main/java/cn/tongdun/mobrisk/core/FMCore.kt @@ -191,7 +191,7 @@ class FMCore private constructor() { } private fun collectorPackageListInfo() { - val appListCollector = AppListCollector(mContext.packageManager) + val appListCollector = AppListCollector(mContext) mDeviceInfo.appList = appListCollector.getAppList() mDeviceInfo.systemAppList = appListCollector.getSystemAppList() } diff --git a/trustdevice/src/main/java/cn/tongdun/mobrisk/core/collectors/AppListCollector.kt b/trustdevice/src/main/java/cn/tongdun/mobrisk/core/collectors/AppListCollector.kt index 1375797..d3fb72d 100644 --- a/trustdevice/src/main/java/cn/tongdun/mobrisk/core/collectors/AppListCollector.kt +++ b/trustdevice/src/main/java/cn/tongdun/mobrisk/core/collectors/AppListCollector.kt @@ -1,9 +1,11 @@ package cn.tongdun.mobrisk.core.collectors import android.annotation.SuppressLint +import android.content.Context import android.content.pm.ApplicationInfo import android.content.pm.PackageInfo import android.content.pm.PackageManager +import android.os.Build import android.text.TextUtils import cn.tongdun.mobrisk.core.tools.executeSafe @@ -19,31 +21,47 @@ interface AppListDataInterface { } @SuppressLint("QueryPermissionsNeeded") -class AppListCollector(packageManager: PackageManager) : AppListDataInterface { +class AppListCollector(context: Context) : AppListDataInterface { private val appList: MutableList = ArrayList() private val systemAppList: MutableList = ArrayList() init { - executeSafe { - packageManager.getInstalledPackages(PackageManager.GET_ACTIVITIES) - .filter { - isSystemApp(it) - }.map { - appList.add(it.packageName) + if (hasQueryAllPackagesPermission(context)) { + val packageManager = context.packageManager + executeSafe { + packageManager.getInstalledPackages(PackageManager.GET_ACTIVITIES) + .filter { + isSystemApp(it) + }.map { + appList.add(it.packageName) + } + packageManager.getInstalledPackages(PackageManager.GET_META_DATA).fold( + Pair(systemAppList, appList) + ) { (systemList, appList), packageInfo -> + if (isSystemApp(packageInfo)) { + systemList.add(packageInfo.packageName) + } else { + appList.add(packageInfo.packageName) + } + Pair(systemList, appList) } - packageManager.getInstalledPackages(PackageManager.GET_META_DATA).fold( - Pair(systemAppList, appList) - ) { (systemList, appList), packageInfo -> - if (isSystemApp(packageInfo)) { - systemList.add(packageInfo.packageName) - } else { - appList.add(packageInfo.packageName) - } - Pair(systemList, appList) } } } + private fun hasQueryAllPackagesPermission(context: Context): Boolean { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) { + return true + } + return executeSafe({ + val packageInfo = context.packageManager.getPackageInfo( + context.packageName, + PackageManager.GET_PERMISSIONS + ) + packageInfo.requestedPermissions?.contains(android.Manifest.permission.QUERY_ALL_PACKAGES) == true + }, false) + } + @SuppressLint("QueryPermissionsNeeded") override fun getAppList(): String { return TextUtils.join(",", appList) @@ -54,10 +72,9 @@ class AppListCollector(packageManager: PackageManager) : AppListDataInterface { } private fun isSystemApp(packageInfo: PackageInfo): Boolean { - val isSysApp = - packageInfo.applicationInfo.flags and ApplicationInfo.FLAG_SYSTEM == ApplicationInfo.FLAG_SYSTEM - val isSysUpd = - packageInfo.applicationInfo.flags and ApplicationInfo.FLAG_UPDATED_SYSTEM_APP == ApplicationInfo.FLAG_UPDATED_SYSTEM_APP + val appInfo = packageInfo.applicationInfo ?: return false + val isSysApp = appInfo.flags and ApplicationInfo.FLAG_SYSTEM == ApplicationInfo.FLAG_SYSTEM + val isSysUpd = appInfo.flags and ApplicationInfo.FLAG_UPDATED_SYSTEM_APP == ApplicationInfo.FLAG_UPDATED_SYSTEM_APP return isSysApp || isSysUpd }