脚本实现Android、IOS工程名、包名、appId更改
在某些情况下,我们在第一次生成android或者ios工程之后,会有想更改工程名、包名以及ApplicationId的问题,但是更改之后可能会出现各种各样的报错,而且参考了很多的文章,其修改步骤比较零散,因此针对这种情况,写了脚本文件进行实现
使用到的shell脚本命令
grep
其可以用于查找指定目录下有某一字符串的所有文件,如下:
grep "str1" -rl dir
其用于查找在目录dir
下查找所有含有字符串str1
的文件。
这个主要是方便我们查找含当前包名、工程名的文件,方便后续修改
sed
其功能非常丰富,我这就不一一列举了,推荐大家去查看一些他所有的功能。
这里只是将本次使用到的命令进行说明,我们用的是-i
,其用于修改文件里的某个字符串的命令如下:
sed -i "" "s/${str1}/${str2}/g"
以上的命令是将str1替换成str2。
注意在mac上使用sed可能会报错,此时只需哎调用命令之前添加如下:
export LC_CTYPE='C'
Android
假设Android工程名为train
,原始包名为com.train
,想要修改成com.${projectName}
,projectName
一般需要传入
修改工程名、包名和applicationId,具体如下:
- 工程名修改
- 包名修改:将目录进行修改,文件中的引入也进行修改
- applicationId更改,一般与包名一致
相应脚本如下:
# 更改包名和applicationId
grep "com.train" -rl android/* | xargs sed -i "" "s/com.train/com.${projectName}/g"
# 根据包名更改包路径
prePkgName="android/app/src/main/java/com"
mkdir tmp
mv ${prePkgName}/train/* tmp
rm -rf ${prePkgName}
mkdir -p ${prePkgName}/${projectName}
mv tmp/* ${prePkgName}/${projectName}
rm -rf tmp
# 更改所有train的地方为工程名
grep "train" -rl android/* --exclude=train.sh | xargs sed -i "" "s/train/${projectName}/g"
上述主要针对以com开头的包名进行修改的,可以根据自己需求进行修改。
IOS
假设原来IOS工程名为train
,原始AppId为com.train
,然后想要修改为传入的projectName
,appId相应修改,具体需要以下操作:
- 更改工程名
- 更改目录
- 更改xcodeproj文件名
- 更改scheme名,多个的话可以自行增加修改
- 修改xworkspace名
相应脚本如下:
# 更改所有的train
grep "train" -rl ios/* --exclude=train.sh | xargs sed -i "" "s/train/${projectName}/g"
# 更改目录
mkdir -p ios/${projectName}
mv ios/train/* ios/${projectName}
rm -rf ios/train/
# 更改xcodeproj文件名
mv ios/train.xcodeproj ios/${projectName}.xcodeproj
# 更改scheme,多个的话可以自行增加修改
mv ios/train.xcodeproj/xcshareddata/xcschemes/train.xcscheme ios/train.xcodeproj/xcshareddata/xcschemes/${projectName}.xcscheme
# 修改xworkspace名
mv ios/train.xcworkspace ios/${projectName}.xcworkspace