android - Android Studio 重构和基本搜索/替换有什么区别?
问题描述
我正在尝试将 Android Studio 下的包名称从 generic_app 更改为 app_name。
我可以使用 Android Studio 中的“重构”工具,但我正在尝试使用 python 脚本来执行此操作。但是,当我进行搜索和替换时,我在 android studio 中打开我的项目,我的包名没有改变。对 app_name 的调用在我的活动和片段中使用,但包名称保持不变。
即使在构建清理/重建项目之后,一些“生成”的东西仍然保留着旧的包名称。
与 Android Studio 中的 Refactor 工具以及外部搜索和替换有什么区别?
我怎样才能做到这一点?
这是我的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()
解决方案
IntelliJ 的 Refactor 选项确实是“查找和替换”。从某种意义上说,它还不止于此,它更强大并且可以提防很多事情。(不要大声说出来,但它也会带来副作用。)
我会说第一步是查找和替换,但这是一个智能的步骤。当您重构参数的名称时,它只会更新它,而不是下面包含相同单词的方法 200 行。
它还查找所有用法,这比全局查找和替换更强大。
如果出现冲突,IDE 提供了一个界面来选择退出某些更改。等等。在https://www.jetbrains.com/help/idea/tutorial-introduction-to-refactoring.html阅读更多内容
推荐阅读
- c# - RestSharp C# JsonDeserializer to List 将对象属性值设为空
- javascript - 您将如何比较两个数组并在两个数组之间进行过滤?
- c# - 从抽象类字段继承的类被神秘地覆盖
- javascript - Formik 测试错误:初始化 React 时定义了“document”全局,但不再定义
- mongodb - Mongoose findOneAndUpdate:更新对象数组中的一个对象
- java - String.split() 导致创建一个空字符串,我该如何防止这种情况?
- math - 为什么这个哥德巴赫猜想程序在 Prolog 中不起作用?
- java - 使用 spotify docker 客户端时如何禁用 http.wire?
- string - 第一个字符大写、小写和修剪的字符串的给定名称是什么?
- api-platform.com - 502 错误网关 nginx/1.13.12