forked from fengjixuchui/decompile
-
Notifications
You must be signed in to change notification settings - Fork 0
/
replacePkgName.sh
executable file
·125 lines (117 loc) · 3.88 KB
/
replacePkgName.sh
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#!/bin/bash
# 多行注释放可执行语句,会自觉执行。
#: << !
#!
#这种多行注释 可以写东西
<<'COMMENT'
文件夹中的文件内容替换
用户键入三个参数
sh replacePkgName.sh 完整路径的文件夹 被替换包名 替换后的包名
具体实现
mac 例子 :
sed -i "" "s/com\/operassd\/shipgame/cn\/test/g" `find xx.apk-0 -name "*.smali"|xargs grep "com\/operassd\/shipgame" -rl`
sed -i "" "s/cn.test/cn.test/g" `find xx.apk-0 -name "*.smali"|xargs grep "cn.test" -rl`
Linux 例子:
sed -i 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/' /etc/ssh/sshd_config
总体格式:
sed -i "" "s/替换内容/替换后内容/g" `find 文件夹名字 -name "*.文件结尾"|xargs grep "替换内容" -rl`
COMMENT
## 获取替换的名字
# 使用方法示例
#pkg="com.operassd.shipgame"
#echo "==>$(replaceName $pkg)"
function replaceName()
{
name=""
if [ $# == 1 ]; then
pkg=$1
array=(${pkg//./ })
i=0
len="${#array[@]}"
while [ $i -lt $len ]; do
#echo " $i -----> ${array[$i]} ----$name"
if [ `expr $i + 1` -eq $[$len] ]; then
#echo "aaa $name"
name="${name}${array[$i]}"
else
#echo "bbb $name"
name="${name}${array[$i]}\/"
fi
let i++
done
fi
echo "$name"
}
# 可执行平台判断
# 使用方法示例
### 打印方法 需要把方法放到括号里
#os=$(osType)
#echo $os
#if [ "Mac" == "$os" ]; then
# echo "您使用的是mac系统"
#elif [ "Linux" == "$os" ]; then
# echo "您使用的是Linux系统"
#else
# echo "您使用的是其他系统,即将使用"
#fi
function osType()
{
os_type=$(uname)
isMsys=$(echo $os_type | grep "Msys")
isCygwin=$(echo $os_type | grep "Cygwin")
isLinux=$(echo $os_type | grep "Linux")
isMac=$(echo $os_type | grep "Darwin")
if [ "$isMac" != "" ]; then
echo "Mac"
elif [ "$isLinux" != "" ]; then
echo "Linux"
elif [ "$Cygwin" != "" ]; then
echo "Linux"
elif [ "$isMsys" != "" ]; then
echo "Linux"
else
echo "Other"
fi
}
# 程序入口,使用方法:
# sh replacePkgName.sh apk/build com.operassd.shipgame cn.test
if [ $# != 3 ]; then
echo "E. 参数不对. 正确使用方法: sh $0 待操作文件夹名称 待替换包名 替换后的包名"
else
# osprocess $2 $3
dir="$1"
srcpkg="$2"
deskpkg="$3"
# 1. 替换字符串结束
src=$(replaceName $srcpkg)
desk=$(replaceName $deskpkg)
os=$(osType)
echo $os
if [ "Mac" == "$os" ]; then
echo "您使用的是mac系统"
# echo "sed -i "" "s/$src/$desk/g" `find $dir -name "*.smali"|xargs grep "$src" -rl`"
sed -i "" "s/$src/$desk/g" `find $dir -name "*.smali"|xargs grep "$src" -rl`
if [ $? -eq 0 ]; then
echo "Mac. 替换smali字符串成功"
sed -i "" "s/$srcpkg/$deskpkg/g" `find $dir -name "*.xml"|xargs grep "$srcpkg" -rl`
if [ $? -eq 0 ]; then
echo "Mac. 替换XML字符串成功"
fi
fi
elif [ "Linux" == "$os" ]; then
echo "您使用的是Linux系统"
sed -i "s/$src/$desk/g" `find $dir -name "*.smali"|xargs grep "$src" -rl`
if [ $? -eq 0 ]; then
echo "Linux. 替换smali字符串成功"
sed -i "s/$srcpkg/$deskpkg/g" `find $dir -name "*.xml"|xargs grep "$srcpkg" -rl`
if [ $? -eq 0 ]; then
echo "Linux. 替换XML字符串成功"
fi
fi
else
echo "您使用的是其他系统,即将使用"
fi
# 2. 调用Java程序替换文件夹
java -Xmx4g -cp lib/app_service_0.0.1.jar com.sanbo.service.ReplaceService "$dir" "$srcpkg" "$deskpkg"
# 3. 删除临时文件. Java中已经实现
fi