获取安卓应用包名和入口 Activity

博客: 安卓之家
微博: 追风917
CSDN: 蒋朋的家
简书: 追风917

获取安卓应用包名和入口 Activity_第1张图片

最近要定制个Launcher,最后选择了 Launcher3,要在4.4上跑,掉坑里去了,太深 :sob:

首先在桌面上要显示一些应用的快捷方式,小部件之类的,这就需要知道他们的包名入口 Activity.

获取应用包名


  • adb 命令获取

这个有以下几种方式:

1 经常用R.E管理器的同学,应该知道在系统/data/data目录下存着该手机所有的应用数据,并且是以包名为文件夹命名的,so直接ls查看就可以了

adb shell //进入系统终端
cd /data/data && ls

window用户找不到adb命令的,请把adb目录加入到环境变量里。

请看:

我的终端是git带的,还不错的。

2 包管理器pm获取

adb shell
pm list package
pm list package -f//显示的更详细些

请看:

  • 代码获取

我们都知道,开发的安卓app的AndroidManifest.xml文件里有一个起始 Activity,包含如下过滤信息:


    "android.intent.action.MAIN" />
    "android.intent.category.LAUNCHER" />

因此可以根据这个来获取包名和入口 Activity,具体代码在后面,请稍等。。。

获取应用的入口 Activity

  • aapt工具

这个必须获取到app才能继续,可以通过Android Device Monitor工具,pull到桌面,(直接adb pull 出现问题,搞不懂)然后进行下面,可以同时获取包名和入口 Activity

aapt dump badging ***.apk

找不到的,把该工具加入环境变量,我的在这里:D:\Android\Sdk\build-tools\23.0.2

请看:

网上找了个脚本,我放到了这个 Gist, Come on, boy.

运行脚本,搞掂,这样:

  • 反编译工具apktool
apktool.bat d ***.apk

之后找到AndroidManifest.xml文件,后面你们都知道了,搞定。

  • 代码获取
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);

List packageInfos = getPackageManager().queryIntentActivities(intent, 0);

for (int i = 0; i < packageInfos.size(); i++) {
    String launcherActivityName = packageInfos.get(i).activityInfo.name;
    String packageName = packageInfos.get(i).activityInfo.packageName;
    Log.i("appappinfo", i + " -- launcherActivityName: " + launcherActivityName);
    Log.e("appappinfo", i + " -- packageName: " + packageName);
}

好了,这样就搞掂,enjoy。

获取小部件包名和类名


  • 代码实现
List widgetProviderInfos = AppWidgetManager.getInstance(this).getInstalledProviders();

Log.d("widget", "allWidgetSize = " + widgetProviderInfos.size());
for (int i = 0; i < widgetProviderInfos.size(); i++) {
    AppWidgetProviderInfo info = widgetProviderInfos.get(i);
    String packageName = info.provider.getPackageName();    //获取包名
    String className = info.provider.getClassName();        //获取类名
    Log.d("widget", "packageName: " + packageName);
    Log.d("widget", "className: " + className);
}

根据包名打开该应用


    public static void openApp(Context context,String packageName) throws Exception{
        Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
        context.startActivity(intent);
    }

That’ all.

最后,非常感谢您的阅读,有任何疑问,可以后面评论,谢谢!

神奇的安卓开发网站:http://androidcat.com/

安卓开源库收集整理:https://github.com/XXApple/AndroidLibs

分享是一种美德,更是一种生活方式!!

也许你会说我是一个梦想者,但我不是唯一的一个。

悦分享,越快乐^_^

欢迎交流,转载请注明出处,谢谢!

你可能感兴趣的:(Android)