如何知道一个App的包名呢

摘要:
软件包名称是判断Android系统中应用程序的唯一标识符。不同的应用程序可以具有相同的名称,但它们的包名称不能相同。说到这一点,很多人都会有疑问。如果有人恶意制作了一个与微信内容相同的app,并且名称和包名与微信相同,我们该如何区分?通常,当您需要运行monkey命令时,您需要知道应用程序包名的来源。还记得猴子的用法吗?

本文转载自http://www.cnblogs.com/by-dream/p/5157308.html

如何知道一个App的包名呢?它的启动页的Activity又是什么呢?

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


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

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

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

  一、看源代码

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

如何知道一个App的包名呢第1张

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

  二、查看手机系统设置

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

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

如何知道一个App的包名呢第2张 如何知道一个App的包名呢第3张

  三、查看 /data/data/ 目录

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

如何知道一个App的包名呢第4张

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

  四、GT

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

如何知道一个App的包名呢第5张

启动页Activity


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

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

  一、看源代码

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

如何知道一个App的包名呢第6张

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

  二、Logcat

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

如何知道一个App的包名呢第7张

  三、dump package 包名

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

如何知道一个App的包名呢第8张

  四、Monkey

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

如何知道一个App的包名呢第9张

  五、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拉起做性能测试用的,大家可以参考。

免责声明:文章转载自《如何知道一个App的包名呢》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇关于QSocket的释放的一个需要注意的情况(必须先断开连接)Linux平台下使用rman进行oracle数据库迁移下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

koa和egg项目webpack热更新实现

背景 在用Node.js+Webpack构建的方式进行开发时, 我们希望能实现修改代码能实时刷新页面UI的效果. 这个特性webpack本身是支持的, 而且基于koa也有现成的koa-webpack-hot-middleware 和 koa-webpack-dev-middleware 封装好的组件支持. 不过这里如果需要支持Node.js服务器端修改代码...

(入门篇)Python web框架FastAPI——一个比Flask和Tornada更高性能的API 框架

用官方的话来说,FastAPI 是一种现代,快速(高性能)的 Web 框架,基于标准Python 类型提示使用 Python 3.6+ 构建 API   FastAPI 站在巨人的肩膀上? 很大程度上来说,这个巨人就是指 Flask 框架。 FastAPI 从语法上和 Flask 非常的相似,有异曲同工之妙。 技术背景:Py3.6+,Starlette...

11 个 Linux 上最佳的图形化 Git 客户端

  Git是软件开发和若干其他版本控制任务免费和开源的分布式版本控制系统。它被设计用来以应付一切从小到非常大的项目,基于速度,效率和数据完整性。 Linux用户主要通过命令行管理Git,不过,一些图形用户界面(GUI)Git 客户端可以促进Git在Linux桌面上的高效和可靠使用,并提供大多数命令行操作,如果不是所有命令行的话,完全可以满足你日常的需求。...

Office Tab Enterprise 9.2——附可用激活码

转自:网景论坛 Office Tab是office的扩展插件,Office Tab 的主要功能就是可以让office 2013、office 2010、2007、2003实现多窗口标签式浏览。不仅如此,Office Tab 还支持自定义标签外观、标签的显示位置、标签的关闭方式、随意拖拽标签位置等。你甚至可以像使用浏览器一样来使用Office。由于免费版的o...

Appium(七):Appium API(一) 应用操作

1. 应用操作 本章所罗列的方法主要针对应用的操作,如应用的安装、卸载、关闭、启动等。 把前面的启动代码放在这里,后面只展示不同的部分。 #coding:utf-8 from appium importwebdriverfrom time import sleep #初始化 desired_caps ={} #使用哪种移动平台 desired_caps[...

adobe reader安装失败时的解决方法

1、现在adobe reader 的官方网站取消了免在线安装方式的安装包的下载,导致下载下来的安装包只有1M多,然后只能连接互联网进行安装。 很容易发生在安装过程中提示“安装失败”,其实是下载失败的情况。这种问题可能由于国际互联网“不稳定”,基本很难解决。 2、使用第三方的软件安装方式进行安装。类似于软件管家的方式进行安装,发现安装后使用几十秒均发生软件崩...