淺談Android開辟中項目標文件構造及標准化安排建議。本站提示廣大學習愛好者:(淺談Android開辟中項目標文件構造及標准化安排建議)文章只能為提供參考,不一定能成為您想要的結果。以下是淺談Android開辟中項目標文件構造及標准化安排建議正文
1、幾句話
2、具體
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可參考原文檔)
庫
Jackson是一個Java庫,它可以完成對象和JSON數據的互相轉換。Gson 也是一個相似的不錯選擇。不外我們認為Jsckson更好由於它支撐多種方法來處置JSON:流式,內存樹范型和傳動的JSON-POJO數據綁定。然則,記住,Jackson比GSON加倍宏大,所以你要酌情斟酌,假如你想防止 65k methods limit那最好用GSON。其他選擇:Json-smart 和 Boon JSON
收集、緩存和圖片。應用Volley 或許Retrofit。Volley也能夠用來加載懈弛存圖片。假如你選擇Retrofit,你可以用Picasso 來加載懈弛存圖片。然後應用 OkHttp 來履行有用的HTTP要求。這三種:Retrofit、Picasso和OkHttp都起源於統一樣公司,所以它們相互彌補。OkHttp 能用來與 Volley 相銜接。
RxJava是一個呼應式編程庫,換句話說,處置異步事宜。(詳細可參考原文檔)
Retrolambda 是一個Java庫,它贊助你的Android或許其他早於JDK8平台上應用Lambda表達式。(詳細可參考原文檔)
最初,記住dex辦法限制,不要應用太多庫。(Android運用,當被打包成dex文件時,有一個最年夜限制:65535個援用辦法[1][2][3]。假如你跨越了限制就會產生嚴重毛病。是以,不要應用剛過量庫,應用 dex-method-counts 對象來決議應用哪些類從而堅持在限制內,特別要防止應用Guava庫,由於它包括跨越13k辦法)
Activities和Fragments
Fragments應當是你在Android安排UI界面的默許選項。Fragments可以在你的運用裡重用。我們推舉應用Fragements而不是 activities 來繪制界面基於以下幾點:
Java包構造
在Android運用法式裡的Java構造接近MVC構造(Model-View-Controller)。在Android裡,Fragment和Activity現實上都是掌握器類。而從另外一角度來看,他們又是用戶交互的一部門,也就是說屬於視圖View類。
是以,我們很難嚴厲辨別Fragment(或Activity)是掌握器照樣視圖。所以從Java包角度來看,我們最好把Fragment放在它們本身的fragments包裡,然後Activity放在第一流的包外面(遵守上文提出的建議)。固然,假如你想有2個或以上的Activity,那你就創立一個activitys包。
如許的話,全部構造看起來就是一個典范的MVC構造。一個Models包包括POJOs,用來轉化API接口獲得的Json數據,一個views包包括Views,notifications,action bar views,widgets等。Adapters是一個中央層,位於數據和視圖之間。然則,它們平日須要經由過程getView()來輸入View視圖,所以你可以把adapters放在views包的子包地位。
一些運用法式級別、僅屬於Android體系的掌握器類,應當放在managers包裡。各類各樣的數據處置類,例如DateUtils可以放在utils包裡。與後台辦事器交互的類應當放在network包裡。
總之,從與辦事器交互到與用戶交互的全體架構可設計以下:
com.futurice.project ├─ network ├─ models ├─ managers ├─ utils ├─ fragments ├─ views ├─ adapters ├─ actionbar ├─ widgets ├─ notifications
資本文件
定名
遵守加前綴的通例,相似type_foo_bar.xml,如:fragment_contact_details.xml,view_primary_button.xml,activity_main.xml。
組織結構文件
假如你不曉得若何標准化一個結構XML文件,可參考上面通例:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/name" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:text="@string/name" /> <include layout="@layout/reusable_part" /> </LinearLayout>