本文有些地方可能需要衔接Android开发工具全面转向Android Studio(1)——准备开发环境,读起来效果会更好。
这个世界很奇妙,所有的东西离不开CRUD,即增删改查。即使人本身也遵循这个规律,一个人出生是C,进入社会后会经常被R(坐个火车还得人证票合一呢),过个青春期,你已经被U不知多少次了,哪一天挂了总会被D掉的。下面回到主题,讲讲AS中project和module的CRUD,为了兼容Eclipse老用户和新手,此处还会以Eclipse的工作方式作为参考进行对比。
注:以下以Windows平台为标准,AS以目前最新稳定版1.4.1为准。
在开始前,如果是Eclipse转过来的,必须先强制理解下以下关系:
1、AS project的概念是等同于Eclipse workspace概念
2、AS module的概念是等同于Eclipse project概念
也就是说创建AS project就是创建Eclipse workspace,创建AS module就是创建Eclipse project
一、AS中project的CRUD:
创建分为两种,一种是New,另一种是Import。
1、创建新AS project(New):
一般来说,创建新东西都很简单,不会有很复杂的,但是有些概念可能需要理解,结合图片一起看。
①进入AS主界面——Start a new Android Studio project
②新建项目,这里演示所有的都用默认
③一直下一步,创建好项目,正常情况是会出现以下界面的,默认情况下这个名为app的应用是可以跑通的
④切换到视图project视图
⑤你会发现这样创建AS project后,自动创建了一个module,而且名字还强制叫app,有点恶心吧,看到下面这张图第一眼就是要改project名字和module名字(即CRUD中的U)
2、导入成AS project:
①从本地导入AS project
从AS主界面——Open an existing Android Studio project
或者在已经打开一个project的情况下:File——New——Import,选择AS project打开
②从本地导入eclipse项目
或者在已经打开一个project的情况下:File——New——Import,选择eclipse主项目打开,后面的步骤跟上面的截图一样
③从SVN/Git/Github导入(参考另一随笔,//TODO 待发布)
3、AS project名字修改:
①选中MyApplication——右键——Refator——Rename(快捷键shift+F6),重命名成MyProject,你会发现AS本身是不支持重命名project的,提示cannot rename root module,那如果我就是看着MyApplication不爽但又不想重新新建一个project再把现有的所有module导入进去,怎么办,当然有一个绝招(即下面的方法)
②进入MyApplication的硬盘目录,copy一份出来并将MyApplication修改成MyProject(当然也可以不copy,直接在原来的基础上改),再用AS打开MyProject(如何打开下面讲):
③可以正常编译运行,但是认真看是会发现冗余的,那就再改进一下(看下面)
④重新进入MyApplication的硬盘目录,copy一份出来并将MyApplication修改成MyWorkspace,同时把MyApplication.iml也改成MyWorkspace.iml,再用AS打开MyWorkspace(如何打开下面讲):
⑤这下修改是完美的,其实在.idea中在打开MyWorkspace之前有些配置文件还是记录MyApplication的,但是一旦用AS打开了就会被更新,所有总结来说:修改project名字只需要三步即可:先在硬盘上copy一份要改名的源project并将copy这份的名字命成想要的,然后再将里面的XXXXX.iml文件修改成“你的新名字.iml”,再用AS打开一遍即可全部完成
4、AS project的查询(打开一个project):
从某种意义上讲,AS打开一个project就是已经查询到了该module,打开一个已经存在的as project很简单,进入:AS主界面——Open an existing Android Atudio project
什么时候AS无法打开或者正常处理一个原本是project的项目呢,就是因为某种原因删掉了build.gradle或者删掉了gradle文件夹。删掉build.gradle是严重的,这个project完全无法使用,删掉gradle文件夹则需要重新配置gradle wrapper就可以正常使用了
5、AS project的删除,跟修改project名字一样,也不能在AS里直接删除,解决办法是:
①先关掉准备删除的project——回到AS主界面——按下键盘Delete/Backspace键删除project引用,现在只删除了AS对这个project的引用,实际上硬盘上还存在
②接着到project所在硬盘目录手动删除硬盘目录下数据,这样就完美的删除了一个project
二、AS中module的CRUD:
新建分为两种,一种是New,另一种是Import,如果是导入Eclipse项目,那么就必须通过Import实现
1、新建AS module(New):
①新建module不可以从AS主界面直接新建,需要先进到一个project中,比如此处以MyApplication project为例
②下一步来到这里,这里全部使用默认
③创建好模块后,大概是这样,现在问题来了,app和myapplication2这两个module名字我都不喜欢,也就是说我要改掉现有的模块名称,因为现在的module名字太没意义了,参考后面的《修改module名称》
2、导入成AS module:
①从本地导入AS module
②从本地导入eclipse项目
如果有依赖能自动导入,请确保依赖包跟正式项目处于同一个文件夹项目,即保持eclipse的项目文件夹结构
导入后一切正常
③从SVN/Git/Github导入(参考另一随笔,//TODO 待发布)
3、修改module名称:
①选中app——右键——Refator——Rename(快捷键shift+F6),然后发现有两个选项,该选哪个
②Rename directory指的是重命名硬盘目录,不命名module目录,说白了跟我直接进文件管理器修改没啥区别,效果就是跟下面图示那样操作一样,所以完全不建议,重命名后你的AS会找不到module了
③Rename module,这个是指同时命名硬盘目录和module本身的名字以及所有相关引用,这个是跟eclipse中的重命名项目是一致的,比如我把myapplication2命名成MyLaucnher
④如果刚开始AS,第一次对module重命名选错了,选择了Rename directory,这里在Rename directory界面还有两个选项,正常情况是不会选择Search in comments and strings,如果选择了,也只是相当于全局替换了注释中的app字符串而已,选择默认选中第一后进行Refactor之后。但是现在后悔了,我想要的是选择Rename module一样的效果,怎么基于选择了Rename directory重命名后的结果弄成Rename module一样的效果呢?
⑤点击sync project with gradle files,同步一下基于选择了Rename directory重命名后的结果,你会发现变成这样,MyHelloWorldApp已经不再是一个module(注意AS中的module的文件名是粗体字体的,如果不是lib的话,module还可以在Run/Debug Configurations上面的run中显示),而旧的app module也不见了
⑥解决方法是,打开project下的settings.gradle文件,将include里面原来的app改成MyHelloWorldApp
⑦然后点击sync project with gradle files,这样就正常了,即跟选择Rename module重命名module一样的效果了
4、module的查询:
这里从某种意义上讲,查询module主要是指AS能不能正确识别一个文件夹是不是module,这个配置时在project下的settings.gradle文件中
如果现在我要把MyHelloWorldApp这个module立即降级为一个文件夹的话,只需要在project下的settings.gradle文件中删掉':MyHelloWorldApp'即可(但这并不等于你删除了这个module)
5、删除module:
删除一个AS module跟eclipse删除一个项目有点不一样,略会麻烦一点。
①在AS里删除一个module,需要以下步骤:进入项目结构界面(file——project structure(快捷键 ctrl + alt + shift + s))——modules——删除选择的module引用,这里只解除了project对其的引用,如果用eclipse的概念来解释,就是close了一个项目
②回到project视图——选择在project structure中中删除引用的module(project解除了引用的module)——按下键盘delete/右键delete,这时候是删除AS对该module引用同时也删除了这个module的硬盘数据,但是还有一个地方没删除干净
③进入运行配置界面(Run/Debug configurations)点击Edit Configurations——删除已经删除的module引用 ——点击sync project with gradle files,这时候完美的删除了一个module
原创随笔,转载注明出处。