程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 淺談Android開辟中項目標文件構造及標准化安排建議

淺談Android開辟中項目標文件構造及標准化安排建議

編輯:關於JAVA

淺談Android開辟中項目標文件構造及標准化安排建議。本站提示廣大學習愛好者:(淺談Android開辟中項目標文件構造及標准化安排建議)文章只能為提供參考,不一定能成為您想要的結果。以下是淺談Android開辟中項目標文件構造及標准化安排建議正文


1、幾句話

  • 應用Gradle及其推舉的項目框架
  • 把暗碼等敏感數據放入gradle.properties
  • 不要本身寫Http客戶端,應用Volley或OkHttp庫
  • 應用Jackson庫來解析JSON數據
  • 防止Guava並出於Dalvik 65K methods limit不要應用過量的庫
  • 應用Fragment來繪制UI界面
  • Activity重要用來治理Fragment
  • 結構文件XML也是代碼,好好組織它們
  • 在結構文件裡,應用styles以免反復的屬性
  • 應用多個style文件而不是一個偉大的style文件
  • 堅持你的 color.xml 短小而DRY,界說色盤
  • 異樣堅持 dimens.xml DRY,界說通用常量
  • 不要創立一個太深條理的結構
  • 防止WebView的客戶端處置,並且要留意內存洩漏
  • 應用Robolectric來停止單位測試,Robotium來停止銜接(UI)測試
  • 仿真器用Genymotion
  • 必定要用ProGuard 或 DexGuard

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 來繪制界面基於以下幾點:

  • 處理是多視圖結構。Fragments被引入出去的重要緣由是把手機運用法式拓展到平台電腦上,如許的話你在平板上可以同時顯示A和B視圖,而在手機上可只顯示A或B。假如你的法式最開端就是應用Fragment來完成,那末你的法式可以更輕易實用於多種裝備。
  • 屏到屏的通訊。Android的API其實不供給一個適合的方法來完成Activity之間傳遞龐雜數據(如Java對象)。然則,應用Fragment,你可以應用Activity來成為其子Fragment之間通訊的通道。即便這比Activity-到-Activity通訊要好很多,我依然建議你采用Event Bus架構,例如應用Otto 或許 greenrobot EventBus來作為一個更簡練的計劃。假如你不想采用附加的庫,那末RxJava也能夠被用來完成一個EventBus。
  • Fragment不只僅可以用來結構UI。你可以添加一個 沒有UI界面的Fragment 作為Activity的後台辦事者。乃至你可以創立一個Fragment來完成Fragment切換邏輯,而不是讓Activity行止理Fragment切換邏輯。
  • Fragment裡乃至可以治理ActionBar。你可以選擇一個沒有UI界面的Fragment來專門治理ActionBar,或許你可以選擇每一個以後可視的Fragment本身來處置父Activity的ActionBar。參考這裡。
  • 然後,我們也不建議過度應用嵌套Fragments,那能夠招致matryoshka 破綻。
  • 從架構的角度來斟酌,你的運用應當有一個頂級Activity,它會包括年夜部門營業相干的fragments。你也能夠創立一些其他的支撐性Activities,只需它們與主Activity的通訊堅持簡略--形似與 Intent.setData()或Intent.setAction()。

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文件,可參考上面通例:

  • 每行一個屬性,縮進4個空格;
  • android:id永久放在第一個;
  • android:layout_** 屬性要放在頂部;
  • style屬性放在尾部;
  • 停止標記位 />要獨有一行,有助於對屬性排序或添加;
  • 不要寫hard code,如 android:text,關於Android Studio來講可斟酌應用Designtime attributes辦法。
<?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>
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved