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
    如下图所示
    Android 将Android项目打包成aar文件并在其他项目中引用,打包成jar包_第1张图片

3.清单文件AndroidManifest.xml
将application的name icon lable theme roundIcon等属性去掉

Android 将Android项目打包成aar文件并在其他项目中引用,打包成jar包_第2张图片
4.去掉软件的入口,如果不去掉,引用此aar文件后,运行时软件有两个图标
Android 将Android项目打包成aar文件并在其他项目中引用,打包成jar包_第3张图片
5.双击右侧的assembleDebug,如下图位置
Android 将Android项目打包成aar文件并在其他项目中引用,打包成jar包_第4张图片
完成后,可以看到在项目app/build/outputs/aar目录下生成一个aar文件。
Android 将Android项目打包成aar文件并在其他项目中引用,打包成jar包_第5张图片
这是在debug模式下生成的aar包,正常需要在build.gradle(app)中配置好签名,点击assembleRelease,生成aar包。不会签名的百度下吧。

  • 引用aar文件。
    1.把aar文件放在一个文件目录内,比如就放在libs目录内
    Android 将Android项目打包成aar文件并在其他项目中引用,打包成jar包_第6张图片
    2.build.gradle(app)里添加如下内容
repositories {
    flatDir {
        dirs 'libs'
    }
}
 compile(name: 'app-debug', ext: 'aar')

如下图所示:
Android 将Android项目打包成aar文件并在其他项目中引用,打包成jar包_第7张图片

重新运行下工程,可以看到aar文件被加载了
Android 将Android项目打包成aar文件并在其他项目中引用,打包成jar包_第8张图片
至此,可以调用aar中的方法和资源了。

清单文件


<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" />
   
    <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
    如下图所示
    Android 将Android项目打包成aar文件并在其他项目中引用,打包成jar包_第9张图片

3.重新编译project
build–Make Project
编译完成之后会在Module的build–>intermediates–>bundles–>debug(release)–>classes.jar,如下图所示:
Android 将Android项目打包成aar文件并在其他项目中引用,打包成jar包_第10张图片

感谢下面的博主:
http://www.cnblogs.com/androidxiaoyang/p/5473916.html
https://www.2cto.com/kf/201708/668822.html
http://blog.csdn.net/nicolelili1/article/details/53169470

你可能感兴趣的:(android)