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

是否包含自动重构?

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


当前回答

问题是:

是否包含自动重构?

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

好吧,几乎只需单击一下即可自动重构,但只需先迈出一小步,即创建新包的一小步。下面是完整的解决方案。

您可以通过创建新包(包括所需的文件夹路径)来重命名包,然后从旧包中拖放(并让Android Studio负责从旧包到新包的各种引用的重构),如下所示:

右键单击应用程序下的java。选择新建并打包选择新包的位置为/app/src/main/java输入新包的全名将创建新包。现在,从旧包拖放到新包。如果您想检查AndroidStudio是否正确执行重构,请预览重构。如果一切看起来都很好,请继续重构。

注意:由于应用程序ID和包名现在是分离的,请注意,以上内容仅用于重命名包名。要更改应用程序ID,可以在build.gradle中执行。

其他回答

我用于重命名包名称的方法如下:-

步骤1:从Android Studio的左侧菜单中选择项目选项

步骤2:右键单击java并添加一个新包并设置所需的包名称

步骤3:输入新程序包名称

步骤4:从旧包复制所有文件并粘贴到新包中

步骤5:重命名清单文件中的包名称

步骤6:重命名build.gradle文件中的包名

步骤7:然后右键单击旧包并删除它及其所有数据,同时删除该目录

步骤8:然后重建项目

步骤9:然后您将在项目中发现旧导入包名的一些错误在任何文件中选择旧包名,然后按CTRL+Shift+R,然后在替换框中输入新包名,再按find

步骤10:然后出现如下弹出窗口,并从中选择“所有文件”选项

步骤11:再次重建项目,宾果您的项目包名已更改:)

如果您的包名超过两个点分隔,请说com.hello.world,而且您没有在com/和com/hello/中输入任何内容。您的所有类都放入了com/hello/world/中,您可以在Android Studio或IntelliJ中执行以下步骤来重构包名:

[FIRST]在目录(com/,com/hello/)下添加一些内容。你可以通过首先向com.hello.world包中添加两个文件来实现这一点

com.hello.world.PackageInfo1.javacom.hello.world.PackageInfo2.java

然后通过将它们分别移动到com和com.hello来重构它们。你会看到com和com.hello坐在项目中(Alt+1或命令+1表示快捷方式),重命名目录重构是正如你所期望的那样在那里等待。

重构以重命名一个或多个目录以达到您的目标。在这里您唯一应该注意的是,当对话框询问您时,您必须选择目录而不是包。如果你的项目中有很多类,那么你需要一段时间来等待它的自动扫描和重命名。此外,我想,您需要手动重命名AndroidManifest.xml中的包名,以便该文件中的其他名称可以使用前缀。[同时],它可能需要您将所有com.hello.world.R替换为新的XXX.XXX.XXX.R(简称Command+Shift+R)重新生成并运行项目以查看其是否有效。然后使用“在路径中查找”来查找您要重命名的其他非接触名称。享受它。

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

接受的答案对我不起作用。这里有一个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要点

更改程序包名称


要重命名包名,只需转到AndroidManifest.xml文件,并将鼠标光标放在要更改的包名部分的前面。



右键单击>重构>重命名



在新窗口中,按Rename package



更改名称并按Refactor



…然后按底部的Do Refactor。



您的包名通常采用com.domain.appname格式;在本例中,我们更改了appname部分,但您也可以对域执行相同的步骤。

完成!您已更改包名称!