adb

        install/uninstall:安装/卸载手机中的应用。
        devices:查看当前连接到电脑中的设备。

adb shell

        首先运行adb shell,此时光标前面会变成$。
        ls:列出当前目录下的所有文件和文件夹。
        mkdir:创建文件夹,make directory的缩写。
        pwd:列出当前所在的目录。
        cd:进入到某一个目录,change directory的缩写。定义文件路径时:..代表当前目录的上一级目录,可以多次使用;.[点]代表当前目录。因此,cd ..是退回上级目录。
        rmdir:删除某个文件夹,remove directory的缩写。它不能删除非空文件夹。
        rm:删除指定的文件,是remove的缩写。使用rm -r用于删除非空文件夹。也就是说:rm删除文件,不删除文件夹;rmdir删除空文件夹,不删除文件;rm -r删除非空文件夹,也可用于删除文件。
        mv src dst:移动,move的缩写。src与dst在同一目录下时,可以用来重命名文件。即可用来操作文件,也可用来操作文件夹(空或非空都行)。
        cp src dst:将src指定的文件复制到dst中,copy的缩写。cp用于复制单个文件,cp -r用于复制文件夹(无论为空还是不为空),也可用来复制文件。
        -r:命令后跟-r,表示在指定的目录中递归地进行操作——对目录下的所有文件或文件夹进行相同的操作。
        cat:将指定的文件的内容输出的屏幕上。
        grep “string" file:在指定的文件中查找string。后跟-i表示忽略大小写。后跟-r表示在当前指定目录的文件中递归查找指定的string。
        gzip:将指定的文件(不能是文件夹)压缩成gz文件。如gz qq.txt会将qq.txt文件压缩成qq.txt.gz。
        gzip -d:对指定的gz文件进行解压。
        ping:与win上命令含义一样。
        df:查看磁盘使用情况。
        exit:退出adb shell交互。
        dumpsys:查看当前系统中任务栈以及栈内各activity的信息等。可以使用重定义(>)功能将输出的信息导出到指定的文件中。
        screencap -p xxx.png:截图保存到指定位置。在cmd中运行不需要权限。
        ps:查看当前系统中的所有进程。后可跟|grep package_name来查看指定包名的应用的进程。如:

打包过程

android打包成可执行的apk文件分为以下几个过程:
        1,使用dx将.class编译成.dex文件。
        2,使用aapt将工程中的资源文件打包成.apk。

3,使用aapt将.dex文件添加到.apk文件中。

4,使用aapt将.so添加.apk文件中

5,使用apksigner对生成的apk文件进行签名。

aapt

        全称是android asset packaging tool——android资源打包工具。参考。其作用有二:1,将资源文件生成apk文件;2,将.dex,.so文件添加到生成的apk文件中,从而形成一个完整的apk文件。

package

        该命令主要用于将资源打包成apk文件。如下:

  1. aapt package -f -M ./app/src/main/AndroidManifest.xml -S ./app/src/main/res -S ./lib1/src/main/res -S ./lib2/src/main
  2. /res -I D:\android\sdk\platforms\android-25\android.jar -F test.apk --auto-add-overlay

-M指主应用的清单文件,第一个-S指主应用的res文件,后面-S是library工程的res文件,-I指android.jar的所在路径,-F指apk文件的输出路径。

        该命令会将所有资源打包成一个apk文件,但该文件只包含res目录下手资源以及相应的清单文件。
        如果主工程与lib工程有同名的资源文件,则以-S在前的为主。
        -S指向的是添加res目录下的资源,也可以通过-A指定添加assets目录下的资源——assets资源的覆盖规律与res是一样的。

add与remove

        add可以向指定的apk文件中添加文件(如dex文件或者.so文件等),remove可以从指定的apk文件中移除文件。例如上面的先将资源生成apk文件后,可以通过add命令将dex文件添加到apk中。如:

  1. C:\Users\xx\Desktop\app-release>aapt add test.apk classes.dex
  2. 'classes.dex'...
  3. C:\Users\xx\Desktop\app-release>aapt remove test.apk xx.dex

第一行是向apk文件中添加dex文件,第二行是从apk中移除xx.dex文件。

        添加.so文件:

  1. C:\Users\hufeng7\Desktop\app-release>aapt add test.apk lib/x86_64/libnative-lib.so

要注意:被add到apk文件中的文件,一定不能带前缀,否则就会在apk中创建同名的文件。如上面添加dex文件时,如果写成./dex,那么在apk中首先会创建一个文件名为.的文件夹,然后将classes.dex文件放到该目录下。

        一个apk完整的情况是:dex文件在最上级,不需要目录;lib也在最上级,不需要目录,lib下的所有文件就跟开发时lib文件夹中一样;res也在最上级,res也在最上级,其下的目录也与开发时目录一致。所以上面添加so文件时,不需要在前面加上./[代表当前目录]。

签名apksigner

        可使用apksigner对apk进行签名。可参考官网文档。示例如下:

  1. D:\android\sdk\build-tools\25.0.2>apksigner sign --ks C:/Users/xx/Desktop/c
  2. ompany/test.jks --out C:\Users\xx\Desktop\diyidian2.apk diyidian.apk

