adb测试常用命令

adb测试常用命令,第1张

adb --help ----查看帮助手册

adb devices ----检测连接到电脑的安卓设备

adb logcat > 本地电脑路径 \xxtxt ----打印log信息到本地电脑的某个文件

adb pull 手机路径 本地电脑路径 ----从手机拉取文件放到电脑上

adb push 本地电脑路径 手机路径 -----把本地电脑的文件推到手机上

adb shell ----登录手机设备的shell,可以使用Linux命令 *** 作手机系统的文件 安卓手机的内核是Linux

adb install xxxapk ----获取apk的安装包所在地址

adb uninstall 应用包名 ----卸载应用程序

adb shell dumpsys activity | find "mFocusedActivity" ----查看前台应用activity名,即查看当前打开的应用的当前页面,activity可以理解成页面

adb connect/disconnect ----通过WiF远程连接手机进行调试

adb kill-server ----终止adb服务

adb start-server ----启动adb服务 通常在adb遇到问题的时候 和adb kill-server一起使用

adb shell pm list packages ----列出所有包名,参数如下

-f 列出所有apk路径和包名

-s 列出系统apk路径和包名

-3 列出用户apk路径和包名

连接多台设备时,需要对指定设备运行adb命令:adb -s 设备序列号 具体命令 (设备序列号即adb devices得到的那串数字)

安卓的APK么?

安卓的APK是个压缩包格式,我给你个思路 具体代码你去写 还是比较简单的

分为两步:

①上传按钮点击时解压APK压缩包

②获取压缩包内AndroidManifestxml(apk的包名,版本号,版本名称都在此XML文件内)

③解析这个XML

既然答了 我就完善一下:(在codeplex上面找到的)

 

using AndroidXml;

using IonicZip;

using System;

using SystemCollectionsGeneric;

using SystemIO;

using SystemLinq;

using SystemText;

using SystemThreadingTasks;

using SystemXml;

namespace APKRead

{

    class NamespaceInfo

    {

        public string Prefix { get; set; }

        public string Uri { get; set; }

    }

    class Program

    {

        static List<AndroidInfo> androidInfos = new List<AndroidInfo>();

        static void Main(string[] args)

        {

            //要分析的文件名称

            var manifest = "AndroidManifestxml";

            //读取apk,通过解压的方式读取

            using (var zip = ZipFileRead("Newsapk"))

            {

                using (Stream zipstream = zip[manifest]OpenReader())

                {

                    //将解压出来的文件保存到一个路径(必须这样)

                    using (var fileStream = FileCreate(manifest, (int)zipstreamLength))

                    {

                        // Initialize the bytes array with the stream length and then fill it with data

                        byte[] bytesInStream = new byte[zipstreamLength];

                        zipstreamRead(bytesInStream, 0, bytesInStreamLength);

                        // Use write method to write to the file specified above

                        fileStreamWrite(bytesInStream, 0, bytesInStreamLength);

                    }

                }

            }

            //读取解压文件的字节数

            byte[] data = FileReadAllBytes(manifest);

            if (dataLength == 0)

            {

                throw new IOException("Empty file");

            }

            #region 读取文件内容

            using (var stream = new MemoryStream(data))

            {

                var reader = new AndroidXmlReader(stream);

                while (readerRead())

                {

                    switch (readerNodeType)

                    {

                        case XmlNodeTypeElement:

                            {

                                AndroidInfo info = new AndroidInfo();

                                androidInfosAdd(info);

                                infoName = readerName;

                                infoSettings = new List<AndroidSetting>();

                                for (int i = 0; i < readerAttributeCount; i++)

                                {

                                    readerMoveToAttribute(i);

                                    AndroidSetting setting = new AndroidSetting() { Name = readerName, Value = readerValue };

                                    infoSettingsAdd(setting);

                                }

                                readerMoveToElement();

                                break;

                            }

                    }

                }

            }

            #endregion

            FileDelete(manifest);

            StringBuilder builder = new StringBuilder();

            foreach (var androidInfo in androidInfos)

            {

                builderAppend(stringFormat("{0}:",androidInfoName));

                foreach (var setting in androidInfoSettings)

                {

                    builderAppend("{");

                    builderAppend(stringFormat("'{0}':'{1}'",settingName,settingValue));

                    builderAppend("},");

                }

                builderAppend("\n\n");

            }

            ConsoleWriteLine(builderToString());

        }

    }

    /// <summary>

    /// android应用程序信息

    /// </summary>

    public class AndroidInfo

    {

        public string Name { get; set; }

        public List<AndroidSetting> Settings { get; set; }

    }

    /// <summary>

    /// 设置

    /// </summary>

    public class AndroidSetting

    {

        public string Name { get; set; }

        public string Value { get; set; }

    }

}

      

//引用的IonicZip库可以直接通过 nuget下载。

