版权声明:本文出自胖喵~的博客,转载必须注明出处。

转载请注明出处:http://www.cnblogs.com/by-dream/p/5157308.html

前言


  经常看到一些刚刚接触Android测试的小伙伴在论坛或者QQ群里问这样的问题:如何知道一个App的包名呢?它的启动页的Activity又是什么呢?

  之前博客里也忽略了这一块,这一节我就专门来介绍一下。

包名


  包名(Package name)在Android系统中是判断一个App的唯一标识,不同的App可以有同样的名字,但是它的包名不可以相同。

  例如我可以自己编译生成一个App也叫“微信”,但是我App的包名不能为com.tencent.mm(微信的包名为这个),如果我指定的包名如果也和微信一致了,那么我的手机上只允许安装这两个App中的其中一个。说到这很多人就会有疑问,如果有人恶意做了一个和微信内容一模一样的App,名字和包名都和微信一样,那怎么分辨呢?Android中为了防止这样,还做了一个叫签名的东西,微信的签名一般我们是没有的,所以就可以通过签名来标识出这款App到底是谁的了,有兴趣了可以了解下签名,这里就不再赘述了。

  一般要知道一个应用的包名的需求来源都是需要跑一个monkey命令的时候,还记得吗monkey用法?(monkey的文章)monkey的命令中就是需要指定包名的。下面我们就介绍几种查看包名的方法:

  一、看源代码

    一般我们测试的App都是自己公司的App,因此当有源代码的时候,我们就可以非常容易的知道它的包名。找到工程目录下的 “AndroidManifest.xml” 的文件,打开后:

    我们找到package这一项查看即可。

  二、查看手机系统设置

    我这里介绍谷歌原生系统,其他的一些小米、魅族等自己定制后的系统的查看方法也大同小异。

    操作步骤:“设置” -> “应用” -> “正在运行”(这一步需要注意)-> 选择要查看的应用。这个时候就能看到了(如下图)

 

  三、查看 /data/data/ 目录

    当我们安装一款应用的时候,系统就会在 /data/data/ 目录下建一个目录,并且文件名就是当前这个应用的包名,我们看一下我手机里这个目录下都有些什么文件吧:

    如果你知道你要查看的App包名中的一个关键词的话,会更快的找到你应用的包名,否则建议使用其他方法。此方法手机需要root。

  四、GT

    GT的界面中自带了这个功能,从应用宝上下载GT,然后选择一个被测应用,就可以看到了。(如下图)

启动页Activity


  简单的来说Activity指的就是App中我们看到的页面,一个页面就是一个Activity,通常第一页启动起来的页面我们就称之为 “启动页Activity”。

  我们在做自动化测试中,通常第一步都是启动被测应用,例如之前介绍的Monkeyrunner、Uiautomator都是这样的,而启动的方法就是利用 “包名/启动页的Activity”,因此我们在测试的过程中通常需要知道这个Activity的名称。下面我就介绍几种查看启动页Activity的方法。

  一、看源代码

    同样在源代码中我们可以直接找到启动页的Activity的名称。 这里需要找工程目录下的 “AndroidManifest.xml” 包含 “category的值为android.intent.category.LAUNCHER” 的Activity就是我们要找的:

    当我们知道启动页Activity名之后,就可以直接输入“ adb shell am start com.bryan.testbattery/com.bryan.testbattery.activity.MainActivity ” 就可以拉起应用了。

  二、Logcat

    关闭App,打开LogCat,然后启动你的App,这个时候仔细看log日志,一般tag为ActivityManager的会记录下这么一段log,而这里面就记录了启动页的Activity,如下图:

 

  三、dump package 包名

    使用命令查看后,同样是找到包含“category.LAUNCHER” 字样的Activity即可

  

  四、Monkey

    Monkey可以设置日志的详细程度,当我们指定为 -VVV 的时候,并且指定模拟随机事件为一次,即可查看:

  

  五、Android程序

    如果你愿意做一个一劳永逸的事情,我建议一写一个App,根据一个包名来获得启动页的Activity,主要依靠PackageManager 这个类,下面是我实现的代码。

    /** 通过包名去启动一个Activity*/
public void openApp( String packageName) {
// TODO 把应用杀掉然后再启动,保证进入的是第一个页面
PackageInfo pi = null;
try {
pi = mainContext.getApplicationContext().getPackageManager().getPackageInfo(packageName, 0);
} catch (NameNotFoundException e) {
e.printStackTrace();
return;
} Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
resolveIntent.setPackage(pi.packageName);
PackageManager pManager = mainContext.getApplicationContext().getPackageManager();
List<ResolveInfo> apps = pManager.queryIntentActivities(resolveIntent,
0); ResolveInfo ri = apps.iterator().next();
if (ri != null) {
String startappName = ri.activityInfo.packageName;
String className = ri.activityInfo.name; System.out.println( "启动的activity是: " + startappName+":"+className, CommonVar.LOG_SHOW); Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ComponentName cn = new ComponentName(startappName, className); intent.setComponent(cn);
mainContext.getApplicationContext().startActivity(intent);
}
}

    这段代码是我的性能测试工具小松鼠在指定的被测App后,将被测App拉起做性能测试用的,大家可以参考。

【Android测试】【随笔】获得App的包名和启动页Activity的更多相关文章

  1. Appium自动化时,如何快速获得Android app的包名和启动页

    在app自动化的时候,经常被问道如何知道app的包名和启动页名称.这个问题很简单: 1. 最直接的方式,去问开发啊,他们告诉你app的包名和启动页. 2. 如果你比较腼腆,又能看到/懂代码,自己把代码 ...

  2. 关于eclipse android 在manifest改app应用包名注意事项

    在我刚学android 时候,然后立即就做项目.那时连eclipse 使用都不是很熟练.很多功能都不知道.新手如果这时去改app应用的包名,没有改好会变成所有控件在R文件里面id都找不到. 先上两张图 ...

  3. 使用aapt查看apk包名和启动的activity

    执行命令: aapt dump badging F:\知乎.apk

  4. 查看Android应用包名package和入口activity名称

    使用android自动化测试工具启动应用时,需要填写被测程序的包名和启动的Activity,以下有两种查看应用包名package和入口activity名称的方法: 方法一:使用aapt    //aa ...

  5. Android开发之查看应用包名package和入口activity名称的方法

    使用android自动化测试工具monkeyrunner启动应用时,需要填写被测程序的包名和启动的Activity,以下有两种查看应用包名package和入口activity名称的方法: 方法一:使用 ...

  6. 如何获取到app的包名

    相信很多朋友在刚开始接触测试app的时候都不清楚app的包名是什么,接下来给大家介绍几种方法去获取. 一.手机设备已连接到电脑,点击进入app中,前提是电脑上装备了android-SDK,tools文 ...

  7. android studio无法识别含有rcs包名的jar

    http://blog.csdn.net/JingleYe/article/details/70048943     android studio无法识别含有rcs包名的jar android stu ...

  8. 命令查看当前运行APP的包名和Activity

    先用usb链接手机 启动要查看的程序,命令查看当前运行的包名和Activity更清晰. 使用adb shell dumpsys window | findstr mCurrentFocus  命令查看 ...

  9. Android项目实战(四十二):启动页优化,去除短暂白屏或黑屏

    大家会发现一个空项目,从手机桌面打开app是秒启动.但是对于自己开发的项目,有时会发现打开app的时候,会有短暂的1秒--2秒的白屏或者黑屏,然后才进入到程序界面. 个人理解为我们自己实现的Appli ...

随机推荐

  1. LMT 装机记录

    老毛桃是一个存在很久的文物了,当年在大学的时候,学习委员还专门做了一个PPT来讲老毛桃,现在想想,有点后悔那是不去试一下. 但万幸的是,最近终于彻底理解了工作流程: 1)安装一个LMT的软件,从其官网 ...

  2. BZOJ1035 : [ZJOI2008]Risk

    首先要将这个图连通,方法是通过扫描线+set求出每个连通块最高的点上方的第一条边,然后向交点连边. 然后把边拆成两条双向边,每次找到一条没走过的边,找到极角排序后它的反向边的后继,直到回到这条边.根据 ...

  3. 【BZOJ】1901: Zju2112 Dynamic Rankings(区间第k小+树状数组套主席树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1901 首先还是吐槽时间,我在zoj交无限tle啊!!!!!!!!我一直以为是程序错了啊啊啊啊啊啊. ...

  4. HDU 4605 Magic Ball Game(离线算法)

    题目链接 思路就很难想+代码实现也很麻烦,知道算法后,已经写的很繁琐而且花了很长时间,200+,好久没写过这么长的代码了. #pragma comment(linker, "/STACK:1 ...

  5. BJOI2015 Day3

    (wzj这蒟蒻终于滚Cu了,今天第一题SB题写+调用了1.5h,测试时还WA了一个点.第二题数位DP20分钟写完遇到鬼打墙,中间一切正常最后输出一坨负数.调了1h发现是一个数组开小了.又花了20+mi ...

  6. CentOS Git的还原和操作

    $ git log --graph --oneline $ git reset --hard 版本号 用 reflog 挽救错误的重置 [jackluo@localhost demo]$ git re ...

  7. 12.编写一个Java项目,定义包,在包下定义包含main方法的类,在main方法中声明8种基本数据类型的变量并赋值,练习数据类型转换。

    注意:float虽然是4个自减,但是它的取值范围却比8个字节的long要大. float和double只能用来作科学计算或者是工程计算,但在商业计算中我们要用java.math.BigDecimal, ...

  8. Linux系统管理员踢用户的方法

    两种方法:1.使用pkill命令 1.1 通过who 或则 w 查看当前连接的用户 例如: w USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT jjony pts/0 ...

  9. Objective-C、C++和swift 的运行效率比较

    自己做iOS开发,以后慢慢都要转swift,前段时间看到网上的一个帖子,说swift的运行效率奇低,觉得自己有必要验证一下. 我用了一个最简单的加法运算,从0加到10000000,看三种语言的时耗. ...

  10. 每天学点GDB 13

    ptrace是gdb实现的基石,本文简要介绍一下ptrace. ptrace linux提供的系统调用ptrace,使得一个进程可以attach到另一个进程并进而完整的控制被attach上的进程. 被 ...