第一个apk文件(即--out后指定的值)是签名后生成的文件的位置,第二个apk是要被签名的文件。如果没有指定--out,则签名之后的apk会覆盖掉未签名的apk。

--ks指的是签名文件所在的位置。

dx与dexdump

dx:用于将.class文件转成.dex文件(或者是.jar,.zip文件)。如:

  1. dx --dex [--output=<file>] [<file>.class | <file>.{zip,jar,apk} | <directory>]

--output后跟的是目标路径。最后是class文件的路径或者zip,jar,apk文件路径。

dexdump:用于获取dex文件中dalvik字节码。如dexdump -d将dex文件还原成dalvik字节码。

总结

        结合反编译以及打包、签名,就可以将一个apk进行反编译后再进行安装了。
        1,首先反编译,拿到smali文件与资源文件。
        2,通过aapt package将资源文件打包成apk文件。
        3,修改smali文件,并打包成dex文件。
        4,通过aapt add将dex文件导入到apk文件中——如果有lib,也需要将lib导入。
        5,将apk文件进行签名。

adb,aapt等命令使用的更多相关文章

  1. ADB简单基础命令

    1.查看设备 adb devices 这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示 2.安装软件 adb install adb install :这个命令将 ...

  2. 2.SDK目录结构和adb工具及命令介绍

    安卓开发学习笔记 1.安卓开发之环境搭建 2.SDK目录结构和adb工具及命令介绍 1.SDK目录介绍: ******************************** add-ons:Androi ...

  3. adb 卸载APP命令和杀死APP命令

    使用adb 卸载APP命令 在cmd命令行下,直接 输入 adb uninstall 包名 比如 adb uninstall com.ghstudio.BootStartDemo 杀死APP命令 先用 ...

  4. win7 cmd终端连接android手机运行adb shell脚本命令

    win7 cmd终端连接android手机运行adb shell脚本命令 (2013-03-22 20:13:57) 转载▼ 标签: android it shell 连接 linux 分类: 嵌入式 ...

  5. adb的常用命令及如何查看被占用的端口

    adb是什么?:adb的全称为Android Debug Bridge,就是起到调试桥的作用.通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具.a ...

  6. adb shell am命令

    adb shell am命令是在cmd命令行可以通过命令来启动Activity,Boradcast,Service等,更多使用可以参考下面附件. 比如在cmd串口我们发送广播,广播action是&qu ...

  7. 移动测试基础—adb、monkey命令

    最近打算把移动测试相关的知识总结一下,先从基础开始吧,总结一下adb.monkey命令 adb常用命令总结 adb / adb -help 使用帮助 adb devices 查看连接到电脑的设备 ad ...

  8. adb的常见命令和异常报错操作

    adb连接状态 adb devices , 获取设备列表及设备状态 设备的状态有 3 种 device , 设备连接正常 offline , 设备离线,连接出现异常 unauthorized 设备为进 ...

  9. ADB常用的命令

    ADB常用的命令: 1)adb devices---获取设备列表及设备状态 2)adb get-state---获取设备的状态 设备的状态有 3 钟,device.offline.unknown. d ...

随机推荐

  1. [每日一讲] Python系列:字符串(下)

    字符串的常见操作 """ DATA STRUCTURE Container: Sequence -- String String is immutable.If stri ...

  2. jvm——class类文件的结构

    class类文件并不一定以磁盘的形式存在,也可以是由类加载器直接生成的二进制流,他其实是一种数据结构,类似于c语言结构体,这种数据结构只有两种数据类型:无符号数和表. 1.魔数:类似于文件拓展名,CA ...

  3. python3.5-tensorflow-keras 安装

    cpu centos FROM centos:7 MAINTAINER yon RUN yum -y install make wget \ && wget -O /etc/yum.r ...

  4. JUnit——Annotation

    Annotation是对属性,方法或者类做一个标记  比如@override表示复写了父类中的方法 [1]@Test: 测试方法(说明该方法为测试方法) a)(expected=XXException ...

  5. pythonCSV模块

    在爬虫过后会取得很多信息! 将信息存起来方法还很多中!今天提一下CSV模块 导入模块 import csv 这里先写个列表 rows = [['zhangsan',20],['lisi',22],[' ...

  6. sar性能监控

    1.安装sar: yum -y install sysstat 第一次使用sar命令会提示如下错误:“无法打开 /var/log/sa/sa13: 没有那个文件或目录”. 这里的值13是当天的日期,如 ...

  7. [LeetCode]-DataBase-Rising Temperature

    Given a Weather table, write a SQL query to find all dates' Ids with higher temperature compared to ...

  8. eclipse.ini中加入-vm

    1. 在eclipse.ini中添加两行     -vm     C:\Program Files\Java\jdk1.6.0_02\bin\javaw.exe     注意: 要写在两行,写在一行不 ...

  9. 初识java虚拟机——JVM

    1.Java程序运行过程 编写 编译 运行 过程如图所示: 2.JVM的认识 定义:JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚 ...

  10. 前端必须掌握的 docker 技能(1)

    概述 作为一个前端,我觉得必须要学会使用 docker 干下面几件事: 部署前端应用 部署 nginx 给部署的 nginx 加上 https 使用 docker compose 进行部署 给 ngi ...