搜索
热搜: 活动 交友 discuz
查看: 1091|回复: 0

[知识科普] 获取安卓应用包名和入口 Activity

[复制链接]

27

主题

27

帖子

155

积分

超级版主

Rank: 8Rank: 8

积分
155
发表于 2018-7-10 10:50:19 | 显示全部楼层 |阅读模式


最近要定制个Launcher,最后选择了 Launcher3,要在4.4上跑,掉坑里去了,太深 :sob:
首先在桌面上要显示一些应用的快捷方式,小部件之类的,这就需要知道他们的包名和入口 Activity.
获取应用包名
    adb 命令获取
这个有以下几种方式:
1 经常用R.E管理器的同学,应该知道在系统/data/data目录下存着该手机所有的应用数据,并且是以包名为文件夹命名的,so直接ls查看就可以了
adb shell //进入系统终端cd /data/data && lswindow用户找不到adb命令的,请把adb目录加入到环境变量里。
请看:



adb1s

我的终端是git带的,还不错的。
2 包管理器pm获取
adb shellpm list packagepm list package -f//显示的更详细些请看:



pmlist




pmlistf

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






因此可以根据这个来获取包名和入口 Activity,具体代码在后面,请稍等。。。
获取应用的入口 Activity
    aapt工具
这个必须获取到app才能继续,可以通过Android Device Monitor工具,pull到桌面,(直接adb pull 出现问题,搞不懂)然后进行下面,可以同时获取包名和入口 Activity
    aapt dump badging ***.apk


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



appt

网上找了个脚本,我放到了这个 Gist, Come on, boy.
运行脚本,搞掂,这样:



sh

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.







https://www.jianshu.com/p/99c9360a7d4b

来源:{http://bbs.zecoki.com/forum-70-1.html}
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




上一篇:安卓弹出窗口案例
下一篇:ROM默认不锁屏,不黑屏,删除设置中休眠时间选项
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

抖音账号
关注抖音
加入粉丝群,抽取论坛金币


Archiver|手机版|小黑屋|IT趣-GEEK社区

GMT+8, 2024-4-25 22:44 , Processed in 0.065830 second(s), 22 queries .

Powered by Discuz! X3.4. 技术支持 by 巅峰设计

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表