Android Studio如何快速更改目录结构和包名?

2016-07-03 10:40 阅读 18,753 次 评论 2 条

一.摘要

Android Studio如何重命名包名?为什么要保证目录存放代码文件的包名和Manifest.xml文件中的package=""属性值一致?重命名包名和重命名目录结构有啥区别?Android Studio能否像Eclipse一样一键重命名?在回答上面问题之前,我们先理清楚一下思路。

二.Eclipse如何重命名包?

使用Eclipse项目创建的时候,第一步需要确认“Application Name”,“Project Name”,“Package Name”三个名称,通常TeachCourse习惯Application Name和Project Name一致(默认情况下),然后更改包名,完了之后创建对应的项目。在Eclipse的workspace工作间,看到创建的“TeachCoursePro”项目,“cn.teachcourse.app”包名存放类文件,“Application Name”打开标签label="@string/app_name"属性值。包名使用到的地方还包括:AndroidManifest.xml,“gen”文件夹自动生成的R文件路径,在这里为了方便理解需要引入一个概念——目录结构
002-Eclipse目录结构

目录结构——“假包名”

项目src文件夹下的包名“cn.teachcourse.app”钊林习惯称为目录结构,Eclipse项目结构展示的方式有三种:1.Package Explorer;2.Navigator;3.Project Explorer,快捷键Alt+Shift+W快速切换,这里切换到Navigator目录结构展示方式,这时会发现,包名“cn.teachcourse.app”就是一个目录结构。如果有多个目录结构时,比如:cn.teachcourse.view,cn.teachcourse.utils等,然后在当前类中引入对应的路径,比如在文件cn.teachcourse.app.MainActivity文件中引用cn.teachcourse.view.MyImageView,需要在MainActivity文件中导入对应的目录结构:cn.teachcourse.view,也是常说的“导包”,快捷键Ctrl+Shift+O
003-重命名目录机构

“真实”的包名

相对目录结构来说,更喜欢将AndroidManifest.xml标签中添加的package="cn.teachcourse.app"属性值称为真实的包名,通常使用第三方网站需要填写的包名,指的就是package的属性值,同时更改该属性值后,gen文件夹会自动生成存放R文件的包名,步骤点击“Project——>Clean”。

目录结构和“真实包名”的关系

目录结构通常和包名写成同一个名称,比如:cn.teachcourse.app,这样的一个好处不要区分那么清楚,manifest文件中可以指定类文件绝对路径或类文件相对路径,代码如下:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="cn.teachcourse.app"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.     <application  
  7.         android:allowBackup="true"  
  8.         android:label="@string/app_name">  
  9.         <!--绝对路径-->  
  10.         <activity android:name="com.zhaolinit.app.MainActivity"/>  
  11.         <!--相对路径-->  
  12.         <activity android:name="MainActivity"/>  
  13.         <activity android:name=".MainActivity"/>  
  14.     </application>  
  15. </manifest>  

之所以解释那么清楚,目的想要说明如何快速重命名真实的包名,在实际开发项目中,可能需要在原有项目的基础上改变manifest标签中的package属性值,出现的问题:gen文件夹生成新的包名,项目引入原有包名的R文件,如果每个类文件手动重新导入新包名的R文件夹,工作量会很大,钊林IT就遇到这样的问题。解决的办法:一步解决,直接打开gen文件夹(不建议手动修改R),重构该文件夹下的真实包名;如果你的manifest引用类文件绝对路径,不需要更改目录结构——“假包名”,否则Alt+Shilf+R重构目录结构,到这里可能就明白了吧?Android Studio与之有什么不同?

三.Android Studio如何重命名包?

折腾了一下午,项目中使用微信开放平台部分功能,需要使用特定的包名,包名微信开放平台已注册。在Android Studio中,同样存在目录结构和真实包名,与Eclipse重命名包名不同的是:

1.Android Studio R位置不一样:app\build\generated\source\r\debug\包名\R.java

2.包名展示样式分为:Flatten Packages,Empty Middle Packages。第一种方式表示平铺式,第二种显示或隐藏中间包名

004-Android Studio目录结构

备注:如何中间包名?选中“Flatten Packages”后,“Empty Middle Packages”变成“Hide Empty Middle Packages”,目录结构如下图:

005-目录结构Empty Middle Packages

3.Alt+Shift+R快捷键重命名包名(Eclipse键盘布局),包名分为根节点和子节点,选中根节点后提示重命名当前目录或全部目录,选中子节点提示重命名最后一级名称,如下图:

006-重构目录结构

总结:Android Studio目录结构和包名按照一级一级重命名:第一级,第二级,第三级......解决重命名包名或目录结构也就不是问题

重命名目录结构

目录结构切换到“Flatten Packages”和“Hide Empty Middle Packages”,Alt+Shift+R选中项中目录结构的根节点,输入根节点名称,比如:cn,点击“Refactor”,完成重命名第一级,接下来每一级都以同样的方式执行

重命名R包名

切换到上述目录结构视图,找到R文件存放路径:app\build\generated\source\r\debug\包名\R.java,同理Alt+shift+R快捷键重命名R包名的根节点,完成重命名第一级,接下来重命名之后的每一级,然后打开manifest标签,设置package完整的包名,最后重构项目完成R文件包名重命名。

备注:

1.manifest类文件采用绝对路径,只需要重命名R文件包名;否则重命名R文件包名后,还需要重命名目录结构

2.Android Studio重命名包名的方式按级重构,一级一级重命名

3.Android Studio R文件存放路径不一样,如果找不到,先Make Module"app"

4.Android Studio 支持创建新目录结构或包名,然后“Refactor——>Move”重构

你可能感兴趣的文章

来源:TeachCourse每周一次,深入学习Android教程,关注(QQ158#9359$239或公众号TeachCourse)
转载请注明出处: https://www.teachcourse.cn/1903.html ,谢谢支持!

资源分享

浅谈SortedList方法使用 浅谈SortedList方法使用
线上产品接入bugly热更新 线上产品接入bugly热更新
最新Android Studio 快速入门(开发)指南 最新Android Studio 快速入门(
Android广播注册两者方式 Android广播注册两者方式