android依賴aar
㈠ 如何製作一個android studio的aar依賴包
選中需要添加「aar依賴包」,點擊「Build——>Edit
Libraries
and
Dependencies——>+」
teachcourse常用解決辦法,添加的依賴包:
選擇「Library
Dependence」,在搜索框中輸入「aar依賴包」,選中搜索到的jar包,添加即可
㈡ Android 多mole情況下mole依賴aar問題處理
1:問題描述
在mole中依賴aar後,運行會報app找不到mole所依賴的aar包,如:
2:問題修復方案:
方案一:
在所有需要依賴此mole的build.gradle 文件中添加此配置:
若是mole很多的話,此方法需要在每個mole中配置下
方案二:
在項目根目錄中的build.gradle中添加此配置:
省了很多事
㈢ Android mole library中添加aar包的那些坑
離線打包,通過緩存的jar包,但 不是長久之計,開發人員苦不堪言啊。後來參考了文章 折騰許久 解決問題了。記錄一下 分享出來。
新建的common_mole ,裡面只放 aar. 讓別的mole 依賴此 mole
這個common_mole的gradle配置如下:
注意點
repositories 下的 flatDir 必須在 android{} 節點下!看來還沒有完。需要aar包的mole只需要在 dependencies 下 這么依賴即可
等等,還沒有完。任何依賴此common_mole的mole必須聲明在他的build.gradle聲明此lib位置。
同樣的他的build.grade 的repositories 下的 flatDir 必須在 android{} 節點下!舉例有個mole名字叫 business_core 他需要某些aar他要依賴 common_mole。ok 先 dependencies compile project(':common_mole')。然後在android{ } 節點下聲明
../../../../表示了 位置,此位置根據具體與common_mole位置的不同做不同修改。還沒完!project根目錄的build.gradle也要改!以及 app目錄下的build.gradle都需要加上,根目錄加上的方式跟其他mole一致,其中project 根目錄下的build.gradle 加的位置是在allproject節點下。如下:
上面的步驟,少一點就會編譯失敗,比較扯,記錄一下,分享出來。感覺 寫絕對路徑比較復雜,可以更簡單點 。在dependencies.gradle中定義 common_mole/libs的位置
其他build.gradle可以這么依賴。
㈣ 如何創建一個依賴Android AAR文件的React Native組件
Step 1 - 新建react-native工程 ReactNativeToastAndroid
$ react-native init ReactNativeToastAndroid1
Step 2 - 將新建的工程導入android studio然後新建空library(以react-native-toast-android為library的名稱)之所以要新建一個library而不在ReactNativeToastAndroid工程中寫呢,主要是為了方便上傳到npm及github上方便其他開發者使用,一般以react-native-xxx-android命名方便識別這是react-native組件。
Step 3 - 新建空library(以react-native-toast-android為library的名稱)
在library目錄下的build.gradle中添加react-native的依賴
// file: android/react-native-toast-android/build.gradle
...
dependencies {
...
compile 'com.facebook.react:react-native:0.16.+'
}1234567
Step 4 - 繼承ReactContextBasejavaMole ,大家可以很明顯的發現show()方法上多了一個『@ReactMethod』,加上了『@ReactMethod』的方法可以被js調用。
public class AndroidToastMole extends ReactContextBaseJavaMole {
private static final String DURATION_SHORT_KEY = "SHORT";
private static final String DURATION_LONG_KEY = "LONG";
public AndroidToastMole(ReactApplicationContext reactContext) {
super(reactContext);
}
@Override
public String getName() {
return "ToastForAndroid";
}
@Override
public Map<String, Object> getConstants() {
final Map<String, Object> constants = MapBuilder.newHashMap();
constants.put(DURATION_SHORT_KEY, Toast.LENGTH_SHORT);
constants.put(DURATION_LONG_KEY, Toast.LENGTH_LONG);
return constants;
}
@ReactMethod
public void show(String message, int ration) {
Toast.makeText(getReactApplicationContext(), message, ration).show();
}
}
Step 5 - 繼承ReactPackage,注意createNativeMoles()返回的是加入了 AndroidToastMole 的集合,createJSMoles()與createViewManagers()返回的都是空集合,如果Step 4 步繼承的是BaseViewManager或其子類,那麼createViewManagers()中返回的就是加入了BaseViewManager的集合,其他的就是空集合,一般情況createJSMoles()的返回值都是空集合。
public class AndroidToastPackage implements ReactPackage {
@Override
public List<NativeMole> createNativeMoles(ReactApplicationContext reactContext) {
return Arrays.<NativeMole>asList(new AndroidToastMole(reactContext));
}
@Override
public List<Class<? extends JavaScriptMole>> createJSMoles() {
return Collections.emptyList();
}
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return Collections.emptyList();
}
}1234567891011121314151617
Step 6 - 新建ToastForAndroid.js,文件位置
『 android/react-native-toast-android/ToastForAndroid.js 』代碼如下,然後在 『android/react-native-toast-android/』下運行如下命令生成package.json文件
$ npm init //生成package.json文件1
'use strict';
var RCTToastAndroid = require('NativeMoles').ToastForAndroid;
var ToastForAndroid = {
SHORT: RCTToastAndroid.SHORT,
LONG: RCTToastAndroid.LONG,
show: function (
message: string,
ration: number
): void {
RCTToastAndroid.show(message, ration);
},
};
mole.exports = ToastForAndroid;
Step 7 - 復制ToastForAndroid.js 文件到『/ReactNativeToastAndroid/ 』 目錄下,如下是index.android.js代碼,然後運行測試
'use strict';
var React = require('react-native');
var {
AppRegistry,
StyleSheet,
Text,
Dimensions,
TouchableHighlight,
View,
} = React;
// var ToastForAndroid = require('react-native-toast-android');
var ToastForAndroid = require('./ToastForAndroid');
var deviceWidth = Dimensions.get('window').width;
var deviceHeight = Dimensions.get('window').height;
var ReactNativeSegmentedExample = React.createClass({
_onPressButton:function(){
ToastForAndroid.show('點擊了!', ToastAndroid.SHORT)
});
},
render: function() {
return (
renderButton: function() {
return (
<TouchableHighlight onPress={this._onPressButton}>
<Text style={{width:deviceWidth,height:50}}>click goto activity</Text>
</TouchableHighlight>
);
},
);
}
});
...2829303132333435
Step 9 - 測試成功,在目錄『 /android/react-native-toast-android/ 』下運行命令:
$ npm adser //增加npm用戶
$ npm publish //上傳react-naive-toast-android到npm上12
Step 10 - 其他開發者使用你上傳到npm上的組件方法(github上的模板)
㈤ Android Studio如何使用aar依賴包
ps:2013-12-25 號更新,升級到0.4以後 這種方法已經完美使用!
因為項目裡面要用到actionbarsherlock,所以研究了一下如何導入到android studio中。
arr(Android Archive):名字是谷歌到的,至於中文叫什麼我也不知道。不過好像依賴都要使用這樣的包了。
首先說明我使用的android studio 版本是3.1.因為現在android studio的bug還不較多,所以你的版本能不能正常使用我就不敢說了。
如果你只是單純的想使用actionbarsherlock的話,引用是十分簡單的
復制代碼
代碼如下:
dependencies {
// compile fileTree(dir: 'libs', include: '*.aar')
compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
compile 'com.android.support:support-v4:18.0.+'
}
然後重新編譯一下項目就行了。(ps 這兩天看見群裡面都在討論引用第三方jar包,請看我的第一行注釋,你只要新建一個libs的文件夾,然後把想要jar包復制到文件夾下,接著把注釋那句復制到build文件中,修改一下(*.aar -> *.jar)就可以了)
但是我們要是使用本地的aar文件,我谷歌了兩天總算是勉強能用了,請看我的實現過程,如果你有更好的請轉告小弟共同進步
第一步 :生成aar文件
我的方法是通過maven-android-plugin來生成的,如果你使用過actionbarsherlock以前的版本的話,這個工具應該不陌生,如果你連maven 都不知道的話,建議好好學習一下maven,雖然現在gradle很火 ,但是我還是最喜歡maven。
關於具體生成步驟不久不詳細說了,文章最後貼出幾個網址供大家學習使用,放心我按順序給你們,只要一步一步的來絕對能成功
1、把你的maven版本提升到3.1.1
2、去github上clone下來 maven-android-sdk-deployer 這個項目https://github.com/mosabua/maven-android-sdk-deployer,按照使用說明安裝android的版本
3、通過maven-android-plugin生成一個android項目
復制代碼
代碼如下:
mvn archetype:generate /
-DarchetypeArtifactId=android-quickstart /
-DarchetypeGroupId=de.akquinet.android.archetypes /
-DarchetypeVersion=1.0.11 /
-DgroupId=your.company /
-DartifactId=my-android-application
4 修改pom
復制代碼
代碼如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lee.study.android</groupId>
<artifactId>NiMa</artifactId>
<packaging>aar</packaging>
<name>NiMa</name></p><p> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<platform.version> 4.1.1.4
</platform.version>
<android.plugin.version>3.8.0</android.plugin.version>
</properties>
<dependencies>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>android</artifactId>
<version>${platform.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<pluginManagement>
<plugins>
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<version>${android.plugin.version}</version>
<extensions>true</extensions>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<configuration>
<sdk>
<platform>16</platform>
<path>E:/android_work/sdk/</path>
</sdk>
</configuration>
</plugin>
</plugins>
</build>
</project>
這是我的pom,打包類型改成aar,插件改成3.8版本,添加ANDROID_HOME到path。
5 執行 mvn install ,這樣我們就得到了aar文件,和aar-class.jar文件,其實aar文件裡麵包含class.jar文件,但是我目前的版本必須手動導入到android studio中,這就是不完美之處。
第二步 導入到android studio中 創建libs文件夾,放入想要導入的文件
1 修改build.gradle ,依然是給出我的大家可以按照自己的項目對比修改
復制代碼
代碼如下:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.6.+'
}
}
apply plugin: 'android'</p><p>repositories {
mavenLocal()
mavenCentral()
flatDir {
dirs 'libs'
}
}
android {
compileSdkVersion 18
buildToolsVersion "18.1.1"</p><p> defaultConfig {
minSdkVersion 7
targetSdkVersion 18
}
}
dependencies {
// compile fileTree(dir: 'libs', include: '*.aar')
compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
compile 'com.jayway.maven.plugins.android.generation2.samples.libraryprojects:aar-lib1:1.0.0@aar'
//compile 'com.lee.study.android:NiMa:0.0.1@aar'
compile 'com.android.support:support-v4:18.0.+'
}
android {
compileOptions.encoding = "UTF-8"
}
repositories 添加了 flatDir , dependencies 裡面添加了 依賴的aar文件。
如果你做到這一步,重新編譯一下依賴就添加好了,我目前的版本添加完了aar訪問aar中的資源文件是不成問題的,但是不能訪問到aar中的類文件。如果你和我一樣不幸的話,請看下一步
2 手動的添加class.jar文件到android -studio,選中項目F4 ,手動添加依賴 jar到項目,看圖片
如果這一步你也搞定了,恭喜你就能和我一樣使用依賴了
Toast 顯示的內容是依賴包中的一個靜態方法返回的文本內容。
最後關於maven 如果搭建android項目的網址,按順序看就可以
https://code.google.com/p/maven-android-plugin/
http://stand.spree.de/wiki_details_maven_archetypes
http://javacan.tistory.com/198
㈥ Android發布AAR包
最近有需求要發布一套SDK,這套SDK有幾個要求:
依照上面的要求我最先想到的就是AAR包了,因為以下幾個原因:
打包aar其實很簡單,只需要我們創建一個Library工程就可以了。
這個時候編譯Library就會在outputs目錄下生成一個aar文件夾,裡麵包含aar文件。
aar也是可以混淆的,方式和apk一樣。
引用aar可以有兩種方式,一種是本地引用,一種是遠端庫引用,目前我只用到了本地引用,遠端的以後會補上。首先在bulid.gradle文件中定義一個本地庫。
然後在依賴引用的地方添加依賴。
name:aar包的名字;ext:擴展名;
打包aar包的時候會自動將lib目錄下的jar打包進aar包中。
因為分層的原因,有多個library工程,這樣就會有多個aar,發布起來很麻煩,嘗試google了半天,發現目前都是一個辦法,android-fat-aar,一個gradle腳本,github地址是: https://github.com/adwiv/android-fat-aar 。不過我發現他支持gradle2.2.X之前的版本,新的3.X版本並不能執行。這塊還在繼續摸索,有知道辦法的大神請指教一下~~~~
㈦ 關於打Android aar離線包的一些經驗分享
幾經思考後,本來想手動把a,b,c那幾個庫編譯成jar放到aar的lib里,但是找到那些a,b,c庫一看他們又分別依賴了公司另外的幾個庫d,e,f,頓時頭大了,真要自己一個個手動編譯就頭大了,後來在網上找了一圈發現一個插件是解決這種難題的完美方案。就是fat-aar(胖子aar),GitHub地址:
該插件提供的功能主要是幫我們把sdk的依賴庫集成到aar里,使用上還需自行靈活選擇哪些依賴庫需要集成進aar,哪些不需要,比如我在打完全量依賴的aar後(配置transitive為true,只embed標記公司的庫依賴,三方庫不打標記)就發現會出現很多類/模塊重復,一看都是官方的一些庫文件,原因是全量打包會把所有支付Sdk里embed標記的庫依賴的依賴(樹結構遍歷一直到底)都集成進aar,這樣肯定會出現很多重復的模塊/類。
所以後來又打了一個只引入直屬依賴jar包的aar((配置transitive為false,也是只embed標記公司的庫依賴,三方庫不打標記),這樣就只會把支付Sdk里的embed標記依賴庫集成進aar,而不會繼續遍歷下去集成更底層的依賴,如此確實解決了模塊/類沖突的問題,但是因為沒有把所有的依賴集成進aar,使用的時候會報很多ClassNotFound的錯誤。
在這里卡了很久,雖然知道問題原因,但是處理起來著實麻煩,好在fat-aar插件打包aar的時候把大部分直屬/公司庫依賴都是放在classes.jar里,而很多知名三方/android官方依賴放在libs目錄下,如此,我便想到可以把全量aar里的classes.jar文件里的com包(裡面大都是公司的依賴jar)復制替換掉直屬依賴aar包裡面的com包,刪掉android和androidx包,最後使用修改過的直屬依賴aar放到demo工程libs里跑起來後,還是報了一些知名三方庫(retrofit,gson等)沒有找到的錯誤,這都是預期會出現的問題,在demo里重新依賴一下即可。
到此,我們提供的支付Sdk的aar包裡麵包含的基本是我們公司自己的庫相關集成,知名的三方庫讓使用者自行添加依賴即可,這樣對集成方也更友好,因為他們自己的工程很多可能會自行集成那些知名三方庫,這樣就不會出現包名/類沖突的問題,但是需要集成哪些知名 三方庫需要告知集成者。(期間遇到因為公司加密系統導致360壓縮編輯aar和jar包時損壞文件,後面改用rar壓縮解決了問題)
㈧ uniapp安卓aar插件問題
Android插件在application中初始化了很多東西,如果生成aar包提供給前端,讓前端進行雲打包,那麼Android在application中所初始化的東西將會失效,因為雲打包,我們無法控制讓他載入我們的application。Android插件依賴了很多第三方的aar包,如果把插件打成aar包,那麼插件依賴的第三方aar包將無法和插件打包成一個aar文件,就會導致插件中很多類和文件找不到uniapp前端配置文件中可以依賴於maven倉庫,但是uniapp的maven僅限於jcenter和aliyun名下的才能引用。
㈨ Android:多aar打包
我使用的是網上這個 https://github.com/kezong/fat-aar-android
這個github庫。
具體配置是再跟gradle中添加:
classpath 'com.kezong:fat-aar:1.2.7'
在需要打包的地方添加:
apply plugin: 'com.kezong.fat-aar'
然後添加需要合並的包,可以是遠程包,本地aar,本地project。可以說很完整了。
例如:
怎麼看遠程依賴呢?下面這里就可以看
最後生成的aar包如下,jni和jar包都有了
反編譯看看classes.jar看看,本地項目的類都在這裡面了。
後面得看看是怎麼打包起來的了,不然後續作者不維護了就蛋疼了。
㈩ 如何創建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 文件可能包含以下可選條目中的一個或多個: