adb shell dumpsys package
1 需求获取手机中声明的所有权限perm[issions]: dump permissions获取手机中申请指定权限的所有应用permission [name ...]: dump declaration and use of given permission获取手机所有应用的providerprov[iders]: dump content providers获取手机中共享指定UID的所有应用s[hared-users]: dump shared user IDs获取指定应用的所有信息package.name: info about given package判断应用是否获取指定权限check-permission permission package [user]: does pkg hold perm?获取服务需要的权限service-permissions: dump permissions required by services获取手机所有activityadb shell dumpsys package --all-components | findstr Package.\[ activitadb shell dumpsys package --all-components | findstr \/.*activit注意三者区别adb shell dumpsys package默认值adb shell dumpsys package --all-components包含四大组件adb shell dumpsys package -f --all-components包含四大组件以及intent-filter2 语法Package manager dump options: [-h] [-f] [--checkin] [--all-components] [cmd] ... --checkin: dump for a checkin -f: print details of intent filters -h: print this help --all-components: include all component names in package dump cmd may be one of: apex: list active APEXes and APEX session state l[ibraries]: list known shared libraries f[eatures]: list device features k[eysets]: print known keysets r[esolvers] [activity|service|receiver|content]: dump intent resolvers perm[issions]: dump permissions permission [name ...]: dump declaration and use of given permission pref[erred]: print preferred package settings preferred-xml [--full]: print preferred package settings as xml prov[iders]: dump content providers p[ackages]: dump installed packages q[ueries]: dump app queryability calculations s[hared-users]: dump shared user IDs m[essages]: print collected runtime messages v[erifiers]: print package verifier info d[omain-preferred-apps]: print domains preferred apps i[ntent-filter-verifiers]|ifv: print intent filter verifier info version: print database version info write: write current settings now installs: details about install sessions check-permission permission package [user]: does pkg hold perm? dexopt: dump dexopt state compiler-stats: dump compiler statistics service-permissions: dump permissions required by services package.name: info about given package3 示例获取手机中拥有指定权限的所有应用列表adb shell dumpsys package permission android.permission.QUERY_ALL_PACKAGESPackgesAndroidManifest.xml的uses-permission声明的权限Shared usersAndroidManifest.xml的sharedUserId获取的权限Permissions:Permission [android.permission.QUERY_ALL_PACKAGES] (409409c):sourcePackageandroiduid1000 gidsnull type0 protnormalpermPermission{e483aa5 android.permission.QUERY_ALL_PACKAGES}Packages:Package [com.hanweb.android.xazwfw.activity] (d9d1053):userId10316pkgPackage{a0b6d90 com.hanweb.android.xazwfw.activity}codePath/data/app/~~0EAqfRY94-05y1IBQKIMKw/com.hanweb.android.xazwfw.activity-_e3ijB3tmHEJBG8j1UA4fQversionCode120 minSdk21 targetSdk28versionName2.2.3splits[base]apkSigningVersion2applicationInfoApplicationInfo{a0b6d90 com.hanweb.android.xazwfw.activity}flags[ HAS_CODE ALLOW_CLEAR_USER_DATA VM_SAFE_MODE ]privateFlags[ PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE PRIVATE_FLAG_REQUEST_LEGACY_EXTERNAL_STORAGE PARTIALLY_DIRECT_BOOT_AWARE PRIVATE_FLAG_ALLOW_NATIVE_HEAP_POINTER_TAGGING ]forceQueryablefalsequeriesPackages[]dataDir/data/user/0/com.hanweb.android.xazwfw.activitysupportsScreens[small, medium, large, xlarge, resizeable, anyDensity]usesLibraries:android.test.baseusesOptionalLibraries:org.apache.http.legacyusesLibraryFiles:/system/framework/android.test.base.jar/system/framework/org.apache.http.legacy.jartimeStamp2021-12-07 08:51:08firstInstallTime2021-12-07 08:51:14lastUpdateTime2021-12-07 08:51:14installerPackageNamezte.com.marketsignaturesPackageSignatures{f9fb689 version:2, signatures:[1916398], past signatures:[]}installPermissionsFixedtruepkgFlags[ HAS_CODE ALLOW_CLEAR_USER_DATA VM_SAFE_MODE ]declared permissions:requested permissions:android.permission.QUERY_ALL_PACKAGESinstall permissions:android.permission.QUERY_ALL_PACKAGES: grantedtrueUser 0: ceDataInode682292 installedtrue hiddenfalse suspendedfalse distractionFlags0 stoppedtrue notLaunchedfalse enabled0 instantfalse virtualfalseoverlay paths:/product/overlay/NavigationBarMode3Button/NavigationBarMode3ButtonOverlay.apkgids[3003]runtime permissions:Shared users:SharedUser [android.uid.systemui] (83f0702):userId10109PackagesPackageSetting{12c52e7 com.android.systemui/10109}PackageSetting{5fce2e3 com.zte.cn.zteshare/10109}install permissions:android.permission.QUERY_ALL_PACKAGES: grantedtrueUser 0:gids[1077, 1065, 3002, 3003, 3001, 3006]runtime permissions:3.X 用途获取手机中拥有指定权限的、且包名带android和qti的所有应用列表adb shell dumpsys package permission android.permission.INTERNET | findstr /C:Package [ | findstr android qtiadb shell dumpsys package permission android.permission.INTERNET | findstr /C:Package [ | for /f tokens2 delims[] %i in (more) do echo %i3.X 用途三获取某个应用所有权限列表adb shell dumpsys package 包名declared permissions 自定义权限requested permissions 请求权限install permissions 安装权限runtime permissions 运行时权限参考资料三十六 从dumpsys package看Android权限_JT的专栏-CSDN博客_dumpsys package用途四adb shell dumpsys package queries管理软件包可见性 | Android 开发者 | Android Developers思路1查所有应用adb shell dumpsys package --all-components思路2查指定应用adb shell dumpsys package --all-components package.name用途获取手机所有activity三者区别adb shell dumpsys package --all-components每个应用内容既包括权限又包括四大组件adb shell dumpsys package默认设置每个应用内容只有权限没有四大组件adb shell dumpsys package --all-components packages只包括已安装应用的权限和四大组件正确命令adb shell dumpsys package --all-components | findstr Package.\[ activitimport java.io.*; import java.util.ArrayList; /** * 用途自动获取手机所有应用的所有activity并启动上述activity * p * 第一步获取手机所有应用的所有组件adb shell dumpsys package --all-components * 第二步提取手机所有应用的所有activity * 第三步依次启动手机所有应用所有activityadb shell am start-activity */ public class Test { public static void main(String[] args) { ArrayListString arrayList new ArrayListString(); ArrayListString arrayList2 new ArrayListString(); // 第一步获取手机所有应用的所有组件adb shell dumpsys package --all-components try { BufferedWriter bw new BufferedWriter(new FileWriter(D:/p2.txt)); InputStreamReader ir new InputStreamReader(Runtime.getRuntime().exec(cmd /c adb shell dumpsys package --all-components).getInputStream(), GBK); BufferedReader br new BufferedReader(ir); String line null; while ((line br.readLine()) ! null) { bw.write(line \r\n); } bw.flush(); bw.close(); } catch (IOException e) { e.printStackTrace(); } // 第二步提取手机所有应用的所有activity try { FileInputStream fileInputStream new FileInputStream(D:/p2.txt); InputStreamReader inputStreamReader new InputStreamReader(fileInputStream); BufferedReader bufferedReader new BufferedReader(inputStreamReader); String line null; while ((line bufferedReader.readLine()) ! null) { arrayList.add(line); } } catch (IOException e) { e.printStackTrace(); } for (int i 0; i arrayList.size(); i) { // activities:/services:/receivers:/providers: String keyword services:; if (arrayList.get(i).contains(keyword)) { // com.zte.heartyservice/.examination.ExamActivity 会导致退出开发者选项adb口也会消失 // android/com.android.internal.app.ShutdownActivity 设备关机 // com.unisoc/.internal.app.ShutdownCountdownActivity 设备关机 while (arrayList.get(i 1).contains(/) !arrayList.get(i 1).contains(ExamActivity) !arrayList.get(i 1).contains(ShutdownActivity)) { arrayList2.add(arrayList.get(i 1)); // 单独调试存在数组越界可能 i; } } } // 第三步依次启动手机所有应用所有activityadb shell am start-activity for (String s : arrayList2) { // start-activity/start-service/broadcast String cmd cmd /c adb shell am start-service s; System.out.println(s); try { Runtime.getRuntime().exec(cmd); Thread.sleep(1000); } catch (IOException | InterruptedException e) { e.printStackTrace(); } } } }4 参考资料Android 权限的一些细节_光着脚丫行一生的博客-CSDN博客_android.uid.bluetoothhttps://weltest.blog.csdn.net/article/details/65627938