如何在基于IntelliJ IDEA的新IDE Android Studio中重命名软件包?

是否包含自动重构?

我想进行大规模重构,但我不知道怎么做。我在Eclipse工作了两年,在Eclipse中它是一个一键操作。


当前回答

要在Android studio中重命名包名,请单击项目部分中的设置图标并取消选中压缩空中间包,然后包将拆分为多个文件夹名,然后右键单击需要更改名称的文件夹,单击refactor->rename->Type the name you want To change in->refactor-->refactor Directory,然后在整个项目中导入R.java文件。为我工作。

其他回答

在java目录中创建一个新的包,并将项目移动到该包中。就像您当前的项目id是com.testapp.user,您希望将其更改为xyz.testpp.user。然后在src/java目录中创建一个名为xyz的包,并将您的子包testapp.use移动到xyz中。最后,更新build.gradle和manifest项目id。

在Java文件夹中选择软件包名称。移位+F6更改软件包名称并单击“确定”。

您的包名将从所有Java文件和清单文件中更改。您必须从build.gradle手动更改包名。

我在这里找到了另一种可行的方法,或者对一些答案采取了额外的步骤,特别是如果你想改变域名的话。它在Android Studio 1.4中工作。这是我所做的:

打开Manifest.xml并将包名称更改为所需的名称。打开appbuild.gradle文件,将defaultConfig中的应用程序Id更改为清单中的相同名称,然后重建项目。如果仍然存在问题,请在包名下打开一个文件,转到包面包屑(即文件开头的包声明)并将光标设置为要更改的域,然后单击“Shift+F6”,会出现一个带有多个使用警告的对话框,单击“重命名包”,然后单击”Do Refactor“,它应该重命名包括R.Java文件在内的所有内容。

例如,如果要将“com.example.app”重命名为“com.YourDomain.app”,请在要重命名的包下打开一个文件,在包面包屑中,将光标设置为域的“example”部分,然后按Shift+F6并将包重命名为“YourDomain”。

接受的答案对我不起作用。这里有一个python脚本,可以直接在源文件上更改包名。

"""
Notes:
1 - This script it for python3
2 - Create a backup first
3 - Place on the root folder of the android project you want to change
4 - run `python change_android_studio_pkg_name.py`
5 - Type the old package name
6 - Type the new package name
7 - Clean and Rebuild on Android Studio
8 - SRC folder names won't be changed but app will work
"""

import os, glob, traceback
from pathlib import Path

def rwf(fp, mode="r", data="" ):
    if mode == "r":
        with open(fp, "r", encoding='utf8') as f:
            return(f.read())
    elif mode == "w":
        with open(fp, "w", encoding='utf8') as f:
            f.write(data)

old_pkg = input("Old PKG\n").strip()
new_pkg = input("New PKG\n").strip()

if not old_pkg or not new_pkg:
    exit("Args Missing")

dirname, filename = os.path.split(os.path.abspath(__file__))
file_types = ['xml', 'txt', 'json', 'gradle', 'java']
_fs =  glob.iglob(f"{dirname}/**", recursive=True)
for file_path in _fs:
    ext = Path(file_path).suffix.replace(".", "").lower()
    if os.path.isfile(file_path) and ext in file_types:
        try:
            content = rwf(file_path)
            new_content = content.replace(old_pkg, new_pkg)
            rwf(file_path, "w", new_content)
        except:
            print(traceback.format_exc())
            pass

蟒蛇3要点

我建议使用Sublime Text(或Notepad++)。替换com.one.lastname->com.two.newname和com/one/lastname->com/two/newname。。。\项目[MyProject]。别忘了重命名。。。\项目\MyProject\app\src\main\java\com\one\lastname。。。\Projects\MyProject\app\src\test\java\com\one\lastname和。。。\项目\MyProject\app\src\androidTest\java.com\one\lastname!

仅此而已:)