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

是否包含自动重构?

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


当前回答

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

其他回答

我尝试了两个最热门的解决方案,但发现了一些问题,尽管这两个方案在某种程度上都有效。

列表项:新的包拖放方法保持一些不变,并产生一些不希望的效果列表项:重命名包仅更改包名称的最后一部分

经过一些实验,我发现下面的方法对我很有效。

如果您只需要更改包名的最后一部分,请使用GreyBeardedGeek概述的方法,即

右键单击“项目”窗格中的包。从上下文菜单中选择Refactor->Rename

如果需要更改整个包名,请执行以下操作。

右键单击“项目”窗格中的包。从上下文菜单中选择Refactor->Move

这将创建一个新的包文件夹(必要时),但将保留包名称的最后一部分。如果需要更改最后一个零件,请相应地进行重命名。

还请注意,您可能需要修改例如build.gradle、manifest和/或任何xml资源文件中的包名,甚至需要修改硬编码的代码中的包名称。之后,根据需要执行同步/清理/重建项目。

我看过最热门的答案,但我发现这样做有点不同,我尝试做最完整的教程。

在Android Studio中,单击齿轮图标(),然后选择选项:“压缩空中间包”,以在树视图中查看分开的文件夹。

现在选择文件夹,单击右键打开上下文菜单,选择Refactor,然后重命名

建议您重构包:

然后一个窗口将显示项目内的巧合,选择“Do Refactor”:

我们不必手动更改AndroidManifest.xml或build.gradle文件,重构包就可以了!。

我没有看到任何人指出这一点,这就是为什么我要写这个答案。我会把这个答案添加为评论,因为它真的不应该是一个答案,但我在Stackoverflow上没有足够的信誉点来留下评论。

我想将我的包名从com.param.myapp更改为com.pvs.myapp。我在互联网上遵循了每一个解决方案,但忘记将android块build.gradle(:app)中的命名空间“com.param.miapp”更改为“com.pvs.myapp”。我不确定名称空间行是否需要存在,但它给了我错误。AndroidStudio使用旧包名生成类。

记住要检查一下!

例如,如果您希望将包从com.example.a更改为com.example.b

1) 将项目样式文件夹从android更改为package(在项目端)

2) 右键单击文件夹顶部,然后单击路径中的替换

3) “在项目中选择”按钮

4) 在第一输入write com.example.a

5) 在第二输入中写入com.example.b

6) 当您看到警告时,选择“全部替换”以替换值

完成替换后,您可以看到您的包名为com.example.b

首先,您需要转到左侧显示的设置图标。单击该下拉列表并取消选中压缩空中间包

转到AndroidManifest.xml

选择所有包,然后右键单击重构,然后根据需要重命名。然后转到build.gradle,然后使用Android Manifest中的packagename更改Applicationid。

这对我来说很有效