android获取包名的几种方法
- dumpsys activity 获取包名和MainActivity
adb shell dumpsys activity activities
先启动需要的查找的apk,再敲入以上命令,在stack #1下查找cmp=,其后的内容为包名/MainActivity
intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.oray.sunlogin.service/com.oray.sunlogin.application.Main}
注:dumpsys activity可以查看系统的所有的活动,包括服务、广播等,加上activities则只返回栈上的activity。
- dumpsys window获取当前显示的包名和activity
adb shell dumpsys window w | findstr \/ | findstr name=
先打开需要查找的apk后,再敲入以上命令
备注:此方法获取当前显示的包名和activity,不一定是MainActivity。
- Logcat
C:\Users\Administrator>adb shell
root@msm8916_32_512:/ # logcat | grep android.intent.category.LAUNCHER
root@msm8916_32_512:/ # logcat | grep START
、
- pm获取包名
adb shell pm list package -f
将获取手机内所有apk对应的包名和路径
- 使用aapt
//aapt是sdk自带的一个工具,在sdk\builds-tools\目录下
1.以QQ音乐为例,命令行中切换到aapt.exe目录执行:aapt dump badging C:\Users\Administrator\Desktop\QQyinle_155.apk
2.运行后的结果中以下两行分别是应用包名package和入口activity名称
package: name='com.tencent.qqmusic'
launchable-activity: name='com.tencent.qqmusic.activity.AppStarterActivity'
- 查看AndroidManifest.xml
1.使用apktool反编译app:apktool d QQyinle_155.apk E:\apk\QQYinyue
2.打开AndroidManifest.xml
manifest节点的package属性值是应用的包名:<manifest package=”com.estrongs.android.pop”>
查找android.intent.action.MAIN和android.intent.category.LAUNCHER对应的activity,该activity对应的android:name属性既是入口activity名称,
android.intent.action.MAIN决定应用程序最先启动的Activity
android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里
-
通过程序获取:
try {
PackageManager packageManager = this.getPackageManager(); //获取系统包管理器
List<ApplicationInfo> listAppInfo = packageManager.getInstalledApplications(0);
//获取已安装APP信息,此时lispAppInfo列表中已包含所用应用的包名,依据需求查看或赋值,如:
String packName = "com.oray.sunlogin.service"; //从列表中获取到的信息,此为调试模式时,在listAppInfo获得的包名
//依据包名获取MainActivity
String resolveMainActivityName = "com.oray.sunlogin.application.Main"; //默认赋值
PackageInfo pi = this.getPackageManager().getPackageInfo(packName,0);
Intent resolveIntent = new Intent(Intent.ACTION_MAIN);
resolveIntent.setPackage(packName);
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(resolveIntent,0);
//MainActivity只有一个,所以此时list中应该只有1项
if(resolveInfos != null && resolveInfos.size() >= 1)
{
resolveMainActivityName = resolveInfos.get(0).activityInfo.name;
Log.d("MAIN",resolveMainActivityName);
}
//启动刚获取到app
if(!resolveMainActivityName.isEmpty())
{
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName(packName,resolveMainActivityName);
intent.setComponent(cn);
startActivity(intent);
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}