您现在的位置是:首页 > 正文

获取APP包名和启动页APP

2024-04-01 03:52:00阅读 3

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

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

  一般要知道一个应用的包名的需求来源都是需要跑一个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 这个类,下面是我实现的代码。

[java] view plain copy

  1. /** 通过包名去启动一个Activity*/      
  2. public  void openApp( String packageName) {  
  3.     // TODO 把应用杀掉然后再启动,保证进入的是第一个页面  
  4.     PackageInfo pi = null;  
  5.     try {  
  6.         pi = mainContext.getApplicationContext().getPackageManager().getPackageInfo(packageName, 0);  
  7.     } catch (NameNotFoundException e) {  
  8.         e.printStackTrace();  
  9.         return;  
  10.     }  
  11.   
  12.     Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);  
  13.     resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);  
  14.     resolveIntent.setPackage(pi.packageName);  
  15.     PackageManager pManager = mainContext.getApplicationContext().getPackageManager();  
  16.     List apps = pManager.queryIntentActivities(resolveIntent,  
  17.             0);  
  18.   
  19.     ResolveInfo ri = apps.iterator().next();  
  20.     if (ri != null) {  
  21.         String startappName = ri.activityInfo.packageName;  
  22.         String className = ri.activityInfo.name;  
  23.           
  24.         System.out.println( "启动的activity是: " + startappName+":"+className, CommonVar.LOG_SHOW);  
  25.           
  26.         Intent intent = new Intent(Intent.ACTION_MAIN);  
  27.         intent.addCategory(Intent.CATEGORY_LAUNCHER);  
  28.         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
  29.         ComponentName cn = new ComponentName(startappName, className);  
  30.   
  31.         intent.setComponent(cn);  
  32.         mainContext.getApplicationContext().startActivity(intent);  
  33.     }  
  34. }  

网站文章

  • tomcat配置https协议访问

    记录一下tomcat配置https协议访问网上看到好多关于tomcat配置https协议访问的相关文档,基本上都是通过java自带的工具实现的,但是后面的一些步骤好像都不太一样呢,这里就记录一下总结了...

    2024-04-01 03:51:53
  • 消解算法 c语言实现,一种基于混合进化算法的实例共指消解方法

    一种基于混合进化算法的实例共指消解方法【技术领域】[0001 ]本发明属于计算机信息领域,具体地,本发明涉及一种基于混合进化算法的实例 共指消解方法。【背景技术】[0002]定义:[0003]本体:本...

    2024-04-01 03:51:15
  • 服务优雅下线,没你想的那么简单?

    大家好,我是架构摆渡人。这是实践经验系列的第八篇文章,这个系列会给大家分享很多在实际工作中有用的经验,如果有收获,还请分享给更多的朋友。服务部署,是一个避免不了的问题。按正常迭代的速度一般两周会发一个...

    2024-04-01 03:51:09
  • android:requestLegacyExternalStorage解析

    在Android使用fuse文件系统开始,Android针对外置存储支持了独立的沙箱存储空间, 一般通过Context.getExternalFilesDir() Api获取,该空间内的数据为应用独有...

    2024-04-01 03:51:03
  • Ajax——jQuery发送jsonp

    Ajax——jQuery发送jsonp

    Ajax——jQuery发送jsonp

    2024-04-01 03:50:57
  • vue 报错 this.getOptions is not a function

    可以先卸载,再安装低版本。

    2024-04-01 03:50:20
  • SpringBoot启动参数设置详解

    在实际应用中,我们经常需要根据具体需求设置一些启动参数来优化和定制应用程序的运行。本文将详细介绍如何在Spring Boot中设置启动参数,并给出相应的源代码示例。通过命令行参数、配置文件和环境变量的...

    2024-04-01 03:50:15
  • 第一次使用达梦数据库的坑

    第一次使用达梦数据库的坑

    第一次使用达梦数据库的坑

    2024-04-01 03:50:07
  • 【Java】得到本机IP

    import java.net.InetAddress;import java.net.UnknownHostException; public class MainProcess { public static void main(String[] args) { InetAddress localhost = null; try {...

    2024-04-01 03:49:30
  • swift 防止重写和必须重写

    防止重写:父类方法前加关键字final,如: final func checkEnabled() { } 必须重写:父类方法里加fatalError("Must Override"),如 func checkEnabled() { fatalError("Must Override") }

    2024-04-01 03:49:23