写在开头:强制遵循的规范使用绿色标注,必须不允许的规范使用红色标注,建议遵循的使用紫色标注。使用Androidstudio作为集成开发环境对于编辑器,每个人都有自己的选择,让编辑器根据工程结构和构建系统高效运作,是每个人的责任。推荐使用AndroidStudio,由谷歌开发,并且最接近Gradle,默认使用最新的工程结构。相比较而言EclipseADT使用旧的工程结构和Ant作为构建系统,它不仅需要繁琐的配置,而且gardle和adb命令行同样需要学习成本。使用Gradle构建项目默认编译环境使用Gradle。Ant不仅有限制而且操作方式非常繁琐,使用Gradle编译,可以轻松实现以下几点:1.构建App的不同版本,在debug和release之间轻松切换。2.快速制作简单的脚本任务3.轻松下载和管理依赖库4.能够方便的按照要求定制Keystore另外值得一提的是,如果你想更快的构建小规模可重用程序模块,可以采用FacebookBuck,与传统Android编译工具相比,Buck凭借多核及并行技术,极大加速了Android工程的编译速度,并且在多次编译中,它会对未变动的模块进行标记,从而以增量式编译的方式进一步提高构建速度。项目结构废弃过时的Ant&EclipseADT工程结构,统一使用新的Gradle&AndroidStudio的工程结构。要使用Androidstudio结构:1.new-link-structure2.├─library-imsdk3.├─app4.│├─libs5.│├─src6.││├─androidTest7.│││└─java8.│││└─com/im/project9.││└─main10.││├─java11.│││└─com/im/project12.││├─res13.││└─AndroidManifest.xml14.│├─build.gradle15.│└─proguard-rules.pro16.├─build.gradle17.└─settings.gradle不使用Eclipse结构:1.old-link-structure2.├─assets3.├─libs4.├─res5.├─src6.│└─com/im/project7.├─AndroidManifest.xml8.├─build.gradle9.├─project.properties10.└─proguard-rules.pro通过比较可见Androidstudio的项目结构更加清晰,强调了Gradle概念。其中library-imsdk是app所依赖的module。签名配置发布release版本的时候,必须确认SigningConfigs的保密性:创建一个不加入版本控制系统的gradle.properties文件,或者记录在本地的local.properties中。1.KEYSTORE_PASSWORD=storePassword2.KEY_PASSWORD=keyPassword上面提到的两个文件会被gradle自动引入,因此可以在buld.gradle中直接引用,例如:1.signingConfigs{2.release{3.try{4.storeFilefile(myapp.keystore)5.storePasswordKEYSTORE_PASSWORD6.keyAliasstoreKey7.keyPasswordKEY_PASSWORD8.}9.catch(ex){10.thrownewInvalidUserDataException(YoushoulddefineKEYSTORE_PASSWORDandKEY_PASSWORDingradle.properties.)11.}12.}13.}不采用以下示例方式,因为这会导致敏感信息的泄露:1.signingConfigs{2.release{3.storeFilefile(myapp.keystore)4.storePasswordstorePassword5.keyAliasstoreKey6.keyPasswordkeyPassword7.}8.}使用Maven依赖代替jar包导入如果在项目中明确使用jar文件,那么它们可能成为永久的版本,如2.1.1。而且很容易陷入频繁更新jar包的繁琐工作中,Maven很好的解决了这个问题,这也是Gradle构建中推荐的使用方式,例如:1.dependencies{2./*ReactiveXLibrary*/3.compile'io.reactivex:rxjava:1.1.3'4.compile'io.reactivex:rxandroid:1.1.0'5.}或者,在不确定该library最新版本的前提下,可以指定版本范围,如2.1.+,随后Gradle会优先加载Maven仓库中该library的最新版本。命名规范Java文件参考源码命名规则,对Java类文件使用驼峰命名法。对于继承自Android组件的类来说,类名应该以这个组件的类型作后缀,如:SignInActivity,UserProfileFragment,ImageUploaderService,ChangePasswordDialogXML文件资源等.xml文件要采用小写字母_下划线的组合形式。Drawable相关Drawable文件建议命名方式:AssetTypePrefixExampleActionbarab_ab_stacked.9.pngButtonbtn_btn_send_pressed.9.pngDialogdialog_dialog_top.9.pngDividerdivider_divider_horizontal.9.pngIconic_ic_star.pngMenumenu_menu_submenu_bg.9.pngNotificationnotification_notification_bg.9.pngTabstab_tab_pressed.9.pngicon文件建议命名方式:AssetTypePrefixExampleIconsic_ic_star.pngLaunchericonsic_launcheric_launcher_calendar.pngAssetTypePrefixExampleMenuiconsandActionBariconsic_menuic_menu_archive.pngStatusbariconsic_stat_notifyic_stat_notify_msg.pngTabiconsic_tabic_tab_recent.pngDialogiconsic_dialogic_dialog_info.pngselectorstates文件建议命名方式:StateSuffixExampleNormal_normalbtn_order_normal.9.pngPressed_pressedbtn_order_pressed.9.pngFocused_focusedbtn_order_focused.9.pngDisabled_disabledbtn_order_disabled.9.pngSelected_selectedbtn_order_selected.9.pngLayout相关Layout文件建议命名方式:布局文件应该与Android组件的命名相匹配,以组件类型作为前缀,并且能够清晰的表达意图。例如:如果为SignInActivity创建一个布局文件,那么应该命名为activity_sign_in.xml。建议采用以下基本命名规则:ComponentClassNameLayoutNameActivityUserProfileActivityactivity_user_profile.xmlFragmentSignUpFragmentfragment_sign_up.xmlDialogChangePasswordDialogdialog_change_password.xmlComponentClassNameLayoutNameAdapterViewitemitem_person.xmlPartiallayoutpartial_stats_bar.xml值得一提的是,一些布局文件需要通过Adapter填充,如ListView,Recyclerview等列表视图,这种场景下,布局的命名应该以item_作为前缀。另外还有一种比较常见的情况,一个布局文件作为另一个布局文件的一部分而存在,或者使用了include,merge等标签的布局,建议使用partial_、include_或者merge_作为前缀,这一类布局的命名同样应该清晰的表达其意图。Id命名方式:控件Id的命名应该以该控件类型的缩写作为前缀,同样要使用小写字母_下划线的组合形式,能够清晰表达意图是命名的前提:ElementPrefixTextViewtv_ImageViewiv_Buttonbtn_Menumenu_示例如下:1.ImageView2.android:id=@+id/iv_profile3.android:layout_width=wrap_content4.android:layout_height=wrap_content/1.menu2.item3.android:id=@+id/menu_done4.android:title=Done/5./menuColor相关colors.xml可以比喻成“调色板”,只映射ARGB值,不应该存在其他类型的数值,更不要使用它为不同的按钮来定义ARGB。应该根据颜色或者风格对ARGB赋值,要使用基色_ARGB的命名规则:1.resources2.colorname=white_FFFFFF#FFFFFF/color3.colorname=gray_DBDBDB#DBDBDB/color4.colorname=gray_939393#939393/color5.colorname=gray_5F5F5F#5F5F5F/color6.colorname=black_323232#323232/color7.colorname=green_27D34D#27D34D/color8./resources值得一提的是,这样规范的颜色很容易修改或重构,App所使用的颜色数量和种类也会变得非常清晰。相反地,不使用以下对色值的命名规则:1.resources2.colorname=button_foreground#FFFFFF/color3.colorname=button_background#2A91BD/color4.colorname=comment_background_inactive#5F5F5F/color5.colorname=comment_background_active#939393/color6.colorname=comment_foreground#FFFFFF/color7.colorname=comment_foreground_important#FF9D2F/color8....9.colorname=comment_shadow#323232/color使用这种定义方式,我们需要非常的谨慎,一不小心就会重复定义ARGB,而且当改变基本色时,会造成毫无意义的重复操作。Dimen相关我们应该像对待colors.xml一样对待dimens.xml文件,与定义“调色板”无异,同样应该为字体定义一块“字号版”。要使用以dimen_作为前缀的命名规范:1.resources2.!--SP--3.dimenname=dimen_22sp22sp/dimen4.dimenname=dimen_18sp