精华内容
下载资源
问答
  • 如何知道一个App的包名

    万次阅读 2018-10-08 10:20:27
    包名(Package name)在Android系统中是判断一个App的唯一标识,不同的App可以同样的名字,但是它的包名不可以相同 例如我可以自己编译生成一个App也叫“微信”,但是我App的包名不能为com.tencent.mm(微信的包名...

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

    例如我可以自己编译生成一个App也叫“微信”,但是我App的包名不能为com.tencent.mm(微信的包名为这个),如果我指定的包名和微信一致了,那么我的手机上只允许安装这两个App中的其中一个

    说到这很多人就会有疑问,如果有人恶意做了一个和微信内容一模一样的App,名字和包名都和微信一样,那怎么分辨呢?Android中为了防止这样,还做了一个叫签名的东西,微信的签名一般我们是没有的,所以就可以通过签名来标识出这款App到底是谁的了,有兴趣了可以了解下签名,这里就不再赘述

    手机查看

    以小米手机为例,打开设置-更多应用-查找到此应用-点击右上角更多信息 即可查看包名

    命令行查看

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

    在这里插入图片描述

    展开全文
  • Android 在一个APP里打开另一个APP

    千次阅读 2020-06-06 10:54:05
    知道你们有没有注意过,每次打开一些软件的时候都会广告引导页,时候手滑点到了,会进入手机上的另一个APP,这有没有引起你的注意呢? 正文 为了测试这个功能,首先要创建两个项目,然后运行起来都安装在你...

    前言

    不知道你们有没有注意过,每次打开一些软件的时候都会有广告引导页,有时候手滑点到了,会有进入手机上的另一个APP,这有没有引起你的注意呢?

    运行效果图
    在这里插入图片描述

    正文

    为了测试这个功能,首先要创建两个项目,然后运行起来都安装在你的手机上,这里为了方便了解,取名就是应用A和应用B,流程就是A应用里面打开B应用。

    首先当然是创建项目了
    DemoA
    在这里插入图片描述
    DemoB

    在这里插入图片描述
    创建好之后,别的先不管,都在手机上安装一下再说
    在这里插入图片描述

    ① 打开另一个APP

    接下来在DemoA的MainActivity里面写一个按钮,用于点击之后打开DemoB应用

    	<Button
            android:id="@+id/btn_open_b"
            android:text="打开DemoB"
            android:textAllCaps="false"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    

    在这里插入图片描述
    也在DemoB的布局文件改一下显示内容

    <TextView
            android:textSize="18sp"
            android:textColor="#000"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="DemoB" />
    

    运行一下
    在这里插入图片描述

    这样就打开了。那假如我要传递数据到DemoB呢?

    ② 数据传递

    传数据其实就跟平时单个APP内部不同页面传数据类似,也是用Intent
    在这里插入图片描述
    然后在另一个APP里面接收并显示出来。现在先修改一下DemoB的布局,增加一个TextView用来显示接收的内容。

    <TextView
            android:id="@+id/tv_info"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="12dp"
            android:textColor="#000"
            android:textSize="16sp" />
    

    DemoB的MainActivity里
    在这里插入图片描述
    一旦两个应用程序里面改动了代码你就要在手机上运行一下,否则你改动的代码就不会生效

    然后运行一下:
    在这里插入图片描述

    传值的问题就解决了。

    ③ 打开指定页面

    通过包名跳转APP是进入默认的启动页面,你可以打开你的AndroidManifest.xml文件查看
    在这里插入图片描述
    那个Activity下面有这个默认启动就是那个

    			<intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
    

    至于要打开指定的页面有两个方法

    1.通过包名、类名

    首先在DemoB的下面再创建一个TestActivity,简单加一个TextView
    在这里插入图片描述

    在这里插入图片描述
    因为是要DemoB的TestActivity页面,所以这个activity在AndroidManifest.xml中需要配置

    android:exported 属性,布尔类型,是否支持其他应用访问目标 Activity,默认值为 true;

    android:exported="true"
    

    否则你跳转会报错的,现在运行DemoB,使改动的代码生效
    然后修改DemoA里面MainActivity的代码
    在这里插入图片描述
    运行效果
    在这里插入图片描述
    这样就可以了。

    2.通过Action

    修改DemoB的AndroidManifest.xml
    在这里插入图片描述
    然后运行在手机上,再修改DemoA的MainActivity
    在这里插入图片描述
    运行效果
    在这里插入图片描述
    其实还有一种方式是通过URL打开另一个APP,但是我不推荐这样做,为什么?没有原因…

    展开全文
  • 如何知道一个App的包名呢

    千次阅读 2017-09-03 13:53:47
    如何知道一个App的包名呢?它的启动页的Activity又是什么呢?  之前博客里也忽略了这一块,这一节我就专门来介绍一下。  包名(Package name)在Android系统中是判断一个App的唯一标识,不同的App可以...

    如何知道一个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打开另一个APP完整逻辑实现

    万次阅读 多人点赞 2018-05-09 18:12:03
    一丶概述前段时间配合开发,完成了一个APP拉起另一个...市面上比较流行的解决办法,第一个就是现在说的新开发一个管理型APP,其他APP需要时再下载,运用时拉起,另一个就是插件化,直接将多个APP合成一个APP,这个...

    本文出自:https://blog.csdn.net/DT235201314/article/details/80255143

    一丶概述

    前段时间配合开发,完成了一个APP拉起另一个APP的需求,负责接收数据跨登录部分。当然整个实现思路挺感兴趣就了解一下。先说说需求拉起另一个APP是为了方便统一使用管理,有些公司APP较多,部分人只需要用到部分APP,需要用到时就下载。市面上比较流行的解决办法,第一个就是现在说的新开发一个管理型APP,其他APP需要时再下载,运用时拉起,另一个就是插件化,直接将多个APP合成一个APP,这个感兴趣也可以了解一下。

    二丶效果图


    三丶需求分析

    1.A点击拉起B;

    2.如果B没安装,下载安装;

    3.如果B已安转,未在后台运行点击打开B,传值账号密码,做跨登录;

    4.如果B已安装,且正在后台运行,A打开B直接显示在后台运行的页面;

    简版流程图:


    四丶原理与实现

    1.先说A拉起B可实现的几种方法

    (1)包名,特定Activity名拉起

    Intent intent = new Intent(Intent.ACTION_MAIN);
    /**知道要跳转应用的包命与目标Activity*/
    ComponentName componentName = new ComponentName("kuyu.com.xxxx", "kuyu.com.xxxx.xxx.login.WelcomeActivity");
    intent.setComponent(componentName);
    intent.putExtra("", "");//这里Intent传值
    startActivity(intent);

    B应用需要在manifest文件对应Activity添加

    android:exported="true"

    (2)包名拉起(这里就是进去启动页)

    Intent intent = getPackageManager().getLaunchIntentForPackage("kuyu.com.xxxx");
    if (intent != null) {
        intent.putExtra("type", "110");
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }

    (3)url拉起

    Intent intent = new Intent();
    intent.setData(Uri.parse("csd://pull.csd.demo/cyn?type=110"));
    intent.putExtra("", "");//这里Intent当然也可传递参数,但是一般情况下都会放到上面的URL中进行传递
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);

    B应用manifest文件需配置(注意:在原有intent-filter下方另外添加,不是在原先里面,两个同时存在)

    <intent-filter>
        <data
            android:host="pull.csd.demo"
            android:path="/cyn"
            android:scheme="csd" />
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
    </intent-filter>
    优点:不暴露包命   缺点:host path schemeA应用和B应用得规定死

    2.判断B应用是否安装

    /**
     * 检查包是否存在
     *
     * @param packname
     * @return
     */
    private boolean checkPackInfo(String packname) {
        PackageInfo packageInfo = null;
        try {
            packageInfo = getPackageManager().getPackageInfo(packname, 0);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return packageInfo != null;
    }

    3.判断B应用是否在后台运行并直接打开

    public static Intent getAppOpenIntentByPackageName(Context context,String packageName){
        //Activity完整名
        String mainAct = null;
        //根据包名寻找
        PackageManager pkgMag = context.getPackageManager();
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        intent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED|Intent.FLAG_ACTIVITY_NEW_TASK);
    
        List<ResolveInfo> list = pkgMag.queryIntentActivities(intent,
                PackageManager.GET_ACTIVITIES);
        for (int i = 0; i < list.size(); i++) {
            ResolveInfo info = list.get(i);
            if (info.activityInfo.packageName.equals(packageName)) {
                mainAct = info.activityInfo.name;
                break;
            }
        }
        if (TextUtils.isEmpty(mainAct)) {
            return null;
        }
        intent.setComponent(new ComponentName(packageName, mainAct));
        return intent;
    }
    
    public static Context getPackageContext(Context context, String packageName) {
        Context pkgContext = null;
        if (context.getPackageName().equals(packageName)) {
            pkgContext = context;
        } else {
            // 创建第三方应用的上下文环境
            try {
                pkgContext = context.createPackageContext(packageName,
                        Context.CONTEXT_IGNORE_SECURITY
                                | Context.CONTEXT_INCLUDE_CODE);
            } catch (PackageManager.NameNotFoundException e) {
                e.printStackTrace();
            }
        }
        return pkgContext;
    }
    
    public static boolean openPackage(Context context, String packageName) {
        Context pkgContext = getPackageContext(context, packageName);
        Intent intent = getAppOpenIntentByPackageName(context, packageName);
        if (pkgContext != null && intent != null) {
            pkgContext.startActivity(intent);
            return true;
        }
        return false;
    }
    if (checkPackInfo("kuyu.com.xxxxx")) {
    openPackage(this,"kuyu.com.xxxxx");
    } else {
        Toast.makeText(this, "没有安装" + "",Toast.LENGTH_LONG).show();
        //TODO  下载操作
    }
    这里运用的是模拟点击图标启动,不会出现程序多开,和栈顶Activity重复或者顺序错乱的问题。

    当然Activity的LaunchMode最好设为“singletop”

    4.B应用接受传值跨登录操作

    一般启动页有几种操作

    (1)定时直接跳转登录页面

    这个就简单了,直接在handle发送跳转做判断接收intent操作就可以了

    例:

    if(getIntent().hasExtra("xxxx")){
        otherOpen();
    }else {
        mHandler.removeMessages(0);
        mHandler.sendEmptyMessageDelayed(0, 3000);
    }

    (2)做了用户信息保存,跳过登录的,这个时候就通过handle的消息判断,做出相应操作

    例:

    /**
     * 跳去首页/登录页面
     */
    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.arg1) {
                case 1009:
                    goToActivity(MainActivity.class);
                    WelcomeActivity.this.finish();
                    break;
                case 1010:
                    gotoLogin(handler1, runnable);
                    break;
            }
        }
    };

    展开全文
  • [干货]手把手教你写一个安卓app

    万次阅读 多人点赞 2021-04-27 21:06:49
    这里我们介绍一种快速入门的方法来制作一款app,就算你是零基础小白没有学习过java语言,我相信看完我的文章半天时间你也会做一个安卓app。本文针对初学者,大佬勿喷啊! 1. 创建HelloWorld项目 这里我就不介绍如何...
  • Android 一个app启动另一个app

    千次阅读 2016-08-09 22:50:28
    一、先来几行代码,一个app启动另一个app     // 通过包名获取要跳转的app,创建intent对象 Intent intent = getPackageManager().getLaunchIntentForPackage("com.example.liuxiang"); // 这里...
  • app或web链接打开另一个app

    千次阅读 2019-01-23 23:55:45
    Android 从一个 APP A跳转到另一个 APP B主界面 App A开启跳转的代码如下 Intent intent = new Intent(Intent.ACTION_MAIN); //前提:知道要跳转应用的包名、类名 ComponentName componentName = new ...
  • 今天遇到一个问题,当安装一个app到launcher的workspace里,怎么知道它的class name和package name 方法一:去launcher的数据库里查看 方法二:将你所添加的app反编译,通过查看androidManifast.xml可以看到 方法...
  • 如何开发一个App(Android)

    万次阅读 多人点赞 2015-11-28 23:25:51
    需要说明一点是,这里只是提供一个如何开发一个app的思路,并不会介绍很多技术上的细节,从整个大局去把握如何去构思一个app的开发,让你对独立开发一款app的时候个理解,如果说的不对的地方,欢迎大家拍砖留言...
  • 开发一个 app 多难?

    千次阅读 2017-01-15 14:38:26
    开发一个 app 多难? 非互联网行业从业者,只是单纯想问问 开发一个APP有多难?需要经历那些流程?难点都在哪里?什么时候出现的?需要哪些人员进行开发? 需要多少钱多少时间?如果能结合自己的经历说说...
  • 最近在开发一个APP交互时,遇到这样的需求,1、APP拉起第三方的APP,并且传值,2第三方APP拉起我们的APP,并可以根据传递过来的值启动相对应的页面。 我们通过Intent的隐式启动来拉起。 隐式启动拉起第三方APP有三...
  • 程序在运行过程中,可能会由于某种原因而被干掉或者自己崩溃掉,为了增加可靠性,一般的做法就是在系统启动之后,自动起一个看门狗程序,来时刻看守应用程序。 由于本人对android也不是很精通 所以想到了以下办法,...
  • 需求:有一个APP,用来下载其他APP,比如下载完成后自行安装到主APP中(就像插件), 然后会产生一个图标,点击这个图标就会启动新安装的APP,当安装这个APP后又返回到 主APP中。---------有点像Iphone的桌面。 ...
  • 前言:近年来,智能电视的发展如火如荼,Googel 也在大力推进TV及穿带设备的发展,在互联网的风口,是猪也会飞,这句话并不是没有道理的。传统电视机厂商,基本都转型致力于智能电视的相关业务,今天的Agendda如下: ...
  • 1. Android 从一个 APP 跳转到另一个 APP 主界面 Intent intent = new Intent(Intent.ACTION_MAIN); //前提:知道要跳转应用的包名、类名 ComponentName componentName = new ComponentName("...
  • 先交代一下问题背景:Mac上安装的Charles3.10.1版本,能抓浏览器的包,但死活抓不了手机app的包(android和ios都一样),但奇怪的是android依旧可以上网,ios上不了。排查步骤如下:1,原来我怀疑默认的8888端口被...
  • 开发一个APP需要多少钱?

    万次阅读 2017-09-06 23:28:58
    作为一个移动端开发人员,我们可能被外行朋友或者被客户问及最多的一个问题就是:“开发一个APP需要多少钱?” 不错,这个是大家特别关心的问题,也是互联网公司非常重视的一个问题,因为涉及到自己的成本问题,作为...
  • 常见App安全问题

    千次阅读 2018-06-02 10:32:07
    常见的 App 安全问题据2015年第三季度移动安全报告显示,Android 16行业 TOP 10 应用漏洞类别和数量中,Webview远程代码执行占到了第位,第二位是Webview文明存储密码。这些领域涵盖大家平时工作领域,我们所...
  • Android调用另一个App界面

    千次阅读 2016-01-25 19:03:12
    今天要说的是在App中调用其他APP界面的总结,我们经常需要给别的程序调用自己程序的UI界面,这时可以三种方式来提供调用。 1、使用隐匿intent的方式调用,这种方式是比较推荐的,也比较简单 首先在自己应用的...
  • 其实时候自己会思考,假如一天需要自己负责一个新的apk,整个测试组只有我一个人,那么我会怎么办...其实我还是建议测试了解开发逻辑是从有一个成品的apk开始,因为如果从预研就去深入的话,中间变动太大,前期app
  • 教你在五分钟构建一个App页面

    千次阅读 多人点赞 2020-04-29 15:12:16
    最近参加学校比赛,由于业务需求要做一个App,当时心想我不是web开发的吗?App跟我有啥关系?而且之前也没去了解相关的东西,当时很慌啊队友还说上一次某某某三天就出了个App,我… 怀着忐忑的心情上度娘”app怎么...
  • 使用aapt //aapt是sdk自带的一个工具,在sdk\builds-tools\目录下 1.以微信为例,命令行中切换到aapt.exe目录执行:aapt dump badging E:\Android\weixin531android460.apk 2.运行后的结果如下(仅截取部分): ...
  • 如何推广一个新的App软件

    千次阅读 2019-02-03 13:52:26
    如何推广一个新的App软件
  •  但是app能否成功出现在苹果的app store,还需要有一个时间段让苹果对你开发的app进行审核,如果审核有问题还要退回解决后重新上传,所以耗费周期有时很长。  现在问题出现,如果开发出app,先给周边的
  • Google play 开发App上线一个月总结

    万次阅读 2017-06-06 18:25:01
    几个问题总结一下在Google Play开发安卓...上线一个多月后我的总结和感受 后面想开发的app 为什么选择在Google play开发App有很多原因使我只在Google Play开发App, 国内的应用市场太多了, 上传起来真是麻烦,并且里面
  • 单Activity多Fragment模式快速构建一个App

    万次阅读 多人点赞 2016-08-08 16:03:25
    从我开始的学习,到现在我做了多个app,我一直在使用Fragment,并且形成了我自己的app架构模式“单Activity多Fragment”,即使用一个Activity多个Fragment去构建一个App的整体架构,我记得我有一个App其中就3个...
  • 开发一个App要100万? 太扯淡

    千次阅读 2016-01-04 18:16:00
    近期经常看到一些关于开发一个App要多少钱的文章出来,的说App开发要100万,的说要60万,其实这个不叫开发App,那叫做项目或者创业开公司要多少钱才对,而这种情况下之所以要这么多钱,也是基于一个对行业啥都不...
  • 一个新的App该如何推广

    千次阅读 2019-06-21 13:30:45
    刚出来的app在网络上肯定是一篇空白,网络上还没有任何关于新的app的信息,建立一个关于App的百科,用户搜索的话,用户可以从百科上更详细的了解你,同时,如果后期做品牌营销的话,也能为你引来更多的潜在用户。...
  • Hybrid APP指的是半原生半Web的...在Hybrid 当中,如何快速的判断一个APP页面是原生的还是H5页面呢? 1、看断网的情况 把手机的网络断掉。然后点开页面。然后可以正常显示的东西就是原生写的。 显示404或则错误页...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 475,620
精华内容 190,248
关键字:

如何知道一个app有没有问题