Last active
October 24, 2024 09:22
-
-
Save JayDev-Lee/c563909c80ed9508b5cb91abd331e98c to your computer and use it in GitHub Desktop.
android project package renaming script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
usage() { | |
if [ "$*" != "" ] ; then | |
echo "Error: $*" | |
fi | |
cat << EOF | |
Usage: $PROGNAME --package-name [PACKAGE_NAME] --title [TITLE] | |
Rename an Android app and package. | |
Options: | |
-h, --help display this usage message and exit | |
-p, --package-name [PACKAGE_NAME] new package name (i.e. com.example.package) | |
-t, --title [TITLE] new app title (i.e. MyApp) | |
EOF | |
exit 1 | |
} | |
NEW_PACKAGE="" | |
NEW_APP_NAME="" | |
# 인자 처리 | |
while [[ "$#" -gt 0 ]]; do | |
key="$1" | |
case $key in | |
-p|--package-name) | |
NEW_PACKAGE="$2" | |
if [ -n "$2" ] && [[ "$2" != -* ]]; then | |
NEW_PACKAGE="$2" | |
shift 2 | |
else | |
usage "Missing value for --package-name/-p" | |
fi | |
;; | |
-t|--title) | |
NEW_APP_NAME="$2" | |
if [ -n "$2" ] && [[ "$2" != -* ]]; then | |
NEW_APP_NAME="$2" | |
shift 2 | |
else | |
usage "Missing value for --title/-t" | |
fi | |
;; | |
-*) | |
usage "Unknown option '$1'" | |
;; | |
*) | |
usage "Too many arguments" | |
;; | |
esac | |
done | |
# 인자가 없는 경우 처리 | |
if [ -z "$NEW_PACKAGE" ] || [ -z "$NEW_APP_NAME" ]; then | |
echo "Usage: $0 --new-package <new_package> --new-name <new_app_name>" | |
exit 1 | |
fi | |
# 변수 정의 | |
OLD_PACKAGE="com.superapps.example" | |
OLD_APP_NAME="example" | |
PROJECT_DIR="$(pwd)" | |
# OLD_APP_NAME 대소문자 처리 | |
OLD_APP_NAME_LOWER=$(echo "$OLD_APP_NAME" | tr '[:upper:]' '[:lower:]') | |
OLD_APP_NAME_CAPITALIZED=$(echo "$OLD_APP_NAME" | awk '{print toupper(substr($0,1,1)) tolower(substr($0,2))}') | |
NEW_APP_NAME_LOWER=$(echo "$NEW_APP_NAME" | tr '[:upper:]' '[:lower:]') | |
echo "Updating package name from $OLD_PACKAGE to $NEW_PACKAGE" | |
echo "Updating app name from $OLD_APP_NAME to $NEW_APP_NAME" | |
# 모든 모듈의 디렉토리를 찾기 위한 반복문 | |
for module in $(find "$PROJECT_DIR" -maxdepth 3 -type d \( ! -path "*/build*" ! -path "*/.*" \)); do | |
echo "Updating package name in module: $module" | |
# Java/Kotlin 소스 파일 내의 패키지 이름 변경 | |
find "$module" -type f \( -name "*.java" -o -name "*.kt" \) -exec sed -i '' "s/$OLD_PACKAGE/$NEW_PACKAGE/g" {} + | |
find "$module" -type f \( -name "*.java" -o -name "*.kt" \) -exec sed -i '' "s/$OLD_APP_NAME_LOWER/$NEW_APP_NAME_LOWER/g" {} + | |
find "$module" -type f \( -name "*.java" -o -name "*.kt" \) -exec sed -i '' "s/$OLD_APP_NAME_CAPITALIZED/$NEW_APP_NAME/g" {} + | |
# version catalog 파일에서 패키지 이름 변경 | |
find "$module" -type f -name "libs.versions.toml" -exec sed -i '' "s/$OLD_PACKAGE/$NEW_PACKAGE/g" {} + | |
find "$module" -type f -name "libs.versions.toml" -exec sed -i '' "s/$OLD_APP_NAME/$NEW_APP_NAME_LOWER/g" {} + | |
find "$module" -type f -name "libs.versions.toml" -exec sed -i '' "s/$OLD_APP_NAME_CAPITALIZED/$NEW_APP_NAME/g" {} + | |
# AndroidManifest 파일에서 패키지 이름 변경 | |
find "$module" -type f -name "AndroidManifest.xml" -exec sed -i '' "s/$OLD_PACKAGE/$NEW_PACKAGE/g" {} + | |
find "$module" -type f -name "AndroidManifest.xml" -exec sed -i '' "s/$OLD_APP_NAME_LOWER/$NEW_APP_NAME_LOWER/g" {} + | |
find "$module" -type f -name "AndroidManifest.xml" -exec sed -i '' "s/$OLD_APP_NAME_CAPITALIZED/$NEW_APP_NAME/g" {} + | |
# Gradle 파일에서 패키지 이름 변경 | |
find "$module" -type f -name "build.gradle.kts" -exec sed -i '' "s/$OLD_PACKAGE/$NEW_PACKAGE/g" {} + | |
find "$module" -type f -name "build.gradle.kts" -exec sed -i '' "s/$OLD_APP_NAME_LOWER/$NEW_APP_NAME_LOWER/g" {} + | |
find "$module" -type f -name "build.gradle.kts" -exec sed -i '' "s/$OLD_APP_NAME_CAPITALIZED/$NEW_APP_NAME/g" {} + | |
# 리소스 파일(.xml)에서 패키지 이름 변경 | |
find "$module" -type f -name "*.xml" -exec sed -i '' "s/$OLD_PACKAGE/$NEW_PACKAGE/g" {} + | |
# .DS_Store 파일 제거 | |
find "$module" -name "*.DS_Store" -exec rm -f {} + | |
done | |
# 모듈 경로 탐색 및 배열 설정 | |
MODULES=$(find "$PROJECT_DIR" -type d -name "src" | sed 's|/src||' | sort -u) | |
# 각 모듈의 src 디렉토리에서 패키지 경로 변경 | |
OLD_PACKAGE_PATH=$(echo "$OLD_PACKAGE" | tr '.' '/') | |
NEW_PACKAGE_PATH=$(echo "$NEW_PACKAGE" | tr '.' '/') | |
for MODULE in $MODULES; do | |
for SRC_DIR in "main" "test" "androidTest"; do | |
for LANG_DIR in "java" "kotlin"; do | |
OLD_PATH="$MODULE/src/$SRC_DIR/$LANG_DIR/$OLD_PACKAGE_PATH" | |
NEW_PATH="$MODULE/src/$SRC_DIR/$LANG_DIR/$NEW_PACKAGE_PATH" | |
# 이전 패키지 경로가 존재하는지 확인 | |
if [ -d "$OLD_PATH" ]; then | |
# 새로운 패키지 경로 생성 | |
mkdir -p "$NEW_PATH" | |
# 파일들을 새로운 경로로 이동 | |
rsync -av "$OLD_PATH/" "$NEW_PATH/" | |
# 이전 빈 디렉토리 삭제 | |
rm -rf "$OLD_PATH" | |
fi | |
done | |
done | |
done | |
echo "Package name change completed!" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment