Android Studio 上jar包,aar包,aidl,aidl打成aar包的正确使用

由于一直做的是系统rom开发,对于jar包,aar包,aidl,aidl打成aar包这些东西之前一直没有比较明晰的实践,以及哪些场合下需要这些方法,这些方法有哪些优劣以及局限性。

抽时间每种方式都在Android Studio上详尽的实践了一遍,有以下收获。为了方便大家理解,最好根据我这边上传的源码就自己实践一遍。demos都是基于Android Studio 3.2版本做的。

demos下载地址:https://download.csdn.net/download/mis_wenwen/10723995

 

1.Jar的玩法

Jar包使用的范围:java的api实现的各种功能(如果涉及到android 的一些api,比如context类啊,toast类啊,这些就需要用到aar)

两个project

JarGenerate以及UseJar

1.新建项目JarGenerate

2.新建Module---jarLib,选择类型Java Library

3.jarLib里面有新建的Tools.java类,写一个Sum的方法。

4.生成jar包,这里要注意下,rebuild project是不会生成jar包。点界面邮编的Gradle,点开jarLib,Tasks-build-build.然后生成jar包在jarLib----build----libs----jarLib.jar

 

5.新建项目UseJar

6.导入并引用jar包,有几种方法

<1>把JarGenerate生成的jar包拷贝到UserJar---app---libs目录下,注意这里只是把jar包拷贝过来了,还没有引用到。

File---Project Structure---Dependencies点+号,选择Jar Dependency,选择刚那个jar包就行了。

<2>把JarGenerate生成的jar包拷贝到UserJar---app---libs目录下,注意这里只是把jar包拷贝过来了,还没有引用到。

build.gradle的dependencies {}里面直接加上implementation files('libs/jarLib.jar') ,如果gradle的版本比较低的话implementation要改成compile。

<3>新建一个Module,选择Import .Jar/.AAR Package,选好路径导入jar包,然后再去File---Project Structure---Dependencies点+号,选择Moduel Dependency。

导入并引用jar包的话推荐第一种方式。

8.调用下Tools类的api验证下就ok了。这时IDE可以识别出了。

 

jar包的玩法,google也有个老外写的比较详细,图片版的:

http://dominoc925.blogspot.com/2015/09/how-to-create-and-use-jar-archive-using.html

2.Aar的玩法

Aar包使用的范围:aar的范围比jar范围广,如果涉及到android 的一些api,比如context类啊,toast类啊,这些就需要用到aar

两个project

AarGenerate以及UseAar

1.新建项目AarGenerate

2.新建Module---AarLib,选择类型Android Library

3. AarLib里面自己右键新建一个ToastTool.java类,写一个showToast的方法。

4.生成aar包,这里要注意下,rebuild project是不会生成aar包。点界面邮编的Gradle,点开AarLib,Tasks-build-build.然后生成Aar包在AarLib----build----outputs---aar----AarLib-release.aar

 

5.新建项目UseAar

6.导入并引用aar包,有几种方法,这里和导入以及引用jar包有点类似,

但是jar包的第一种方式用不了,因为+号那没有Aar Dependency选项。

<1>把AarGenerate生成的aar包拷贝到UserAar---app---libs目录下,注意这里只是把aar包拷贝过来了,还没有引用到。

build.gradle的修改如下,如果gradle的版本比较低的话implementation要改成compile。

dependencies {

implementation(name:'mylibrary-release',ext:'aar')

….

}

repositories {

        flatDir {

            dirs 'libs'

        }

}

<2>新建一个Module,选择Import .Jar/.AAR Package,选好路径导入aar包,然后再去File---Project Structure---Dependencies点+号,选择Moduel Dependency。

导入并引用aar包的方式推荐第二种。

 

提到aidl,就说明有跨进程的引用的场景。对于我们做rom的来说,比如客户第三方apk,我们做个系统apk,有足够的权限去搞事情。那么客户通过我们的apk去做一些事情,就需要跨进程了。

当然,全部用广播来是可行的。如果功能比较多,考虑到接口统一点,用aidl。当然,用广播其实相比于aidl是有局限性的,如果第三方apk想要做一件只有系统apk才能做的事情,ok,你可以用第三方apk发广播给我们的apk,但是如果第三方apk同时需要做完这件事再返回一点数据,那广播就比较绕了,你还得在我们的apk里面发个广播出来给第三方apk。而aidl的话可以直接返回数据。

客户想通过aidl来调用我们的apk的相关api有两种玩法,一个是给他们我们的aidl文件,一个是我们把aidl打成jar包,给到他们。一般是第二种做法。两种都来实践一下。

3.aidl的玩法

两个project

AidlServer以及AidlClient

1.新建项目AidlServer

2.File---New---AIDL---AIDL File,aidl文件修改好后,build下project。然后发现在app---build---generated---source---aidl---debug---com.potter.aidlserver下生成了IMyAidlInterface.java

3.创建一个MyService,继承于Service,并且把这个servcie注册在AndroidManifest.xml

4.新建项目AidlClient

5.把AidlServer的app---src---main---aidl这个目录拷贝到AidlClient的app---src---main

6.AidlClient这个project build一下,然后在app---build---generated---source---aidl---debug---com.potter.aidlserver下生成了IMyAidlInterface.java

7.在AidlClient的代码里面bindService配合ServiceConnection拿到ImyAidlInterface的实例去调用api就ok了。

4.aidl打包到aar的玩法(推荐)

两个project

AidlAarServer以及AidlAarClient

1.新建项目AidlAarServer

2.File---New---AIDL---AIDL File,aidl文件修改好后,build下project。然后发现在app---build---generated---source---aidl---debug---com.potter.aidlaarserver下生成了IMyAidlInterface.java

3.创建一个MyService,继承于Service,并且把这个servcie注册在AndroidManifest.xml

4.新建Module---AidlAar,选择类型Android Library,这里要注意一点,我开始以为要把包名填写的和AidlJarServer的包名要一致,其实不一致也行。

5.把AidlJarServer的app---src---main---aidl这个目录拷贝到AidlAar的src---main下,build一下,然后发现在AidlAar---build---generated---source---aidl---debug---com.potter.aidlserver下生成了IMyAidlInterface.java。同时生成Aar包在AarLib----build----outputs---aar----aidlaar-release.aar

6.新建项目AidlAarClient

7. 新建一个Module,选择Import .Jar/.AAR Package,选好路径导入aar包(aidlaar-release.aar

),然后再去File---Project Structure---Dependencies点+号,选择Moduel Dependency。

8. 在AidlAarClient的代码里面bindService配合ServiceConnection拿到ImyAidlInterface的实例去调用api就ok了。

5.aidl打包到aar的玩法并封装Manager类(推荐)

提供了demo仅供参考,因为单纯aidl打成aar,第三方apk导入后还要自己去bindService之类的操作,我们可以封装起来,客户那边直接通过Manager类去调用我们提供的api就可以了。(这种感觉就有点像如android 系统里面的AudioManager,PackageManager的用法,例如AudioManager各种暴露的方法也都是通过aidl去调用的AudioManagerService的对应方法)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值