1. 程式人生 > >Android 將Android專案打包成aar檔案並在其他專案中引用,打包成jar包

Android 將Android專案打包成aar檔案並在其他專案中引用,打包成jar包

  • 首先說一下jar包和aar包有什麼區別?

1.打包之後生成的檔案地址:

*.jar:庫/build/intermediates/bundles/debug(release)/classes.jar

*.aar:庫/build/outputs/aar/libraryname.aar

2.jar包只包含了classes檔案,不包含資原始檔;aar不僅包含了classes檔案,還包含資原始檔
並且,aar的這個可以釋出到maven庫,然後使用者直接通過更改版本號就可以獲取到最新的aar檔案

  • 打包成aar檔案
    build.gradle(app)
    1.將apply plugin: ‘com.android.application’改為apply plugin: ‘com.android.library’
    2.去掉applicationId
    如下圖所示
    這裡寫圖片描述

3.清單檔案AndroidManifest.xml
將application的name icon lable theme roundIcon等屬性去掉

這裡寫圖片描述
4.去掉軟體的入口,如果不去掉,引用此aar檔案後,執行時軟體有兩個圖示
這裡寫圖片描述
5.雙擊右側的assembleDebug,如下圖位置
這裡寫圖片描述
完成後,可以看到在專案app/build/outputs/aar目錄下生成一個aar檔案。
這裡寫圖片描述
這是在debug模式下生成的aar包,正常需要在build.gradle(app)中配置好籤名,點選assembleRelease,生成aar包。不會簽名的百度下吧。

  • 引用aar檔案。
    1.把aar檔案放在一個檔案目錄內,比如就放在libs目錄內
    這裡寫圖片描述

    2.build.gradle(app)裡新增如下內容
repositories {
    flatDir {
        dirs 'libs'
    }
}
 compile(name: 'app-debug', ext: 'aar')

如下圖所示:
這裡寫圖片描述

重新執行下工程,可以看到aar檔案被載入了
這裡寫圖片描述
至此,可以呼叫aar中的方法和資源了。

清單檔案

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.bluetoothmicrecord">
<application android:allowBackup="true" android:supportsRtl="true" > <activity android:name=".MainActivity"> </activity> <activity android:name=".activity.AddBlueToothDevicesActivity" /> <activity android:name=".activity.RecordAudiosActivity" /> <service android:name=".activity.UploadService" android:enabled="true" android:exported="true" /> <activity android:name=".activity.BaseActivity"></activity> </application> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.FLASHLIGHT" /> <!--藍芽錄音所需的許可權--> <!-- 允許程式連線配對過的藍芽裝置--> <uses-permission android:name="android.permission.BLUETOOTH" /> <!-- 允許程序錄制音訊--> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <!-- 允許程式修改全域性音訊設定--> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <!-- 允許一個程式收到廣播後快速收到下一個廣播--> <uses-permission android:name="android.permission.BROADCAST_STICKY" /> <!-- 允許程式進行發現和配對新的藍芽裝置--> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 允許一個程式訪問CellID或WiFi熱點來獲取粗略的位置,6.0後藍芽掃描必須需要的許可權,要不discovery時發不了廣播--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> </manifest>

3.res內定義的屬性或者名稱, 都應當加上字首

你的aar裡定義資原始檔是很正常的事, 資原始檔很有可能和別人的資源重名, 而悲劇的是, 別人很有可能是引用了另外一個aar導致與你重名. 他無法修改那個aar的資源名, 就像他不能修改你的aar資源名一樣. 為了避免這種尷尬, 最好在定義的資源程前加上一個字首, 比如你的模組簡寫,商標簡寫等等. 避免衝突, 還能打個廣告, 何樂而不為.

  • 打包成jar檔案
    build.gradle(app)
    1.將apply plugin: ‘com.android.application’改為apply plugin: ‘com.android.library’
    2.去掉applicationId
    如下圖所示
    這裡寫圖片描述

3.重新編譯project
build–Make Project
編譯完成之後會在Module的build–>intermediates–>bundles–>debug(release)–>classes.jar,如下圖所示:
這裡寫圖片描述