I am trying to change my package name under Android Studio, from generic_app to app_name.
I could use the "Refactor" tool from Android Studio, but I am trying to do this with a python script. However, when I make my search and replace, then I open my project in android studio, my package name do not change. Calls to app_name are use in my activities and fragments, but the package name remains the same.
Even after a build clean / rebuild project, some "generated" stuff are remaining with the old package name.
What exactly differs from the Refactor tool in Android Studio, and an external search and replace ?
How can I achieve this ?
Here is my python code (I started today, sorry if the code is awful, feel free to give me some advices) :
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()