宅科技 - 科技,宅出新生活

搜索
热搜: 活动 交友 discuz
如果你还没有论坛的账号,赶快注册吧!
立即注册

合作站点账号登陆

快捷导航
查看: 4848|回复: 0

[adb命令、debug调试] 获取安卓应用包名和入口 Activity

[复制链接] [提交至百度]

39

主题

43

帖子

8101

积分

超级版主

Rank: 8Rank: 8

积分
8101
发表于 2018-7-10 10:50:19 | 显示全部楼层 |阅读模式
扫码领红包
本帖最后由 ironMan.K 于 2018-7-10 11:00 编辑

最近要定制个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,包含如下过滤信息:
  1. <intent-filter>
  2.     <action android:name="android.intent.action.MAIN" />
  3.     <category android:name="android.intent.category.LAUNCHER" />
  4. </intent-filter>
复制代码

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


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



appt

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



sh

  • 反编译工具apktool
apktool.bat d ***.apk之后找到AndroidManifest.xml文件,后面你们都知道了,搞定。
  • 代码获取
  1. Intent intent = new Intent(Intent.ACTION_MAIN, null);
  2. intent.addCategory(Intent.CATEGORY_LAUNCHER);

  3. List<ResolveInfo> packageInfos = getPackageManager().queryIntentActivities(intent, 0);

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

复制代码


好了,这样就搞掂,enjoy。
获取小部件包名和类名
  • 代码实现
  1. List<AppWidgetProviderInfo> widgetProviderInfos = AppWidgetManager.getInstance(this).getInstalledProviders();

  2. Log.d("widget", "allWidgetSize = " + widgetProviderInfos.size());
  3. for (int i = 0; i < widgetProviderInfos.size(); i++) {
  4.     AppWidgetProviderInfo info = widgetProviderInfos.get(i);
  5.     String packageName = info.provider.getPackageName();    //获取包名
  6.     String className = info.provider.getClassName();        //获取类名
  7.     Log.d("widget", "packageName: " + packageName);
  8.     Log.d("widget", "className: " + className);
  9. }
复制代码


根据包名打开该应用
  1. public static void openApp(Context context,String packageName) throws Exception{
  2.         Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
  3.         context.startActivity(intent);
  4.     }
复制代码

That' all.







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



上一篇:Android系统定制之SystemUI修改:下拉通知栏尺寸
下一篇:乐视pro3 x650 双摄ai版 原厂线刷包解锁救砖,纯净无内置资料
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

抖音账号
关注抖音
查看在线教程,私信咨询


手机版|小黑屋|网站地图|宅科技 ( 粤ICP备15107403号

GMT+8, 2024-11-23 16:29 , Processed in 0.127438 second(s), 26 queries .

Copyright © 2016 宅科技 | 智能终端极客社区

Powered by Discuz! X3.4 Licensed

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