項目地址:https://github.com/futurice/android-best-practices#build-system
- 使用Android Studio和Gradle
- 將簽名放在
gradle.properties
里面 -
使用靜態(tài)版本的依賴
以求得運行穩(wěn)定 即在gradle-denpencies 依賴的版本號后不加上"+" - 構(gòu)建多個版本
- 在gradle中的buildTypes中增加不同的構(gòu)建類型,使用
applicationSuffix
和versionNameSuffix
可以生成多個版本在同一設(shè)備上運行 - 創(chuàng)建src/[buildType]/res/設(shè)置不同的ic_launcher以區(qū)別不同版本
- 第三方庫
- Json:Jackson
- 網(wǎng)絡(luò)锌介,緩存和圖片加載
- 網(wǎng)絡(luò)和圖片:volley 或者 Retrofit(網(wǎng)絡(luò)API)+Picasso(圖片)+OKhttp(網(wǎng)絡(luò)請求)
- RxJava
RxJava is a library for Reactive Programming, in other words, handling asynchronous events(處理異步事件)
Retrolambda采用Lambda語法(特別適合當我們使用RxJava的時候,需要JDK8之前次啊能使用)
考慮dex的方法限制
Android apps, when packaged as a dex file, have a hard limitation of 65536 referenced methods
-
Activities和Fragment
現(xiàn)在關(guān)于Activity和Fragment是控制器還是UI之爭還沒有公認的定論。有以下三點建議
- 不要使用內(nèi)部Fragment
- 不要放過多的代碼在Activity
- 不要濫用Android操作系統(tǒng)級別的API
- Java包架構(gòu)
├─ network
├─ models
├─ managers
├─ utils
├─ fragments
└─ views
├─ adapters
├─ actionbar
├─ widgets
└─ notifications```
- 資源文件
- 命名
- 構(gòu)建layout xml文件
* `android:id` 放在第一位
* `android:layout_****`放在前面
* `style`放在底部
使用**style **
針對style文件越來越大髓需,可以將其分離如styles.xml
,styles_home.xml
,styles_item_details.xml
,styles_forms.xml
不同的資源目錄在res/values
中是任意的colors.xml就是一個調(diào)色板
基本顏色以該顏色命名(個人理解:特殊顏色可以以十六進制數(shù)表示六荒,因為不好命名了)dimens.xml與colors.xml類似。
以spacing_****
命名dp,以font_***
命名spstrings.xml
使用key類似命名空間來命名strings 且string值不能全是大寫(針對英文)避免深層次的視圖 用
<merge>
減少視圖深度-
意識到WebView的問題:
- 加載網(wǎng)頁時不要處理HTML文件
- WebView與ApplicationContext綁定避免內(nèi)存溢出他爸。
- 避免使用WebView顯示簡單的Text和Button
-
測試框架
- Android Gradle發(fā)布了connectedAndroidTest
咪橙,是JUnit的一個擴展夕膀,可以測試程序員創(chuàng)建的JUnit Test - 使用** Robolectric**進行單元測試,而非UI測試
- Android Gradle發(fā)布了connectedAndroidTest
使用Robotium進行UI測試
模擬器使用genymotion
-
混淆參數(shù)
- 構(gòu)建類型
buildTypes { debug { minifyEnabled false } release { signingConfig signingConfigs.release minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
- 構(gòu)建類型
默認混淆設(shè)置
SDK_HOME/tools/proguard/proguard-android.txt
美侦,自定義混淆參數(shù)my-project/app/proguard-rules.pro
當出現(xiàn)這兩個錯誤
ClassNotFoundException
或者NoSuchFieldException
要不就是被移除要不就是被混淆了产舞。檢查
app/build/outputs/proguard/release/usage.txt
和app/build/outputs/proguard/release/mapping.txt
看是否被移除和混淆在每次添加庫的時候,需要及時進行make a release build
DexGuard時Proguard同一個團隊開發(fā)的軟件菠剩, 優(yōu)化代碼易猫,分離dex文件從而解決65k方法限制的文件
數(shù)據(jù)存儲
當數(shù)據(jù)繁多且復(fù)雜或者同步數(shù)據(jù)時不要使用SharePreference
ContentProviders
Schematic可以提高效率,避免創(chuàng)建重復(fù)性的代碼具壮。Using an ORM(必須保證進行安全的前提下使用)
使用Stetho(由FaceBook開發(fā)的chrome桌面應(yīng)用程序准颓,監(jiān)視App特別好用特別是在網(wǎng)絡(luò)阻塞的時候哈蝇,還有監(jiān)視和編輯Sqlite和SharePreference),不過在發(fā)布版本中要剔除掉