首先安装java环境,然后到google code里面下载apktool152tarbz2和apktool-install-windows-r05-ibottarbz2

从两个压缩包中解压aaptexe、apktoolbat和apktooljar三个文件,放在一个文件夹中(为方便命令行中使用apktool命令,可将解压到的路径放入path或者直接将这三个文件放入path路径下的文件夹,如C:\Windows)

通过cmd运行 Apktool 命令:

apktool d XXXapk ABC 反编译XXXapk到文件夹ABC

apktool b ABC 从文件夹ABC重建APK,输出到ABC\dist\outapk

原理:

通过查看AndroidManifestxml

方法:

可以通过如下方法获得:

1aapt

aapt dump xmltree apk路径 AndroidManifestxml > 输入的路径

2apktool 反编译

apktool d -f apk路径 输出的路径

3monkey---Android自带的工具

adb shell monkey --port 1080 -v -v

aapt即 Android Asset Packaging Tool

该工具在SDK/tools目录下,如果你没有设置环境变量,那需要进入该目录下才能运行aapt命令,如果设置了环境变量则可以在任何目录下运行aapt命令了。

1、列出压缩文件目录

aapt l[ist] [-v] [-a] file{zip,jar,apk}

参数:

-v:会以table的形式输出目录,table的表目有:Length、Method、Size、Ratio、Date、Time、CRC-32、Name。其中Method表示压缩形式,有Deflate和Stored两种,即该Zip目录采用的算法是压缩模式还是存储模式;Ratio表示压缩率。

-a:会详细输出所有目录的内容。

2、查看APK的相关信息

aapt d[ump] [--values] WHAT file{apk} [asset [asset ]]

badging Print the label and icon for the app declared in APK

permissions Print the permissions from the APK

resources Print the resource table from the APK

configurations Print the configurations in the APK

xmltree Print the compiled xmls in the given assets

xmlstrings Print the strings of the given compiled xml assets

1)、查看APK包的packageName、versionCode、applicationLabel、launcherActivity、permission等各种详细信息

aapt dump badging < fileapk>

2)、查看权限

aapt dump permissions <fileapk>

3)、查看资源列表

aapt dump resources <fileapk>

把查看信息保存到文件中去可以使用:

aapt dump resources <file_pathapk> > sodinotxt

4)、查看APK配置信息

aapt dump configurations <file_pathapk>

5)、查看指定APK的指定XML文件

aapt dump xmltree <file_pathapk> res/xml

以树形结构输出的xml信息。

aapt dump xmlstrings <file_pathapk> res/xml

输出xml文件中所有的字符串信息。

3、编译android资源

aapt p[ackage] [-d][-f][-m][-u][-v][-x][-z][-M AndroidManifestxml] \

[-0 extension [-0 extension ]] [-g tolerance] [-j jarfile] \

[--debug-mode] [--min-sdk-version VAL] [--target-sdk-version VAL] \

[--app-version VAL] [--app-version-name TEXT] [--custom-package VAL] \

[--rename-manifest-package PACKAGE] \

[--rename-instrumentation-target-package PACKAGE] \

[--utf16] [--auto-add-overlay] \

[--max-res-version VAL] \

[-I base-package [-I base-package ]] \

[-A asset-source-dir] [-G class-list-file] [-P public-definitions-file

\

[-S resource-sources [-S resource-sources ]] \

[-F apk-file] [-J R-file-dir] \

[--product product1,product2,] \

[-c CONFIGS] [--preferred-configurations CONFIGS] \

[-o] \

[raw-files-dir [raw-files-dir] ]

Package the android resources It will read assets and resources that are

supplied with the -M -A -S or raw-files-dir arguments The -J -P -F and -R

options control which files are output

部分参数解释:

-f:如果编译出来的文件已经存在,强制覆盖;

-m:使生成的包的目录放在-J参数指定的目录;

-J:指定生成的RJava的输出目录;

-S:res文件夹路径;

-A:assert文件夹的路径;

-M:AndroidManifestxml的路径;

-l:某个版本平台的androidjar的路径;

-F:具体指定APK文件的输出

1)、将工程的资源编译出Rjava文件

aapt package –m –J <Rjava目录> -S <res目录> -l <androidjar目录> -M

<AndroidManifestxml目录>

2)、将工程的资源编译到一个包里

aapt package –f –S <res目录> -l <androidjar目录> -A <assert目录> -M

<AndroidManifestxml目录> -F <输出的包目录>

4、打包好的APK中移除文件

aapt r[emove] [-v] file{zip,jar,apk} file1 [file2 ]

5、添加文件到打包好的APK中

aapt a[dd] [-v] file{zip,jar,apk} file1 [file2 ]

6、显示aapt的版本

aapt v[ersion]

以上就是关于adb测试常用命令全部的内容,包括:adb测试常用命令、C#中,上传apk时,怎样获取apk的基本信息、如何通过反编译查询apk包名信息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9692175.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存