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

是否包含自动重构?

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


当前回答

选择选项取消选中“压缩空中间包”选项。选择要更改的目录(我选择了步骤6中显示的“crl”)。移位+F6重命名程序包将目录crl重命名为crl1最后单击下图中标记的Do Refactor按钮在此处输入代码完成更改后

其他回答

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

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

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

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

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

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

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

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

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

转到AndroidManifest.xml文件。将光标放在软件包名称中,如下所示。不要选择它,只需放置它。然后按Shift+F6,您将看到一个弹出窗口,如下所示。选择重命名包。输入新名称并选择Refactor。(注意:由于我的光标位于“something”上,因此只有something被重命名。)

完成了。

我也很难更改项目的包名。特别是大型项目。有很多事情要做,但这些工作真的很无聊。我一直在IntelliJ IDEA和Android Studio上开发插件。它将帮助您自动更改软件包名称。它叫做Android软件包重命名器

安装

使用IDE内置插件系统:设置/首选项>插件>市场>搜索“Android软件包重命名器”>安装插件手动:下载最新版本并使用手动安装设置/首选项>插件>⚙️ > 从磁盘安装插件。。。

用法

打开项目。单击->文件->重命名包输入要更改的程序包。单击“确定”。将项目与渐变文件同步或使缓存无效

如果此插件对您有帮助或有错误,请通过以下[GitHub]与我联系(

有很多答案,但我仍在尝试。

步骤1:如上图所示,选择设置选项。。。

第2步:选择压缩中间包选项。。。

步骤3:现在展开包,如图所示

步骤4:扩展后,它看起来像

步骤5:选择子包中的任何一个(在或示例或googledevsmsverify中),然后单击Shift+f6按钮。。。

我选择了中间的包示例,因此它将显示如上图所示简单地重命名包并单击重构按钮

步骤6:单击Refactor按钮后,您将看到以下屏幕,单击DO Refactor,然后等待构建渐变。。。

步骤7:转到build.gradle(Mobile:app)并更改applicationID的包名,如图所示

步骤8:只需检查manifest.xml文件中的包。。。

全部完成包是change...@Ambilpura

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