android庫
❶ 系統運行庫Android主要包含哪些庫
* Bionic系統 C 庫:C語言標准庫,系統最底層的庫,C庫通過Linux系統來調用。
* 多媒體庫(MediaFramework):Android系統多媒體庫,基於 PacketVideo OpenCORE,該庫支持多種常見格式的音頻、視頻的回放和錄制,以及圖片,比如MPEG4、MP3、AAC、AMR、JPG、PNG等。
* SGL:2D圖形引擎庫。
* SSL:位於TCP/IP協議與各種應用層協議之間,為數據通信提供支持。
* OpenGL ES 1.0:3D效果的支持。
* sqlite:關系資料庫。
* Webkit:Web瀏覽器引擎。
* FreeType:點陣圖(bitmap)及矢量(vector)。
❷ 有哪些 Android 的開源界面庫
比較火爆的Android開源庫有以下:
1、volley
主要有以下模塊:
(1) JSON,圖像等的非同步下載;
(2) 網路請求的排序(scheling)
(3) 網路請求的優先順序處理
(4) 緩存
(5) 多級別取消請求
(6) 和Activity和生命周期的聯動(Activity結束時同時取消所有網路請求)2、android-async-http
主要有以下模塊:
(1) 在匿名回調中處理請求結果
(2) 在UI線程外進行
(3) 文件斷點上傳
(4) 智能重試
(5) 默認gzip壓縮
(6) 支持解析成Json格式
(7) 可將Cookies持久化到SharedPreferences 3、Afinal框架
主要有四大模塊:
(1) 資料庫模塊:android中的
,使用了線程池對sqlite進行操作。
(2) 註解模塊:android中的ioc框架,完全註解方式就可以進行UI綁定和事件綁定。無需findViewById和setClickListener等。
(3) 網路模塊:通過httpclient進行封裝http數據請求,支持ajax方式載入,支持下載、上傳文件功能。
(4) 圖片緩存模塊:通過FinalBitmap,imageview載入bitmap的時候無需考慮bitmap載入過程中出現的oom和android容器快速滑動時候出現的圖片錯位等現象。4、xUtils框架
主要有四大模塊:
(1) 資料庫模塊:android中的
,一行代碼就可以進行增刪改查;
(2) 註解模塊:android中的ioc框架,完全註解方式就可以進行UI,資源和事件綁定;
(3) 網路模塊:支持同步,非同步方式的請求;
(4) 圖片緩存模塊:載入bitmap的時候無需考慮bitmap載入過程中出現的oom和android容器快速滑動時候出現的圖片錯位等現象;5、ThinkAndroid主要有以下模塊:(1) MVC模塊:實現視圖與模型的分離。
(2) ioc模塊:android中的ioc模塊,完全註解方式就可以進行UI綁定、res中的資源的讀取、以及對象的初始化。
(3) 資料庫模塊:android中的
,使用了線程池對sqlite進行操作。
(4) http模塊:通過httpclient進行封裝http數據請求,支持非同步及同步方式載入。
(5) 緩存模塊:通過簡單的配置及設計可以很好的實現緩存,對緩存可以隨意的配置
(6) 圖片緩存模塊:imageview載入圖片的時候無需考慮圖片載入過程中出現的oom和android容器快速滑動時候出現的圖片錯位等現象。
(7) 配置器模塊:可以對簡易的實現配對配置的操作,目前配置文件可以支持Preference、Properties對配置進行存取。
(8) 日誌列印模塊:可以較快的輕易的是實現日誌列印,支持日誌列印的擴展,目前支持對sdcard寫入本地列印、以及控制台列印
(9) 下載器模塊:可以簡單的實現
、後台下載、
、對下載進行控制、如開始、暫停、刪除等等。
(10) 網路狀態檢測模塊:當網路狀態改變時,對其進行檢6、LoonAndroid 主要有以下模塊:
(1) 自動注入框架(只需要繼承框架內的application既可)
(2) 圖片載入框架(多重緩存,自動回收,最大限度保證內存的安全性)
(3) 網路請求模塊(繼承了基本上現在所有的
)
(4) eventbus(集成一個開源的框架)
(5) 驗證框架(集成開源框架)
(6) json解析(支持解析成集合或者對象)
(7) 資料庫(不知道是哪位寫的 忘記了)
(8) 多線程斷點下載(自動判斷是否支持多線程,判斷是否是重定向)
(9) 自動更新模塊
(10) 一系列工具類
❸ Android項目怎樣添加recyclerview庫
有多種方式:
1.如圖所示:
2:在項目的build.gradle的dependencies{}下加入implementation 'androidx.recyclerview:recyclerview:1.1.0'
3.左上角File ->Project structure ->dependencies -> Alldependencies,然後點擊+ 號,點擊library dependency,在彈出的窗口中搜索recyclerview然後添加等待sync即可。
望採納。
❹ 如何尋找一款合適的android 庫列表
動畫(Animation)
Android View Animations:強大的動畫庫,通過對它的使用,可以輕松創建各種動畫效果。
RecyclerView Animators:允許操作者使用含炫酷動畫效果的RecyclerView類。
APIs
CloudRail:幫助操作者更快地進行API集成服務。它將多個服務(例如Dropbox,Google Drive和OneDrive)捆綁成一個統一的API。此外,它可自動處理API更新,並保持API的代碼一致。其介面可用於雲存儲,社交,支付等。
Retrofit:Retrofit由Square公司開發,是Android的REST客戶端,其類型安全,可將http API轉換成java介面。
圖表(Charts)
MPAndroidChart:一款強大的圖表生成庫,可在Android上生成圖表,同時還提供8種不同的圖表類型和多種手勢。
AndroidCharts:一款簡單的圖表創建工具,具有自定義的功能。
資料庫(Database)
SQLBrite: 圍繞SQLiteOpenHelper和ContentResolver創建封裝,以在查詢中使用流式語義。
Sugar ORM:使用SQLite資料庫的簡單操作,優勢在於無需編寫SQL查詢。
數據架構(Data Structure)
Eclipse Collections:用於Java的Collections框架,可為容器類型附加迭代方法的操作等。
日期和時間(Date & Time)
TimesSquare for Android:簡單獨立的日歷小部件,可在日歷視圖中選擇日期。
Material Calendar View:移植到Material design的安卓CalendarView。
依賴(Dependencies)
Dagger:進行Android依賴注入的快捷方式。
文檔(Files)
Android-FilePicker:一款照片選擇器,可從列表中選擇圖片或文檔。
Material File Picker:Material design中的文件選擇器。
函數式編程(Functional Programing)
Retrolambda:在Java 7中使用Lambdas的一種操作。
手勢(Gestures)
Sensey:在Android應用程序中添加手勢的簡單操作。
Android 3D Touch – PeekView:類似於iOS上的3D Touch,用以「預覽」程序內容。
藍牙(Bluetooth)
Android-BluetoothSPPLibrary:使用序列化藍牙埠(Bluetooth Serial Port Profile)的簡單操作。
RxAndroidBle:藍牙低耗能處理工具。
相機(Camera)
CameraFilter:使用OpenGL著色器的實時相機濾鏡。
Material Camera:Android開發的快速簡易的相機框架。
位置(Location)
ReactiveLocation:Google Play API的小型但實用的封裝程序,用於獲取位置。
Smart Location Library:簡化位置提供項的庫。
布局(Layout)
Android Swipe Layout:為對象提供滑動布局,如,向左滑動即刪除的操作。
FlexboxLayout :為Android提供框布局,其內容可通過CSS了解。
日誌(Logging)
Logger:Android日誌記錄器。
Hugo:用觸發注釋的方法調用記錄。
地圖(Maps)
AirMapView :用以查看Google Maps API摘要,非常適合沒有Google Play服務的應用程式。
Google地圖的實用程序,如,熱點地圖或標記聚類。
音頻播放器(Audio)
Music Player:含UI的完整音樂播放器。
RxAndroidAudio :封裝帶有Rx支持的Android Audio API RxAndroid音頻播放器。
GIF
android-gif-drawable:使用視圖和可繪制的GIF動圖。
GifView :Android上使用View播放的GIF庫。
圖像(Image)
uCrop:對Android上的圖片進行裁剪的庫。
Glide:Android的媒體管理和圖片載入庫。
視頻播放器(Video)
VideoPlayerManager:對Android MediaPlayer類的使用進行幫助說明的庫。
Easy Video Player:易於操作的視頻播放器,可通過視圖使用。
信息(Messaging)
Chateau:在Android應用中提供聊天功能的框架。
網路(Networking)
OkHttp:Android的HTTP客戶端。
AndroidAsync:基礎級網路協議庫。
消息推送(Push Notifications)
PubNub:用於處理推送通知的商業服務。
Gandalf:用於發送更新或維護相關的通知。
支付(Payments)
Android In-App Billing v3 Library:通過Android v3 API輕松處理應用內置付款的庫。
Checkout:處理應用內購買操作的庫。
安全(Security)
Sodium:輕松做加密,解密,簽名和散列操作的工具。
PiracyChecker:通過使用Google的LVL,防止應用程式被盜用的工具。
文本(Text)
Ticker:顯示滾動文本的UI組件。
MaterialEditText:Material Design的文本輸入器。
字體(Font)
fontbinding:使用數據綁定的XML自定義字體的操作。
Calligraphy:在Android應用程式上使用傳統字體的簡易操作。
用戶界面(User Interface)
Material Design Android Library:在Android中使用Google的Material Design(Android 2.2版)的庫。
Material:將Material Design導入原有應用程序的庫。
指示器(Activity Indicator)
AppIntro:為應用程序創建炫酷簡介,類似於Google原始應用中的。
LolliPin:為應用程序提供pin密碼。
操作按鈕(Buttons)
Android-Bootstrap:通過使用Bootstrape規則,進行諸如在APP中創建按鈕的操作。
Android Morphing Button:Android的操作按鈕,其形狀大小可更改。
表格(Form)
Vertical Stepper Form Library:在Material Design中創建表單的庫。
鍵盤(Keyboard)
KeyboardVisibilityEvent:顯示與隱藏鍵盤的簡單操作。
AndroidKeyboardWatcher:追蹤鍵盤開啟/關閉操作情況的庫。
菜單(Menu)
BottomBar:在Material Design中提供底部導航欄的視圖組件。
Side Menu:為應用程序添加側邊菜單欄的工具。
評分(Rating)
Android-Rate:提醒用戶對應用程序進行評價的簡易庫。
SimpleRatingBar:用於星級評分的UI組件。
滑屏(Slider)
SlidingMenu:輕松為應用程序創建滑動式菜單項。
MaterialDrawer:Android中輕便靈活的抽屜布局式庫。
❺ Android常用類庫包都有哪些
Android 類庫中,各種包寫成android.*的方式,重要包的介紹如下:
android.app:提供高層的程序模型、提供基本的運行環境。
android.content:包含各種的對設備上的數據進行訪問和發布的類。
android.database:通過內容提供者瀏覽和操作資料庫。
android.graphics:底層的圖形庫,包含畫布,顏色過濾,點,矩形,可以將他們直接繪制到屏幕上。
android.location:定位和相關服務的類。
android.media:提供一些類管理多種音頻、視頻的媒體介面。
android.net:提供幫助網路訪問的類,超過通常的java.net.*介面。
android.os:提供了系統服務、消息傳輸、IPC 機制。
android.opengl:提供OpenGL 的工具,3D 加速。
android.provider:提供類訪問Android 的內容提供者。
android.telephony:提供與撥打電話相關的API交互。
android.view :提供基礎的用戶界面介面框架。
android.util:工具性的方法,例如時間日期的操作。
android.webkit:默認瀏覽器操作介面。 android.widget:包含各種UI 元素(大部分是可見的)在應用程序的屏幕中使用。
❻ Android一般採用什麼資料庫
用的Eclipse,數據量的話還可以把,因為是初學,所以就打算先少弄幾個景點先試試,我想的是能不能做到應用去鏈接一個遠端的資料庫,就是比方說點開一個景點信息,它是從資料庫中下載出來的。。額。。專業的我也不會說。。
❼ android如何讓系統庫成為全局
一、通過Settings.System進行讀寫
//其中"getXXX"代表對應的類似方法,如getInt()、getBoolean、putString()等。
//通過變數名稱獲取值,如果變數不存在,資料庫中沒有設置過初始值或者該值類型不對,將拋出SettingNotFoundException異常
Settings.System.getXXX(ContentResolver cr, String name);
//通過變數名稱獲取值,如果發生上面方法中導致異常的情況,將返給定的默認值
Settings.System.getXXX(ContentResolver cr, String name, XXX def);
//將指定名稱的值寫入資料庫
Settings.System.putXXX(ContentResolver cr,String name, XXX Value);
非系統許可權,需要在App項目的AndroidMainfes.xml文件中添加如下許可權:
<uses-permission android:name="android.permission.READ_SETTINGS" /><uses-permission android:name="android.permission.WRITE_SETTINGS" />
二、在Settings.System添加一個自定義的全局變數
Settings.java文件位於frameworks\base\core\java\android\provider下,打開該文件,搜索關鍵詞 SETTINGS_TO_BACKUP ,共有兩處,一處是在Settings裡面,另一處在內部類Settings.System裡面,在SETTINGS_TO_BACKUP數組上面添加自定義變數,同時在該數組裡面添加自定義變數名稱,Settting和內部類System都需要添加(共四個地方),比如自定義系統變數SYSTEM_ZWH:
public static final String SYSTEM_ZWH = "system_zwh"; Public static final String[] SETTINGS_TO_BACKUP = { ... SYSTEM_ZWH, ... }
在代碼中我們就可以通過對於的get和put方法對該值進行讀取和寫入操作了。
❽ 如何創建Android庫以及Android aar文件詳解
創建 Android 庫
Android 庫在結構上與 Android 應用模塊相同。它可以提供構建應用所需的一切內容,包括源代碼、資源文件和 Android 清單。不過,Android 庫將編譯到您可以用作 Android 應用模塊依賴項的 Android 歸檔 (AAR:Android Archive Resource) 文件,而不是在設備上運行的 APK。與 JAR 文件不同,AAR 文件可以包含 Android 資源和一個清單文件,這樣,除了 Java 類與方法外,您還可以捆綁布局和可繪制對象等共享資源。
庫模塊在以下情況下非常有用:
構建使用某些相同組件(例如 Activity、服務或 UI 布局)的多個應用。
構建存在多個 APK 變體(例如免費版本和付費版本)的應用並且需要在兩種版本中使用相同的核心組件。
在任何一種情況下,只需要將您希望重用的文件移動到庫模塊中,然後以依賴項的形式為每個應用模塊添加庫。本頁面將說明如何執行這兩個操作。- apply plugin: 'com.android.application'
- apply plugin: 'com.android.library'
添加已編譯的 AAR(或 JAR)文件:
1、點擊 File > New Mole。
2、依次點擊 Import .JAR/.AAR Package 和** Next**。
3、輸入 AAR 或 JAR 文件的位置,然後點擊 Finish。將庫模塊導入到您的項目中:
1、點擊** File > New > Import Mole。**
2、輸入庫模塊目錄的位置,然後點擊 Finish。
庫模塊將復制到您的項目中,因此您可以盡管編輯庫代碼。如果您希望維護一個版本的庫代碼,則此方法可能不是您想要的,您應按照上文所述導入編譯的 AAR 文件。- include ':app', ':my-library-mole'
- dependencies {
- compile project(":my-library-mole")
- }
- <resources>
- <public name="mylib_app_name" type="string"/>
- <public name="mylib_public_string" type="string"/>
- </resources>```
- 如果希望任何資源保持對使用您的庫的開發者可見,您應當將其設為公開。例如,盡管 [v7 appcompat 庫](https://developer.android.com/topic/libraries/support-library/features.html#v7-appcompat)中的大多數資源都是私有資源,但是為了支持[Material Design](https://developer.android.com/design/material/index.html),控制工具欄小部件的屬性應當公開。將屬性隱式設為私有不僅可以阻止您的庫用戶從內部庫資源獲得代碼自動完成建議,還讓您能夠在不中斷您的庫客戶端的情況下重命名或移除私有資源。私有資源不在代碼自動完成和 [Theme Editor](https://developer.android.com/studio/write/theme-editor.html) 的作用范圍內,並且如果您嘗試引用私有資源,[Lint](https://developer.android.com/studio/write/lint.html) 將顯示警告。##開發注意事項在開發您的庫模塊和相關應用時,請注意以下行為和限制。
- 將庫模塊引用添加至您的 Android 應用模塊後,您可以設置它們的相對優先順序。構建時,庫會按照一次一個的方式與應用合並,並按照從低到高的優先順序順序。
- * **資源合並沖突**
- 構建工具會將庫模塊中的資源與相關應用模塊的資源合並。如果在兩個模塊中均定義了給定資源 ID,將使用應用中的資源。
- 如果多個 AAR 庫之間發生沖突,將使用依賴項列表首先列出(位於 dependencies塊頂部)的庫中的資源。
- 為了避免常用資源 ID 的資源沖突,請使用在模塊(或在所有項目模塊)中具有唯一性的前綴或其他一致的命名方案。
- * **庫模塊可以包含 JAR 庫**
- 您可以開發一個自身包含 JAR 庫的庫模塊;不過,您需要手動編輯相關應用模塊的構建路徑,並添加 JAR 文件的路徑。
- * **庫模塊可以依賴外部 JAR 庫**
- 您可以開發一個依賴於外部庫(例如 Maps 外部庫)的庫模塊。在這種情況下,相關應用必須針對包含外部庫(例如 Google API 插件)的目標構建。另外也要注意,庫模塊和相關應用都必須在其清單文件的 [<uses- library>
- ](https://developer.android.com/guide/topics/manifest/uses-library-element.html) 元素中聲明外部庫。* **庫模塊不得包含原始資源**
- 工具不支持在庫模塊中使用原始資源文件(保存在 assets/目錄中)。應用使用的任何原始資源都必須存儲在應用模塊自身的 assets/目錄中。
- * **應用模塊的 minSdkVersion必須大於或等於庫定義的版本**
- 庫作為相關應用模塊的一部分編譯,因此,庫模塊中使用的 API 必須與應用模塊支持的平台版本兼容。
- * **每個庫模塊都會創建自己的 R 類**
- 在您構建相關應用模塊時,庫模塊將先編譯到 AAR 文件中,然後再添加到應用模塊中。因此,每個庫都有其自己的 R 類,並根據庫的軟體包名稱命名。從主模塊和庫模塊生成的 R 類會在所需的所有軟體包(包括主模塊的軟體包和庫的軟體包)中創建。
- * **庫模塊可能包含自己的 ProGuard 配置文件**
- 通過將 [ProGuard](https://developer.android.com/studio/build/shrink-code.html) 配置文件添加到包含其 ProGuard 指令的庫,您可以在自己的庫上啟用代碼壓縮。構建工具會為庫模塊將此文件嵌入到生成的 AAR 文件中。在您將庫添加到應用模塊時,庫的 ProGuard 文件將附加至應用模塊的 ProGuard 配置文件 (proguard.txt)。通過將 ProGuard 文件嵌入到您的庫模塊中,您可以確保依賴於此庫的應用模塊不必手動更新其 ProGuard 文件即可使用庫。當 ProGuard 在 Android 應用模塊上運行時,它會同時使用來自應用模塊和庫的指令,因此您不應當只在庫上運行 ProGuard。
- 要指定您的庫的配置文件名稱,請將其添加到 consumerProguardFiles方法中,此方法位於您的庫的 build.gradle文件的 defaultConfig塊內。例如,以下片段會將 lib-proguard-rules.txt設置為庫的 ProGuard 配置文件:
- 默認情況下,應用模塊會使用庫的發布構建,即使在使用應用模塊的調試構建類型時亦是如此。要使用庫中不同的構建類型,您必須將依賴項添加到應用的 build.gradle文件的 dependencies塊中,並在庫的 build.gradle文件中將 publishNonDefault設置為 true。例如,您應用的 build.gradle文件中的以下代碼段會使應用在應用模塊於調試模式下構建時使用庫的調試構建類型,以及在應用模塊於發布模式下構建時使用庫的發布構建類型:
- 您還必須在自己庫的 build.gradle文件的 android 塊內添加以下代碼行,以便將此庫的非發布配置展示給使用它的項目:
/AndroidManifest.xml
/classes.jar
/res/
/R.txt
/assets/
/libs/**名稱 **.jar
/jni/abi 名稱 /名稱.so(其中 abi 名稱是 Android 支持的 ABI 之一)
/proguard.txt
/lint.jar
創建庫模塊
要在您的項目中創建一個新的庫模塊,請按以下步驟操作:
1、點擊** File > New > New Mole。**
2、在出現的 Create New Mole 窗口中,依次點擊** Android Library 和 Next。還存在一個用於創建 Java 庫的選項,可以構建傳統的 JAR 文件。盡管 JAR 文件在大多數項目中都非常實用(尤其在您希望與其他平台共享代碼時),但這種文件不允許您包含 Android 資源或清單文件,而後者對於 Android 項目中的代碼重用非常有用。**因此,本指南將側重論述創建 Android 庫。
3、為您的庫命名,並為庫中代碼選擇一個最低的 SDK 版本,然後點擊 Finish。
在 Gradle 項目同步完成後,庫模塊將顯示左側的 Project 面板中。如果您未看到新模塊文件夾,請確保將視圖切換為 Android 視圖。
將應用模塊轉換為庫模塊
如果您現有的應用模塊包含您希望重用的所有代碼,則可以按照以下步驟將其轉換為庫模塊:
1、打開現有應用模塊的 build.gradle 文件。您應在頂部看到以下內容:
2、按照下面所示更改插件分配:
3、點擊 Sync Project with Gradle Files。
就這么簡單。模塊的整個結構仍然相同,但是現在它將作為 Android 庫運行,構建也將創建一個 AAR 文件,而不是 APK。
生成aar
在Android Studio1.4中,New project,先默認新建一個Applicaton mole,接後File > New > New Mole,選擇Androd Library > Next,指定Library Name和Mole Name。
新建的Library與正常的Application最大區別是mole build.gradle中是**apply plugin: 『com.android.library』 **而不是 apply plugin: 'com.android.application'
Build > Make project,自動生成aar文件。
以依賴項形式添加您的庫
要在另一個應用模塊中使用您的 Android 庫的代碼,請按以下步驟操作:
1、通過兩種方式之一將庫添加到您的項目(如果您是在相同項目中創建的庫模塊,則該模塊已經存在,您可以跳過此步驟):
2、確保庫列在您 settings.gradle 文件的頂部,如下面名為「my-library-mole」的庫所示:
3、打開應用模塊的 build.gradle 文件,並向 dependencies 塊中添加一行新代碼,如下面的片段所示:
4、點擊 Sync Project with Gradle Files。
在上面的示例中,名為 my-library- mole 的 Android 庫模塊成為 build.gradle 文件所在模塊的構建依賴項。
您的應用模塊現在可以訪問 Android 庫中的任何代碼和資源,庫 AAR 文件在構建時已捆綁到您的 APK 中。
不過,如果希望單獨共享 AAR 文件,則可以在 項目名稱/模塊名稱/build/outputs/aar/ 中找到它,也可以通過點擊 Build > Make Project 的方式重新生成此文件。
選擇要設為公開的資源
庫中的所有資源在默認情況下均處於公開狀態。要將所有資源隱式設為私有,您必須至少將一個特定的屬性定義為公開。資源包括您項目的 res/ 目錄中的所有文件,例如圖像。要阻止您的庫用戶訪問僅供內部使用的資源,您應通過聲明一個或多個公開資源的方式來使用這種自動私有標識機制。
要刪除某個公開資源,請將一個聲明添加到您的庫的 public.xml文件中。如果您之前尚未添加公開資源,則需要在您的庫的 res/values/目錄中創建public.xml 文件。
下面的示例代碼可以創建兩個名稱分別為 mylib_app_name和 mylib_public_string 的公開字元串資源:
android {
defaultConfig {
consumerProguardFiles 'lib-proguard-rules.txt'
}
...
}
dependencies {
debugCompile project(path: ':library', configuration: 'debug')
releaseCompile project(path: ':library', configuration: 'release')
}
android {
...
publishNonDefault true
}```
不過請注意,設置 publishNonDefault會增加構建時間。
為了確保您的庫的 ProGuard 規則不會將意外的壓縮副作用施加到應用模塊,請僅包含適當規則,停用不適用於此庫的 ProGuard 功能。嘗試協助開發者的規則可能會與應用模塊或它的其他庫中的現有代碼沖突,因此不應包含這些規則。例如,您的庫的 ProGuard 文件可以指定在應用模塊的壓縮期間需要保留的代碼。
註:Jack 工具鏈僅支持 ProGuard 的部分壓縮和模糊選項。
AAR 文件詳解
AAR 文件的文件擴展名為 .aar,Maven 工件類型也應當是 aar。文件本身是一個包含以下強制性條目的 zip文件:
此外,AAR 文件可能包含以下可選條目中的一個或多個:
❾ 如何對 Android 庫進行依賴管理
Android 開發人員為項目選擇庫的時候,考慮的因素不僅僅是功能、可用性、性能、文檔豐富度和技術支持情況。他們還關心庫的大小,以及要添加的方法數量。因為項目越大,依賴也越多,要把應用的方法數量控制在65k 以下,開發人員感覺很有壓力。另外,對於非發行版項目而言,Proguard 使用起來效率太低,而且開發人員視 multidex 如瘟疫,避之唯恐不及。因此,編寫庫的作者必須特別注意項目的大小。 為了減少庫的方法數量,最簡單的途徑就是不包含任何多餘的依賴。因為你包含的所有依賴,都會被傳遞並添加至用戶的項目里。舉個例子,如果你只需要幾個簡單的工具方法,比如默默地關閉一個資源,那就沒必要為此添加 Guava 。自己編寫方法,或者從一個現有的庫中提取(但是務必做出說明)就可以了。用戶肯定會感激你去除了多餘的14k方法。 但是,這並不是說你不該使用外部庫,而是你要做出明智的選擇。比如,像 HTTP 客戶端這樣的庫已經有了,你若再去重寫一個,最終結果只能是浪費時間,倒不如用這些時間改進自己的庫。 除了有選擇地使用庫以外,還有幾個策略也可以幫助你保持庫的精簡。其中一個策略就是使用 provided scope(已提供范圍)來聲明依賴。 這是 gradle 中 Android build system(Android 構建系統)的一部分。與 compile scope(編譯范圍)不同,provided scope 僅在編譯時包含依賴。這就意味著,用戶在構建項目時,該依賴不會隨著 APK 文件打包。如果想在運行時使用該依賴,用戶需要在應用的 build.gradle 里顯式聲明。 注意: 還有一種與 provided scope 相反的機制叫 package scope(包范圍)。這種依賴會隨 APK 文件打包,但是在編譯時不可用。 你可能還想在庫中使用可選擇性依賴。其中一個原因是,某些功能可能只有部分用戶使用。例如 Retrofit 1.x ,該庫可以使用 REST 調用來響應,而不使用回調。那些想使用 RxJava 的用戶可以添加之,而不想使用它的用戶也可以不添加,以免加重負擔。自從 Retrofit 使用 maven build system (maven 構建系統)以後,其配置稍有更改,但理念還是相似的。 在此筆者要提醒大家,如果你發現自己庫中的某些功能只對少數用戶有用,你應該認真考慮一下是否還要保留這些功能。關於這一點,後文中還會講到。 在庫里包含可選擇性依賴的另一個原因,是Android 框架已經提供了一種解決方案,但是某個外部庫提供的解決方案性能更好。如果用戶本就依賴於該外部庫,或者願意增加方法數量以獲得更好的性能,就可以添加可選擇性依賴。 我最近看到的 PlacesAutocompleteTextView 庫,就屬於這種情況。該庫使用的內部 HTTP 客戶端,既可以是 OkHttpClient,也可以是 HttpURLConnection。通常,前者的性能更好,但是需要添加 OkHttp 作為依賴。 如果用戶不想包含該依賴,可以自動從標准庫回退到 HttpURLConnection。 為此,需要一個「resolver」 類以確定運行時要使用的依賴。 例如,以下的類就用於選擇 HTTP 客戶端: public final class PlacesHttpClientResolver { public static final PlacesHttpClient PLACES_HTTP_CLIENT; static { boolean hasOkHttp; try { Class.forName("com.squareup.okhttp.OkHttpClient"); hasOkHttp = true; } catch (ClassNotFoundException e) { hasOkHttp = false; } PlacesApiJsonParser parser = JsonParserResolver.JSON_PARSER; PLACES_HTTP_CLIENT = hasOkHttp ? new OkHttpPlacesHttpClient(parser) : new (parser); } private PlacesHttpClientResolver() { throw new RuntimeException("No Instances!"); } } 該類被載入時,會檢查 OkHttpClient 的完全限定類名是否可用。如果拋出 ClassNotFoundException,我們就知道用戶沒有添加 OkHttp,於是回退到 HttpURLConnection。PlacesHttpClient 是包裝以上兩種實現方式的公共介面,因此在整個代碼庫中,這兩種實現方式可以交換使用。JSON 解析也採用了同樣的方法,Gson 可選擇性地作為依賴包含在庫中。 如果性能表現與庫的大小之間的權衡系數很大,這個方法確實不錯。但是,如果回退的實現方式比較困難(比如 JSON 解析就是這種情況),筆者建議你先使用外部庫來節省時間,在後續的版本中再考慮添加回退實現。 筆者在前文中提到,你應該對庫中包含的功能做出明智的選擇。如果某個功能幾乎所有用戶都不需要,最好將其除去,而且這里也沒有必要使用前面提到的第一種可選擇性依賴。再次以 Retrofit 為例,在 2.x 版本 中,使用 REST 調用來響應這個功能,不再作為核心庫的一部分提供給用戶,而是移到一個單獨的模塊上,並作為 Retrofit 的 maven 構件發布 。 同樣地,不同的響應轉換器也被拆成了獨立的依賴。例如,Retrofit 用戶想要轉換一個 JSON 響應,而且已經依賴於 Gson,他們可以在 build.gradle 文件中添加以下依賴: dependencies { compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2' } 而那些使用其他 JSON 庫(比如 Jackson )的用戶,或者需要解析其他數據格式(比如 XML 或 protocol buffers)的用戶,也可以採用這種方式添加自己需要的依賴,而且避免通用型依賴帶來的額外負擔。與此同時,核心庫也不會被這些附加功能幹擾,可以專注於需要解決的主要問題。
❿ 有哪些常用或優秀的 Android 第三方類庫
Android開發第三方類庫分類:
gifview 、 gifview2
這兩個項目是同一人開發的,用於顯示gif動畫,純java解碼 ,gif圖片過大會產生OOM。
android-gif-drawable
一個也是用於解碼顯示gif的類庫,採用jni解碼,大GIF也不會產生oom,完美運行。
PhotoView
PhotoView 是一款擴展自Android ImageView ,支持通過單點/多點觸摸來進行圖片縮放的智能控制項。使用比較簡單,提供了一個名為PhotoView的控制項,可以直接像普通ImageView那樣使用。
特性:支持單點/多點觸摸,即時縮放圖片;支持平滑滾動;在滑動父控制項下能夠運行良好;(例如:ViewPager)
不同的環境使用不同的類庫,不同的系統也是同樣的道理。