Map

遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 使用 forEach 进行遍历
president.forEach( (key, value){
print("forEach 遍历 : $key : $value");
} );

// 2 . 通过 for 循环遍历 Map 集合
// 调用 Map 对象的 keys 成员 , 返回一个由 键 Key 组成的数组
for (var key in president.keys){
print("for 循环遍历 : Key : $key , Value : ${president[key]}");
}

// 3 . 使用 map 方法进行遍历
// 遍历过程中生成新的 Map 集合
// 遍历后 , 会返回一个新的 Map 集合
// 传入一个回调函数 , 参数是 key value , 返回值是新的 Map 集合
Map president2 = president.map(
(key, value){
// 这里将 Map 集合中的 Key 和 Value 进行颠倒 , 生成一个新的 Map 集合
return MapEntry(value, key);
}
);

// 打印新的 Map 集合
print(president2);


Android逆向记录

1
2
3
4
5
6
7
8
9
10
11
12
13
#反编译apk文件
apktool d app-release.apk

如果出现编译assets文件夹中的dex文件失败,则使用--only-main-classes参数。

#编译修改后的应用
apktool b app-release -o output.apk

#对编译好的apk进行签名
apksigner sign --ks keystore文件路径 output.apk

~/Android/sdk/build-tools/29.0.3/apksigner sign --ks ~/Android/tools/keys/test_keystore lizhi_output.apk

签名参考:https://developer.android.com/studio/command-line/apksigner?hl=zh-cn

META-INF文件夹的内容

MINFEST.MF:声明了资源,与CERT.SF文件相似。
CERT.RSA:公钥证书。keytool -printcert -file CERT.RSA 输出证书内容

Read More