Android知识集锦
术语 | 说明 |
smali |
可以指:
dex字节码无法阅读,smali为其提供了较好的可读性 |
APK包的res目录下,会有一些drawable开头的子目录,用来存放针对不同像素密度屏幕的资源文件:
目录后缀 | 像素密度范围 | 机型举例 |
mdpi | 120dpi~160dpi | |
hdpi | 160dpi~240dpi | |
xhdpi | 240dpi~320dpi | |
xxhdpi | 320dpi~480dpi | Sony Xperia Z5 |
xxxhdpi | 480dpi~640dpi |
可能原因是,APK被重复签名多次。删除掉META-INF目录下的签名文件、签名块文件后,重新签名即可。
APK包反向工程工具。
子命令 | 说明 |
if |
命令格式: apktool if|install-framework [options] <framework.apk> 安装框架文件到目录中,选项: |
d |
命令格式: apktool [-q OR -v] d[ecode] [options] <file_apk> 解码file_apk,生成以下目录或者文件: 可用选项: |
b |
命令格式: apktool [-q|--quiet OR -v|--verbose] b[uild] [options] <app_path> 对解码后的目录进行重新打包,可用选项: |
进行.dex格式、.smali格式、.class格式之间的转换。
子命令 | 说明 |
d2j-dex2jar |
转换.dex为.jar文件 选项: |
1 2 |
# 转换apk中的.dex为Java的class文件,这些class文件打包在apk_to_decompile-dex2jar.jar中 d2j-dex2jar -f ~/path/to/apk_to_decompile.apk |
命令格式: adb [子命令] [选项]
选项 | 说明 |
-a | 使adb在所有网络接口上监听连接 |
-d | 使命令仅针对USB连接的设备有效 |
-e | 使命令仅针对运行中的模拟器有效 |
-s <specific device> | 使命令仅针对与特定设备或模拟器,通过serial number或 qualifier指定设备 |
-H | adb服务器的主机名,默认localhost |
-P | adb服务器的监听端口,默认5037 |
列出设备、连接/断开设备:
子命令 | 说明 |
devices [-l] | 列出所有连接的设备,-l会显示设备的qualifier |
connect <host>[:<port>] | 通过TCP/IP连接到某个设备,默认5555端口 |
disconnect [<host>[:<port>]] | 断开TCP/IP连接,不指定主机和端口,则端口所有通过TCP/IP连接的设备 |
针对设备的子命令:
子命令 | 说明 | ||
adb push [-p] <localpath> <remotepath> | 拷贝目录或者文件到设备,-p显示进度 | ||
adb pull [-p] [-a] <remote> [<local>] | 拷贝目录或者文件到本地,-a拷贝时间戳和UNIX文件mode | ||
adb sync [ <directory> ] | 当本地文件变化时,拷贝目录到设备 | ||
adb shell | 交互式的运行Linux命令,示例:
|
||
adb shell <command> | 运行Linux命令 | ||
adb emu <command> | 运行模拟器控制台命令 | ||
adb logcat [ <filter-spec> ] | 显示设备日志 | ||
adb install [-lrtsdg] <file> |
安装APK到设备,-r替换已经存在的应用 报错: |
||
adb uninstall [-k] <package> | 从设备上移除软件包,-k表示保留应用的数据和缓存 |
JRE自带密钥数据库管理工具。用于加密密钥对、X.509证书链、受信任证书的管理。该工具支持基于DES算法的密码管理。
一个密钥数据库(keystore)可以包含多个密钥条目,以别名(alias)进行唯一区分。
命令格式: keytool [commands]
子命令 | 说明 | ||
-gencert |
可用选项:
生成一个证书,作为证书请求的响应。该命令从infile(不指定该选项则使用stdin)读取证书请求,使用alias这个私钥进行签名并输出X.509格式的证书到outfile(不指定则使用stdout) 当指定-rfc选项时,输出格式是基于Base64的PEM,否则使用二进制的DER 当指定dname选项时,该选项作为输出证书的subject字段,不指定则使用请求中该字段的值
|
||
-genkeypair |
可用选项:
别名-genkey,用于生成密钥对(公钥/私钥),并包装公钥为X.509 v3自签名格式的证书,该证书作为单元素证书链存储。这个自签名证书 + 私钥作为keystore中的一个条目保存,以alias唯一识别 -keyalg 指定生成密钥对的算法,默认DSA,可选RSA 某些选项如果不提供,会交互式的提示 |
||
-genseckey | 生存密钥并存储到keystore中 | ||
-importcert |
可用选项:
从cert_file文件中读取证书或者证书链,并且存储到keystore中,以alias进行识别 支持导入X509 v1 v2 v3格式的证书,以及这些证书形成的PKCS#7格式的证书链。数据必须是二进制的或者是BASE64编码的。对于BASE64格式,证书必须以-----BEGIN开头-----END结束 之所以需要导入证书,可能出于以下目的:
|
||
-importpassword | 导入一个密码 | ||
-importkeystore | 从其它keystore导入内容 | ||
-certreq | 制作证书请求 | ||
-exportcert | 导出证书 | ||
-list | 列出alias对应条目的信息,打印到标准输出 | ||
-printcert |
从文件、SSL服务器、被签名JAR等地方读取证书信息 |
||
-printcertreq | 打印证书请求 | ||
-printcrl | 读取证书吊销列表 | ||
-storepasswd | 修改keystore的密码 | ||
-keypasswd | 修改某个条目的密码 | ||
-delete | 从keystore中删除某个条目 | ||
-changealias | 修改alias |
1 2 3 |
# 生成一个密钥对,并添加到数据库中 keytool -genkeypair -v -keystore ~/Android/Keystores/alexwong.keystore -alias development -keyalg RSA -keysize 2048 -validity 36500 |
对JAR文件进行签名,或者执行签名校验 —— 签名是否有效、签名后的JAR是否完整。
被签名后的JAR文件,仅仅是在META-INF目录中多了两个额外的文件:
- 以.SF为扩展名的签名文件
- 以.DSA、.RSA或者.EC为扩展名的签名块文件
命令格式:
1 2 3 4 |
# 进行签名 jarsigner [ options ] jar-file alias # 校验签名 jarsigner -verify [ options ] jar-file [alias ...] |
1 2 3 |
# 签名一个APK(JAR)文件 jarsigner -keystore ~/Android/Keystores/alexwong.keystore -storepass simple -keypass simple -signedjar android-signed.apk android.apk development |
Leave a Reply