前言
框架重要性不言而喻,一個好的框架可以大大提高后期開發的效率和質量。接下來將分七篇文章講述安卓框架的搭建,框架中用的是當前比較主流的元素,也是相對成熟穩定的。講述的內容參考了很多相關的資料,絕大部分也是經過一番思考和論證。文章既為分享,也為總結!
主要涉及的知識點如下(所列內容不分先后):
- 1.通信框架: Retrofit2+Okhttp3+Rxjava2
- 2.項目結構: MVP
- 3.圖片處理: Picasso
- 4.View的綁定工具: Butterknife
- 5.MaterialDesign風格: CardView、MaterialDailog等
- 6.權限處理Easypermissions、android N讀寫文件路徑
- 7.涉及到BaseActivity的封裝,BaseFragment,MainActivity
- 8.錯誤日志保存編寫
- 9.RecycalView和Adapter的封裝
- 10.常用工具類的封裝
- 11.數據庫操作GreenDao的使用
- AgentWebview的使用
部分代碼可能因為比較簡單或者比較基礎并沒有在文章中提及,有興趣的同學可以到源碼中查看。好了,那么我們就從新建項目開始吧!??!
新建項目并分層
我們代碼里經常會建package來分門別類的管理代碼,同樣,我們也需要建不同
module來管理我們的框架層,業務層等
1.新建項目
項目名稱為FrameworkDemo,包名為com.example.burro.demo,第一個Activity的名字命名為LoadingActivity
2.項目分層
在此案例中,我主要把項目分為app入口層,主體業務層(app主體業務層、data主體業務層)和項目庫層(app基礎框架層、data基礎框架層、其他引用庫)。后面講gradle基本配置的時候,我還會對資源文件根據功能模塊進行分層。分層的好處是顯而易見的,層次分明、容易維護。項目的分層和項目業務是分不開的,如果你的項目只有幾個頁面,可能沒必要分的那么細。如果你的項目頁面、功能模塊較多,那我建議還是分門別類,規規矩矩的來。另一個好處是,如果有新的項目要開發,那么把這套項目庫層【底層框架】搬過去。只需兩三個小時,完全可以進行新項目的業務開發工作。
下面新建庫和文件夾:
- 新建名為
appbiz
的Library, 包名 com.example.burro.appbiz - 新建名為
databiz
的Library,包名com.example.burro.demo.databiz - 新建名為
appframework
的Library,包名com.example.burro.demo.appframework - 新建名為
dataframework
的Library,包名com.example.burro.demo.dataframework - 新建文件夾
bizmodule
- 新建文件夾
libmodule
此時settings.gradle 中內容如下
include ':app', ':appbiz', ':databiz', ':appframework', ':dataframework'
把appframework和dataframework移動到libmodule文件夾下,把databiz和appbiz移動到bizmodule文件夾下,如下
修改settings.gradle里的內容在相應的module前加上文件夾名稱 如下
include ':app', 'bizmodule:appbiz', 'bizmodule:databiz', 'libmodule:appframework', 'libmodule:dataframework'
Clean后再編譯項目。當libmodule、bizmodule文件夾上出現了小杯子,完成分層!
設置主題
主題是全局的樣式屬性。
打開app模塊的清單文件,在application節點下有個android:theme="@style/AppTheme",點擊進入AppTheme
可以看到有三個顏色值 colorPrimary,colorPrimaryDark,colorAccent,如下
這幾個主題屬性顏色與頁面效果關系可以用一張圖來描述:
修改AppTheme內設置如下
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:textColorPrimary">@color/textColorPrimary</item>
<item name="android:windowBackground">@color/windowBackground</item>
<item name="android:textColorSecondary">@color/textColorSecondary</item>
</style>
</resources>
需要把顏色改成我們APP對應的值:
<resources>
<!--<color name="colorPrimary">#3F51B5</color>-->
<color name="colorPrimary">#FF306BC5</color>
<color name="colorPrimaryDark">#FF306BC5</color>
<color name="colorAccent">#FF4599DF</color>
<color name="windowBackground">#ffffff</color>
<color name="textColorPrimary">#000000</color>
<color name="textColorSecondary">#f6f6f6</color>
</resources>
這里補充一句,全局view的樣式基本上都可以在這里統一設置。例如想要把ScrollView縱向滾動條的顏色修改為紅色,可以這樣設置
<item name="android:scrollbarThumbVertical">@color/red</item>
【注意:因為這些屬性是全局通用。我把它移動到appfamework工程對應目錄下【原本沒有,需要新建】
也不要忘了依賴工程,這里依賴關系如下
dataframework>appframework>appbiz
dataframework>databiz
databiz>appbiz>app
- 在app工程build.gradle內的dependencies內增加
compile project(':bizmodule:appbiz')
- 在appbiz工程build.gradle內的dependencies內增加
compile project(':libmodule:appframework')
compile project(':bizmodule:databiz')
- 在databiz工程build.gradle內的dependencies內增加
compile project(':libmodule:dataframework')
- 在appframework工程build.gradle內的dependencies內增加
compile project(':libmodule:dataframework')
gradle基本配置
gradle的配置需要全局管理,即絕大部分依賴包或者版本號都將在項目(Project)的build.gradle內設置,各工程(Moudle)的build.gradle直接引用。不得不說gradle著實強大,由于網上有很多gradle的配置教程,講述的也很詳細,這里不再贅述。直接貼代碼
項目(Project)的build.gradle:
原本內容不變,在根目錄下新增如下
//外部使用的安卓版本相關
ext {
minSdkVersion = 15
targetSdkVersion = 25
compileSdkVersion = 25
buildToolsVersion = '25.0.2'
}
//文件內部使用
def supportLibraryVersion = '25.1.0'
//compile依賴的第三方庫
ext.deps = [
//android
supportCompat : "com.android.support:support-compat:$supportLibraryVersion",
supportAnnotations : "com.android.support:support-annotations:$supportLibraryVersion",
supportRecyclerView : "com.android.support:recyclerview-v7:$supportLibraryVersion",
supportV4 : "com.android.support:support-v4:$supportLibraryVersion",
supportappcompatV7 : "com.android.support:appcompat-v7:$supportLibraryVersion",
]
工程(Module)的build.gradle:
以libmodule/appframework下的build.gradle為例進行設置,如原本defaultConfig內的compileSdkVersion 25
現在可以設置成compileSdkVersion rootProject.ext.compileSdkVersion
原本dependencies內的compile 'com.android.support:appcompat-v7:25.3.1'
現在可以設置成compile deps.supportappcompatV7
整體下:
apply plugin: 'com.android.library'
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile deps.supportappcompatV7
}
其他各個工程module也類似設置。后續會依賴很多第三方優秀庫,依賴的方式和appcompat-v7一樣