• 【Android测试】【随笔】获得App的包名和启动页Activity


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

        转载请注明出处: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拉起做性能测试用的,大家可以参考。

  • 相关阅读:
    团队冲刺(九)
    TensorFlow利用Keras实现线性回归
    Spark Streaming 编程初级实践
    Spark SQL 编程初级实践
    解决Ubuntu输入正确密码后进不去桌面
    RDD 编程初级实践
    A master URL must be set in your configuration at org.apache.spark.SparkContext.<init>(SparkContext.
    TensorFlow加载mnist数据集并显示
    Spark读取文件统计行数
    【测试技能】服务端测试就是postman看接口和操作redis吗?
  • 原文地址:https://www.cnblogs.com/by-dream/p/5157308.html
Copyright © 2020-2023  润新知