android庫項目
⑴ 如何創建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項目中如何載入已有so庫
1,在項目根目錄下建立文件夾libs/armeabi文件夾 2,將so庫放入libs/armeabi文件夾注意事項: 1,如果採用靜態注冊的方式請注意C文件中嚴格按照命名規則Java_packageName_className_method()的方式命名 2,在Android項目中建立同上述命名規則中packageName中相同的包名,在此包名下建立同上述命名規則中className相同的類名 3,在className聲明native方法 4,程序中載入so庫System.loadLibrary(data/data/xxx.xxx.xxx/lib/xx.so)或者System.loadLibrary(xx),例如:System.loadLibrary(data/data/com.dtBank.app.service/lib/libjnixcld.so);
⑶ android 有哪些第三方庫,在哪裡,怎麼在做項目的過程中知道自己要用到哪些庫,求答案
很多很多的第三方庫,你想用哪些功能?有很多第三方庫都已經被集成到android SDK中了,比如httpclient,可以用來發送http請求,android本身就是一個開源系統,裡面用到了很多第三方的開源成熟庫,直接調用你需要的類就可以了
⑷ 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 studio和 gradle android 庫
在 Eclipse 中我有 3 個項目 (2 個 android 應用程序項目和 1 個 android 庫項目)。2 應用程序項目依賴的庫項目。當我做 gradle 出口時不工作的 3 項目吧我對重組項目開放但還沒找到如何應該這樣的任何文檔。
有一個能讓 3 項目那日食出口工作在一起嗎?我更好地關閉重組的事情和如果是如何應該這樣的文檔嗎?
更新
我已將整個項目上載到 GitHub https://github.com/respectTheCode/android-studio-library-example
更新 1
根據建議從帕德瑪 · 庫馬爾 · 這是我已經試過。
創建一個稱為的新項目MyApp
單擊 File > New Mole ,選擇 Android Library 並將其命名MyLib
單擊Build > Make Project
生成失敗,此錯誤
Mole "MyLib" was fully rebuilt e to project configuration/dependencies changes
Compilation completed with 1 error and 0 warnings in 19 sec
1 error
0 warnings
/.../MyApp/MyLib/build/bundles/debug/AndroidManifest.xml
Gradle: <manifest> does not have package attribute.
然後,添加 package 特性使它的清單
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.mylib" >
在大廈後出現此錯誤
Mole "MyApp" was fully rebuilt e to project configuration/dependencies changes
Compilation completed with 2 errors and 0 warnings in 13 sec
2 errors
0 warnings
/.../MyApp/MyLib/src/main/java/com/example/mylib/MainActivity.java
Gradle: package R does not exist
Gradle: package R does not exist
添加依賴關系似乎不該錯誤產生任何影響。繼續從上面
單擊File > Project Structure > Moles > MyApp-MyApp
切換到 Dependencies 選項卡
單擊 + > Mole Dependency 和挑MyLib
單擊 Apply 和OK
單擊Build > Make Project
更新 2
根據伊桑這是我們從哪裡得到的建議
2 子項目 build.gradle 似乎有了正確的部件的所有和唯一的區別是插件線波紋管是 MyApp/build.gradle 。
buildscript {
repositories {
maven { url 'http://repo1.maven.org/maven2' }
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
apply plugin: 'android'
dependencies {
compile files('libs/android-support-v4.jar')
}
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 16
}
}
根項目 build.gradle 是空的因此增加了像這樣的兩個項目
dependencies {
compile project(":MyLib")
compile project(":MyApp")
}
我現在會出現此錯誤時建設
Gradle:
FAILURE: Build failed with an exception.
* Where:
Build file '/Users/kevin/GitHub/AppPress/MyApp/build.gradle' line: 2
* What went wrong:
A problem occurred evaluating root project 'MyApp'.
> Could not find method compile() for arguments [project ':MyLib'] on root project 'MyApp'.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
更新 3
大的感謝伊解決此問題。
添加 compile project(':SubProjects:MyLib') 到MyLib/build.gradle
刪除 compile files('libs/android-support-v4.jar') 從MyLib/build.gradle
關閉項目並從 gradle 導入根項目
更新 4
0.1.2 到你現在可以包括 compile "com.android.support:support-v4:13.0.0" 而不是 compile files('libs/android-support-v4.jar') 。因為它來自住友公司專家現在可以包括這在多個項目中沒有問題。
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4.2'
}
}
apply plugin: 'android'
dependencies {
compile "com.android.support:support-v4:13.0.0"
compile project(':SubProjects:MyLib')
}
⑹ android項目中如何載入已有so庫
android項目中如何載入已有so庫方法:
⑺ 在Android項目中,怎樣添加recyclerview庫
1.添加RecyclerView Android依賴項
要將RecyclerView Selection庫添加到Android Studio項目,請implementation 在app 模塊的build.gradle 文件中提及以下依賴項:
1.implementation 'com.android.support:recyclerview-v7:28.0.0'
2.implementation 'com.android.support:recyclerview-selection:28.0.0'
2.創建一個列表
在本教程中,我們將使用一小部分項目,每個項目都包含一個人的姓名和電話號碼。
要存儲每個列表項的數據,請創建一個名為的Kotlin數據類,Person並為其添加兩個屬性:name 和phone。
1.data class Person(val name:String,
2. val phone: String)
您現在可以繼續Person 在主活動中創建對象列表。
val myList = listOf(
Person("Alice", "555-0111"),
Person("Bob", "555-0119"),
Person("Carol", "555-0141"),
Person("Dan", "555-0155"),
Person("Eric", "555-0180"),
Person("Craig", "555-0145")
)
3.將Recycler視圖添加到布局
當然,我們將使用RecyclerView 小部件來顯示列表。因此
,在主活動的布局XML文件中添加 標記。
要指定列表項的布局,請創建一個新的XML文件並將其命名為list_item.xml。在其中,添加兩個TextView 小部件:一個用於顯示名稱,另一個用於顯示電話號碼。如果使用LinearLayout 元素來定位窗口小部件,則XML文件的內容應如下所示:
4.創建一個View Holder
您可以將視圖持有者視為一個對象,其中包含對列表項布局中存在的視圖的引用。沒有它,RecyclerView 窗口小部件將無法有效地呈現列表項。
現在,您需要一個視圖持有者,它包含TextView 您在上一步中創建的兩個小部件。因此,創建一個擴展RecyclerView.ViewHolder 類的新類,並初始化對其中的小部件的引用。這是如何做:
class MyViewHolder(view: View)
: RecyclerView.ViewHolder(view) {
val name: TextView = view.list_item_name
val phone: TextView = view.list_item_phone
// More code here
}
此外,RecyclerView Selection插件需要一種可以調用以唯一標識所選列表項的方法。理想情況下,此方法屬於視圖持有者本身。此外,它必須返回ItemDetailsLookup.ItemDetails 類的實例。
⑻ 怎麼把Android工程打包成apk
你好
第一步,把普通的android project設置成庫項目
庫項目也是一個標準的android項目,因此你先創建一個普通的android項目。 這個項目可以起任何的名稱,任何的報名,設置其他需要設置的欄位等,如圖1所示。
接著把項目設置成庫項目,步驟如下
在Package Explorer中, 滑鼠右鍵項目文件夾,點擊 Properties.
在Properties 窗口, 選擇"Android" ,Library 屬性顯示在右下邊.
把"is Library" 單選框選擇上,再點擊 Apply.
點擊 OK 關閉Properties 窗口.
這時,這個項目就變成庫項目了。
當然,java項目也可以讓其變成一個庫項目,非常簡單,執行上面的四步。其他程序項目就可以引用庫項目了。
圖 1.使一個項目為庫項目
創建manifest文件
一個庫項目的manifest文件也和標準的android應用程序一樣,聲明所有共享的組件。
比如APIDemo中的TicTacToeLib 這個例子,庫項目聲明了Activity GameActivity:
<manifest>
...
<application>
...
<activity android:name="GameActivity" />
...
</application>
</manifest>
第二步 引用庫項目
如果你開發的應用程序想要包括庫項目中的代碼和資源,非常簡單,引用步驟如下
在Package Explorer中, 滑鼠右鍵項目文件夾,點擊 Properties.
在Properties 窗口, 選擇"Android" ,Library 屬性顯示在右下邊.
點擊Add ,打開了Project Selection 對話框.
從可用庫項目列表選擇一個項目,然後點擊 OK.
對話框關閉之後點擊 Apply (在Properties 窗口).
點擊 OK 關閉Properties 窗口.
完成以上六步,Eclipse 會重建項目,把庫項目中的內容包含進去。 如圖2所示
圖 2. 讓項目引用一個庫項目
如果你想增加多個庫項目的引用,使用up和down可以設置他們的相對的優先順序和合並順序。工具在合並引用的庫的時候順序是從低優先順序(列表的下面)到高優先順序(列表的上面)。 如果不只一個庫定義了相同的資源ID,這個工具選擇資源時會選擇高優先順序的資源。應用程序自身擁有最高的優先順序,自身的資源zThe application itself has highest priority and its resources are always used in preference to identical resource IDs defined in libraries.
在menifest文件中聲明庫中的組件
在manifest 文件中必須增加對在當前程序中用到的庫項目中的所有的組件 。比如,你必須聲明任何用到的 <activity>, <service>, <receiver>, <provider>等,<permission>, <uses-library>, 和其他類似的元素。
聲明庫項目中的組件時,必須使用包含包名的類全名。
在TicTacToeMain 例子中,聲明庫Activity GameActivity :
<manifest>
...
<application>
...
<activity android:name="com.example.android.tictactoe.library.GameActivity" />
...
</application>
</manifest>
For more information about the manifest file, see the documentation for AndroidManifest.xml.
望採納祝你好運