gradle.properties,不入版本控制;type_feature.xml),佈局淺層化,善用 styles/colors/dimens 去重;Google 官方指定標準,優勢明顯:
productFlavors);// build.gradle
signingConfigs {
release {
try {
storeFile file("myapp.keystore")
storePassword KEYSTORE_PASSWORD // 從 gradle.properties 讀取
keyAlias "thekey"
keyPassword KEY_PASSWORD
} catch (ex) {
throw new InvalidUserDataException("請在 gradle.properties 定義密鑰密碼")
}
}
}
# gradle.properties (不提交版本庫)
KEYSTORE_PASSWORD=your_store_password
KEY_PASSWORD=your_key_password
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 源碼集分離,app 模塊隔離主應用與庫模塊,settings.gradle 管理模塊依賴。
| 領域 | 推薦 | 備選/注意 |
|---|---|---|
| JSON | Gson(輕量) | Jackson(功能強但體積大,警惕 65K 方法數) |
| 網絡/圖片 | Retrofit + OkHttp + Picasso | Volley(Google 維護,適合簡單場景) |
| 響應式 | RxJava 2/3 | 配合 Retrofit 實現優雅異步 |
| Lambda | Retrolambda (舊版本) | 現代項目直接用 Java 8+ / Kotlin |
鐵律:dex-method-counts 監控方法數,嚴禁濫用 Guava(13K+ 方法),優先精簡依賴。
Intent 序列化;Intent.setData/action);greenrobot EventBus 或 RxJava 實現解耦通信。com.futurice.project ├─ network # API、Retrofit 接口、OkHttp 攔截器 ├─ models # POJO、實體類、數據庫實體 ├─ managers # 系統級管理器(權限、緩存、偏好設置) ├─ utils # 工具類(DateUtils、StringUtils、加密) ├─ fragments # 所有 Fragment ├─ views # 自定義 View、通知、ActionBar View、Widget ├─ adapters # RecyclerView/ListView Adapter(視圖層邊界) ├─ actionbar # ActionBar/Toolbar 相關 ├─ widgets # 可復用 UI 組件 └─ notifications # 通知構建與管理
註:Activity 放頂層或 activities 包;Fragment/Activity 難嚴格劃分 Controller/View,故按組件類型分包更務實。
fragment_contact_details.xml view_primary_button.xml activity_main.xml dialog_confirm_delete.xml item_message_left.xml
android:id 首行;android:layout_* 緊隨其後;style 最後;/> 獨佔一行;@string/;tools: 命名空間。colors.xml:定義調色盤(primary_500、accent_200),業務色引用語義名(text_primary);dimens.xml:定義通用間距(spacing_8dp、spacing_16dp)、字體大小、圓角半徑;styles.xml 按模塊拆分(styles_text.xml、styles_button.xml),避免單文件過大。destroy()、移除回調);multiDexEnabled true 並精簡依賴;minifyEnabled true、shrinkResources true,保留規則精準配置。規範的 Android 項目結構,是團隊協作效率與代碼質量的基石。從 Gradle 配置隔離敏感信息、新結構分離源碼集、依賴庫精選控制方法數、Fragment 核心架構支撐多端適配、包結構準 MVC 分層、資源文件命名格式化去重,每一環都在為可維護性、可擴展性、可測試性服務。遵循最佳實踐,少踩坑,交付更穩健的產品。