Android开发实践

来源:互联网 发布:洛阳智网网络爆客网 编辑:程序博客网 时间:2024/04/29 07:12

简书地址:http://www.jianshu.com/p/1c83b18d10a0

命名规范

样式命名

通用的样式写在styles.xml
采用大驼峰命名法,所有单词的首字母大写。

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">    <item name="colorPrimary">@color/colorPrimary</item>    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>    <item name="colorAccent">@color/colorAccent</item></style><style name="AppTheme" parent="AppTheme.Base"></style>

大项目可按模块或按页面拆分为多个文件:

styles.xmlstyles_home.xmlstyles_settings.xml...

字符串命名

<string name="error.message.network">Network error</string><string name="error.message.call">Call failed</string><string name="error.message.map">Map loading failed</string>

颜色命名

<!-- basic colors --> <color name="green">#27D34D</color> <color name="blue">#2A91BD</color> <color name="orange">#FF9D2F</color> <color name="red">#FF432F</color><!-- grayscale --> <color name="white" >#FFFFFF</color> <color name="gray_light">#DBDBDB</color> <color name="gray" >#939393</color> <color name="gray_dark" >#5F5F5F</color> <color name="black" >#323232</color>

尺寸命名

<!-- font sizes --> <dimen name="font_larger">22sp</dimen> <dimen name="font_large">18sp</dimen> <dimen name="font_normal">15sp</dimen> <dimen name="font_small">12sp</dimen>

包(package)

全部使用小写字母。一级包名常见的有:com/cn/org/net,二级包名以公司或个人来命名,三级包名根据应用进行命名,四级包名为模块名或层级名。

com.classic.stockcom.classic.stock.user

类(class)

采用大驼峰命名法,所有单词的首字母大写。

MainActivitySettingsActivity

抽象类(abstract class)

抽象类名称以 Abs 开头,采用大驼峰命名法,所有单词的首字母大写。

AbsListViewAbsSeekBar

接口(interface)

接口名称以 I 开头,如果有多个单词,每个单词首字母大写。

IBinderIStockInfo

事件监听器(event listener)

以On开头,如果有多个单词,每个单词首字母大写。

OnClickListenerOnItemClickListener

方法(method)

小驼峰命名法,除首单词外,其余所有单词的首字母大写。

setContentViewinitView

参数(parameter)

小驼峰命名法 ,除首单词外,其余所有单词的首字母大写。

pagepageSize

变量(variable)

小驼峰命名法 ,除首单词外,其余所有单词的首字母大写。

pagepageSize

常量(constants)

全部大写,单词之间用下划线分割。

DB_VERSIONDB_NAME

图片资源文件

建议用模块名称+逻辑名称

book_cover_default.pngbook_type_online.png

Layout命名

建议用模块名称+逻辑名称

books_comment.xmlbooks_comment_item.xml

Layout中的id命名

建议用layout文件名称做前缀+逻辑名称+view缩写

@+id/books_comment_item_bookcover_iv@+id/books_comment_item_nickname_tv

注释规范

/** * 项目名称 * 包名 * * 文件描述:TODO * 创 建 人:TODO * 创建时间:2016/3/15 15:40 */

Gradle依赖规范

项目根目录新建config.gradle文件,配置参考如下:

def supportVersion = "23.1.1"def rxBindingVersion = "0.4.0"def greenDAOVersion = "2.1.0"ext {    android = [compileSdkVersion: 23,               buildToolsVersion: "23.0.2",               applicationId    : "com.classic.gradleconfig",               minSdkVersion    : 14,               targetSdkVersion : 23,               versionCode      : 1,               versionName      : "1.0"]    //官方库    supportV4 = "com.android.support:support-v4:${supportVersion}"    supportAppcompatV7 = "com.android.support:appcompat-v7:${supportVersion}"    supportDesign = "com.android.support:design:${supportVersion}"    supportCardView = "com.android.support:cardview-v7:${supportVersion}"    supportRecyclerView = "com.android.support:recyclerview-v7:${supportVersion}"    supportMultidex = "com.android.support:multidex:1.0.+"    //图片加载    glide = "com.github.bumptech.glide:glide:3.7.0"    fresco = "com.facebook.fresco:fresco:0.9.0+"    picasso = "com.squareup.picasso:picasso:2.5.2"    //json解析    fastjson = "com.alibaba:fastjson:1.2.8"    //view注入    dagger = "com.squareup.dagger:dagger:1.2.2"    butterknife = "com.jakewharton:butterknife:7.0.1"    //Rx家族,响应式编程    rxJava = "io.reactivex:rxjava:1.1.1"    rxAndroid = "io.reactivex:rxandroid:1.1.0"    rxBinding = "com.jakewharton.rxbinding:rxbinding:${rxBindingVersion}"    rxBindingSupportV4 = "com.jakewharton.rxbinding:rxbinding-support-v4:${rxBindingVersion}"    rxBindingSupportAppcompatV7 = "com.jakewharton.rxbinding:rxbinding-appcompat-v7:${rxBindingVersion}"    rxBindingSupportDesign = "com.jakewharton.rxbinding:rxbinding-design:${rxBindingVersion}"    rxBindingSupportRecyclerView = "com.jakewharton.rxbinding:rxbinding-recyclerview-v7:${rxBindingVersion}"    rxBindingLeanbackV17 = "com.jakewharton.rxbinding:rxbinding-leanback-v17:${rxBindingVersion}"    //网络请求    retrofit = "com.squareup.retrofit2:retrofit:2.0.0"    okhttp = "com.squareup.okhttp3:okhttp:3.2.0"    volley = "com.mcxiaoke.volley:library:1.0.19"    //数据库    sqlbrite = "com.squareup.sqlbrite:sqlbrite:0.6.2"    greenDAO = "de.greenrobot:greendao:${greenDAOVersion}"    greenDAOGenerator = "de.greenrobot:greendao-generator:${greenDAOVersion}"}

然后在项目根目录的build.gradle文件中添加配置文件的引用

//应用配置文件apply from: "config.gradle"buildscript {    repositories {        jcenter()    }    dependencies {        classpath 'com.android.tools.build:gradle:1.5.0'    }}allprojects {    repositories {        jcenter()    }}task clean(type: Delete) {    delete rootProject.buildDir}

开始使用,在module的build.gradle文件中直接引用

apply plugin: 'com.android.application'android {    compileSdkVersion rootProject.ext.android.compileSdkVersion    buildToolsVersion rootProject.ext.android.buildToolsVersion    defaultConfig {        applicationId rootProject.ext.android.applicationId        minSdkVersion rootProject.ext.android.minSdkVersion        targetSdkVersion rootProject.ext.android.targetSdkVersion        versionCode rootProject.ext.android.versionCode        versionName rootProject.ext.android.versionName    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }}dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    compile rootProject.ext.supportV4    compile rootProject.ext.supportAppcompatV7    compile rootProject.ext.glide    compile rootProject.ext.okhttp}

基本框架

AndroidBasicProject

  • BaseActivity
  • BaseFragment
  • Activity栈管理
  • 日志打印
  • 异常信息收集
  • 工具类

功能框架

  • 图片加载 glide、fresco、picasso
  • json数据解析 fastjson
  • View注入 Dagger、butterknife
  • Material Design向下兼容库 carbon
  • Rx系列 RxJava、RxAndroid、RxBinding
  • 网络请求 retrofit + okhttp + RxJava
  • 数据库 sqlbrite、Realm、greenDAO

质量跟踪平台

  • 腾讯bugly
  • 金山Crasheye
  • Crittercism
  • Crashlytics
  • ACRA:搭建方法

其它

  • leakcanary检查内存泄露,square出名,必属精品
  • blockcanary检测UI卡顿, 阿里工程师出品
  • DebugDrawer帮你快速的在debug版本分析,诊断问题
  • ANR-WatchDog检查ANR问题的利器
  • ViewServer当你用真机调试连不上Hierarchy Viewer,它可以帮助你完美解决问题
  • androidtool-mac可在mac上对Android手机和智能手表进行一键截屏、录制视频和安装APK等操作

测试

  • testerhome支付宝Monkey老师推荐的测试社区,里面有很多干货
  • bugtags新一代的、专为移动测试而生的缺陷发现及管理工具
  • testin免费移动App真机云测试平台
  • Emmagee网易出品的,是监控指定被测应用在使用过程中占用机器的CPU、内存、流量资源的性能测试小工具。
  • GT腾讯出品的,对APP进行快速的性能测试(CPU、内存、流量、电量、帧率/流畅度等等)、开发日志的查看、Crash日志查看、 网络数据包的抓取、APP内部参数的调试、真机代码耗时统计等
  • awesome-android-testing收集了不少测试用到的library.

APP内测,分发

APP开发完成了,想通过链接方式发给别人使用测试,下面两个平台可以帮到你

  • FIR.im
  • 蒲公英

参考资料:

  • 如何高效率开发App
  • android-best-practices
2 0
原创粉丝点击