Я пытаюсь изменить имя пакета в Android Studio с generic_app на app_name.
Я мог бы использовать инструмент «Refactor» из Android Studio, но я пытаюсь сделать это с помощью скрипта Python.
Однако когда я выполняю поиск и замену, а затем открываю свой проект в Android Studio, имя моего пакета не меняется. Вызовы app_name используются в моих действиях и фрагментах, но имя пакета остается прежним.
Даже после сборки проекта очистки / перестройки некоторые «сгенерированные» вещи остаются со старым именем пакета.
Чем именно отличается инструмент Refactor в Android Studio от внешнего поиска и замены?
Как мне этого добиться?
Вот мой код на Python (я начал сегодня, извините, если код ужасный, не стесняйтесь дать мне несколько советов):
import os
import sys
import fileinput
sys.argv = [sys.argv[0], 'appName', 'package_name', '123', 'api_address']
def main():
cls()
print("Starting compiler...")
if (len(sys.argv) > 4):
print("")
print("App name : {}".format(sys.argv[1]))
print("Package name : {}".format(sys.argv[2]))
print("Establishment ID : {}".format(sys.argv[3]))
print("Establishment api address : {}".format(sys.argv[4]))
input("\nPress any key to confirm")
setup(sys.argv[1])
refactor_package(sys.argv[1])
change_app_name(sys.argv[2])
set_establishment_id(sys.argv[3])
set_establishment_api_address(sys.argv[4])
else:
print("Incorrect use.")
print(".\\autocompiler.py app_name package_name establishment_id establishment_api_address")
os.chdir('..')
message = "\nPress any key to close"
choice = input(message).upper()
def setup(app_name):
command = ""
if (os.name == 'nt'):
command = "robocopy /E generic_app {}".format(app_name)
else:
command = "cp -rf ./generic_app {}".format(app_name)
os.system(command) # Will copy generic_app in a new project folder
os.chdir(app_name) # Will go in the created directory
command = "gradlew clean"
os.system(command) # Clear .build directory
command = "gradlew cleanBuildCache"
os.system(command) # Clear .build cache directory
# Refactor ; change establishment ID && API address ; build
def refactor_package(package_name):
rootdir = os.getcwd()
for root, subFolders, files in os.walk(rootdir):
#print("ROOT == {}".format(root))
for file in files:
#print("\t\tFILE == {}".format(file))
if (os.name == 'nt'):
check_file(root + '\\' + file, package_name)
else:
check_file(root + '/' + file, package_name)
for subFolder in subFolders:
print("\t\tSUBFOLDER == {}".format(subFolders))
def check_file(filePath, packageName):
if ("app\src\main\java\com\discodery\android" in filePath
and ".git" not in filePath):
print("OPENING FILE {}".format(filePath))
with open(filePath, "r") as file:
data = file.read()
#print("---------- ORIGINAL ----------")
#print(data)
file = open(filePath, "w")
file.write(data.replace("generic_app", packageName))
#print("===== RESULT =====")
file.close()
file = open(filePath, "r")
data = file.read()
#print(data)
file.close()
# input("Press any key to continue")
elif ("app\src\main\AndroidManifest.xml" in filePath):
print("SHOULD EDIT MANIFEST")
input("OK")
with open(filePath, "r") as file:
data = file.read()
file = open(filePath, "w")
file.write(data.replace('package="com.genericapp"', 'package="com.{}"'.format(packageName)))
file.close()
elif ("app\build.gradle" in filePath):
print("SHOULD EDIT APP BUILD.GRADLE")
input("OK")
with open(filePath, "r") as file:
data = file.read()
file = open(filePath, "w")
file.write(data.replace('applicationId "com.discodery.android.genericapp"', 'applicationId "com.discodery.android.{}"'.format(packageName)))
file.close()
def change_app_name(app_name):
pass
def set_establishment_id(establishment_id):
pass
def set_establishment_api_address(api_address):
pass
def cls():
os.system('cls' if os.name == 'nt' else 'clear')
main()