快速获取App的packageName、Activity小结

快速获取App的packageName、Activity小结,第1张

做App压力测试、自动化测试等时,前提是要准备好包名和activity,那么如何获取呢?

0、找开发要  (最快捷 (๑•̀ㅂ•́)و✧)

1、需要先打开apk后,再敲入命令

            adb shell dumpsys window w |findstr \/ |findstr name=  

            //(查看所有包名:adb shell pm list packages [-f])  

2、uiautomation

3、testin云

41、反编译,比如apktool,打开AndroidManifestxml即可

42  反编译2

       adb install d:\xxxxapk

        aapt dump badging  d:\xxxxapk  然后打印出第一行就包含包名

5、通过adb shell进入到手机data/data目录下,查看包名(需要root)

        adb shell

        cd data/data

        ls

6、通过使用adb shell的dumpsys的另一个命令,查看包名(不需要root)

        adb shell dumpsys activity> c:\logtxt#需要先打开apk后,再敲入命令

        输入命令之后,cmd里没有任何提示,不过C盘目录下,会多一个logtxt文件。

        打开logtxt文件,搜索 Stack #1,然后寻找cmp=

7、通过使用grep,查看包名(不需要root)

        adb shell1|shell@RM-1057:/ $logcat | grep START#需要先打开apk后,再敲入命令

        查看最下面

        接下来,不论打开哪个APK,cmd命令会自动显示出包名和activity的名字,比如我又打开了相册~

        可以看出相册的包名是comandroidgallery3d,activity名字是appGallery

       1  adb shell dumpsys activity|findstr Focuse

       2  adb shell dumpsys activity top

       3  uiautomation

开发插件啊。简单的,利用intent将B中的界面拉起来进行处理,这是一种伪插件模式正经的一种框架为:利用PackageManagergetInstalledPackages来获取并筛选出属于A的插件,也就是B,并可以获知里面的package name和activity name。使用限定包名和类名的方式(Intent intent = new Intent(); ComponentName compList = new ComponentName("comandroid", "comandroid"); intentsetComponent(compList);)startActivity()就可以了,不过这样的插件模式还是挺没有意义的。最好的插件应该首先将A和B两个apk定义一样的sharedUserId,然后只是利用contextgetClassLoader()loadClass()之后利用反射直接调用插件里面定义的方法而不是拉起界面。

在Android中取得当前进程

说明:上面代码关键的两个地方解释,也就是取得当前进程名

androidosProcessmyPid()) //获取PID,目前获取自己的也只有该API

ActivityManagerRunningAppProcessInfo类

说明: 封装了正在运行的进程信息

常用字段:

int   pid    进程ID

int   uid    进程所在的用户ID

String   processName 进程名,默认是包名或者由Android:process=””属性指定

String [ ]   pkgList      运行在该进程下的所有应用程序包名

在目的activity中获取intent启动源的名字的方法

1 先说在setClass启动一个Activity的方法吧:

Intent intent = new Intent();

intentsetClass(this, CreatePlaylistclass) //参数一为当前Package的context,t当前Activity的context就是this,其他Package可能用到createPackageContex()参数二为你要打开的Activity的类名

startActivity(intent);

2 通过Component Name来打开的方式

Intent intent = new Intent();

intentsetAction(IntentACTION_MAIN); //添加一些特性,具体可以查看Intent文档,相关属性的介绍

intentaddCategory(IntentCATEGORY_LAUNCHER);

intentsetFlags(IntentFLAG_ACTIVITY_NEW_TASK | IntentFLAG_ACTIVITY_RESET_TASK_IF_NEEDED);

//通过Bundle向要打开的的Activity传递一些数据

Bundle bundle = new Bundle();

bundleputString("data", new String(" Hello World"));

intentputExtras(bundle);

intentsetComponent(new ComponentName(

new String("comandroidtestActivity"), new String("comandroidtestActivitytestActivity")));

startActivity(intent);

需要在跳转的Intent对象中添加一个参数:

intentputExtra("comeFrom", activityName);

跳转到目标activity时带上当前activity的名字,这样才知道是从哪里跳转进来的。

以上就是关于快速获取App的packageName、Activity小结全部的内容,包括:快速获取App的packageName、Activity小结、如何查看一个apk中所有的activity的名称、如何在Android中取得当前进程名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9332862.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存