首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Android 項目結構規範化指南:從 Gradle 配置到包設計的最佳實踐

     編輯:Java 相關知識

核心原則速覽

  • 採用 Gradle + Android Studio 新結構,棄用 Ant/Eclipse 舊結構;
  • 敏感信息(密鑰、密碼)放入 gradle.properties,不入版本控制;
  • 網絡請求用 OkHttp/Retrofit,圖片加載用 Picasso/Glide,JSON 解析用 Gson/Jackson;
  • UI 採用 Fragment 為主,Activity 為容器;
  • 資源文件命名加前綴(type_feature.xml),佈局淺層化,善用 styles/colors/dimens 去重;
  • 測試:單元測試 Robolectric,UI 測試 Robotium/Espresso;
  • 發布必配 ProGuard/DexGuard 混淆壓縮。

構建系統:Gradle 為王

Google 官方指定標準,優勢明顯:

  • 多渠道打包(productFlavors);
  • 依賴管理自動化;
  • 自定義 Task(Groovy/Kotlin DSL);
  • 簽名配置隔離:
// 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 管理模塊依賴。

依賴庫選型策略

領域推薦備選/注意
JSONGson(輕量)Jackson(功能強但體積大,警惕 65K 方法數)
網絡/圖片Retrofit + OkHttp + PicassoVolley(Google 維護,適合簡單場景)
響應式RxJava 2/3配合 Retrofit 實現優雅異步
LambdaRetrolambda (舊版本)現代項目直接用 Java 8+ / Kotlin

鐵律:dex-method-counts 監控方法數,嚴禁濫用 Guava(13K+ 方法),優先精簡依賴。

架構設計:Fragment 為核心

為什麼選 Fragment?

  1. 多設備適配:平板雙欄、手機單欄,同一代碼無縫切換;
  2. 數據通信:Activity 作為總線,Fragment 間通過接口/EventBus 通信,優於 Intent 序列化;
  3. 職責分離:無 UI Fragment 做後台任務、管理 ActionBar、處理導航邏輯;
  4. 嵌套謹慎:避免「套娃」導致生命週期混亂。

推薦架構

  • 頂層 單一 MainActivity 承載業務 Fragment;
  • 少量輔助 Activity(登錄、設置等),通信保持簡單(Intent.setData/action);
  • EventBus:greenrobot EventBus 或 RxJava 實現解耦通信。

Java 包結構:準 MVC 分層

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

佈局 XML 格式化

  • 每行一屬性,4 空格縮進;
  • android:id 首行;
  • android:layout_* 緊隨其後;
  • style 最後;
  • 自閉合標籤 /> 獨佔一行;
  • 拒絕硬編碼字符串,用 @string/;
  • 預覽屬性用 tools: 命名空間。

values 文件 DRY 原則

  • colors.xml:定義調色盤(primary_500、accent_200),業務色引用語義名(text_primary);
  • dimens.xml:定義通用間距(spacing_8dp、spacing_16dp)、字體大小、圓角半徑;
  • 多 styles.xml 按模塊拆分(styles_text.xml、styles_button.xml),避免單文件過大。

其他關鍵實踐

  • SDK 路徑:放用戶目錄,非 IDE 目錄,避免升級 IDE 導致路徑失效;
  • 模擬器:Genymotion 性能碾壓官方模擬器;
  • WebView:謹慎使用,嚴防內存洩漏(destroy()、移除回調);
  • 65K 方法數:啟用 multiDexEnabled true 並精簡依賴;
  • ProGuard:minifyEnabled true、shrinkResources true,保留規則精準配置。

總結

規範的 Android 項目結構,是團隊協作效率與代碼質量的基石。從 Gradle 配置隔離敏感信息、新結構分離源碼集、依賴庫精選控制方法數、Fragment 核心架構支撐多端適配、包結構準 MVC 分層、資源文件命名格式化去重,每一環都在為可維護性、可擴展性、可測試性服務。遵循最佳實踐,少踩坑,交付更穩健的產品。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved