浅谈Android开发中项目的文件结构及规范化部署建议

论坛 期权论坛 脚本     
niminba   2021-5-23 02:56   1470   0

一、几句话

  • 使用Gradle及其推荐的项目框架
  • 把密码等敏感数据放入gradle.properties
  • 不要自己写Http客户端,使用Volley或OkHttp库
  • 使用Jackson库来解析JSON数据
  • 避免Guava并出于Dalvik 65K methods limit不要使用过多的库
  • 使用Fragment来绘制UI界面
  • Activity主要用来管理Fragment
  • 布局文件XML也是代码,好好组织它们
  • 在布局文件里,使用styles以避免重复的属性
  • 使用多个style文件而不是一个巨大的style文件
  • 保持你的 color.xml 短小而DRY,定义色盘
  • 同样保持 dimens.xml DRY,定义通用常量
  • 不要创建一个太深层次的布局
  • 避免WebView的客户端处理,而且要注意内存泄露
  • 使用Robolectric来进行单元测试,Robotium来进行连接(UI)测试
  • 仿真器用Genymotion
  • 一定要用ProGuard 或 DexGuard

二、详细
Android SDK
把你的Android SDK放置在你的主目录里或其他与应用无关的地方。一些IDEs在安装的时候会把SDK关联上,并把SDK放在IDE的同一个目录下。当你需要升级(重装)IDE或者更换IDE时你就会发现糟糕之处啦。另外,如果你的IDE在一个user账户下而不是在root下运行的话,就不要把SDK放在系统级目录下,否则在使用时需要 sudo 权限,

Build System
默认的选择是 Gradle。Ant限制比较多而且太大。使用Gradle,你可以很轻易的做到:
-编译不同的flavours 或应用的 variants
-创建简单的 类-脚本 任务
-管理和下载依赖
-自定义keystores
-等等
Android的Gradle插件同样被Google指定为新的标准编译系统,而且Google不断为其升级。

项目结构
有两种流行的选择:旧的Ant & Eclipse ADT项目结构;新的Gradle & Android Studio项目结构。你应该选择后者。如果你的项目使用旧的结构,那么换掉吧。
旧结构

old-structure 
├─ assets
├─ libs
├─ res
├─ src
│ └─ com/futurice/project
├─ AndroidManifest.xml
├─ build.gradle
├─ project.properties
└─ proguard-rules.pro

新结构

new-structure
├─ library-foobar
├─ app
│ ├─ libs
│ ├─ src
│ │ ├─ androidTest
│ │ │ └─ java
│ │ │ └─ com/futurice/project
│ │ └─ main
│ │ ├─ java
│ │ │ └─ com/futurice/project
│ │ ├─ res
│ │ └─ AndroidManifest.xml
│ ├─ build.gradle
│ └─ proguard-rules.pro
├─ build.gradle
└─ settings.gradle

新结构主要的不同在于拆分了'源代码集' (main,androidTest),这是来自Gradle的理念。
使用最高级别"app"有利于将你的app和其他你的应用所引用的库项目(如:library-foobar)做区分。然后settings.gradle保持应用对这些库的索引,而app/build.gradle可以指向这些库。

Gradle配置
通用架构请遵循Google's guide on Gradle for Android
小任务(脚本),你可以使用Gradle来制作小任务而不是Shell、Python或Perl等,具体参考Gradle's documentation
密码。在你应用的build.gradle中你需要为发布编译定义 signingConfigs。具体如下:
不要像下面这样写,这样会出现在你的版本控制系统里:

signingConfigs { 
  release {  
   storeFile file("myapp.keystore")  
   storePassword"password123"
   keyAlias"thekey"
   keyPassword"password789"
  }
}

相反,你应该创建一个不会被添加到版本控制系统里的gradle.properties文件

KEYSTORE_PASSWORD=password123
KEY_PASSWORD=password789

这个文件会被gradle自动导入,所以你可以在build.gradle这样使用:

signingConfigs { 
  release {
  try{
    storeFile file("myapp.keystore")  
    storePasswordKEYSTORE_PASSWORD  
    keyAlias"thekey"
    keyPasswordKEY_PASSWORD
 } catch(ex) {
  thrownewInvalidUserDataException("You should define KEYSTORE_PASSWORD and KEY_PASSWORD in gradle.properties.")  
  }
 }}

(如果使用Maven可参考原文档


4(4)+RsR4+RsR+RsR4+RsR+RsR4+RsR4(RsR4(RsR(RsR4(RsR(4(Z4+F4(&7}} хх}}4(Z4(zs7~O 22[a53Z> v4(4(?3饓r鱅R屗Rv.63'*{:K"[*e9Mv>fGZW4(4(1(輽4(4(鱅э}4(鱅э}4(х4(4(4(Q(饐4(鱅э}4(鱅4(鱅A4(4(屔4(4(4(н}4(4(1Й4(

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1060120
帖子:212021
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP