Android 应用编译,一种安卓系统应用程序的编译方法与流程

a6df924e976080b75359006f467a1cf6.gif

本申请涉及安卓系统技术,特别涉及一种安卓系统应用程序(app)的编译方法。

背景技术:

android8.0google引入了一个非常重要的特性名为projecttreble,提供了一个稳定的新供应商接口,这样一来,设备制造商只需更新android操作系统框架,即可跳过芯片制造商直接提供新的android版本,其目的就是为了解决android版本碎片化的问题。

硬件抽象层(hal)接口定义语言(hidl)是用于指定hal和其用户之间的接口的一种接口描述语言(idl)。hidl允许指定类型和方法调用,其中,指定的类型和方法会汇集到接口和软件包中。从更广泛的意义上来说,hidl是用于在可以独立编译的代码库之间进行通信的系统。

treble的架构改变建立在hidl的技术之上,也即利用hidl技术实现独立编译的代码库进行通信,从而实现制造商以更低的成本更轻松、更快速地将设备更新到新版android系统。通俗的说是这样,在以往android更新操作系统,供应商(照相、传感器...)或芯片制造商(高通、mtk...)必须要先进行硬件适配,然后交由制造商(手机品牌)生产手机。这个过程往往比较漫长,也就是为什么android更新版本后,绝大多数手机(google亲儿子除外)需要很久才能收到系统更新的通知。treble就是意在缩短这个过程,hidl是基本的技术支撑。

在进行安卓系统的app编译时,需要继承很多安卓系统中的基类,以下将这些需要被继承的基类称为依赖类。androidapp为了方便灵活的开发和升级,需要实现单仓编译方案。但hidl框架引入后,很多需要被继承的依赖类没有在androidsdk里暴露,对于需要实现应用层与系统运行层间交互从而依赖于hidl接口的app(例如需要实现ril的app),使用hidl接口无法直接继承和引用这些被隐藏的依赖类,因此,不能够实现单仓编译,导致app只能源码中开发编译,失去了灵活性。

技术实现要素:

本申请提供一种安卓系统app的编译方法,能够在引入hidl接口的安卓系统中实现app的单仓编译。

为实现上述目的,本申请采用如下技术方案:

一种安卓系统应用程序的编译方法,在基于硬件抽象层接口定义语言hidl框架的安卓android系统中,对于依赖hidl接口的应用程序app,所述方法包括:

针对所述app要实现的应用层与系统运行层间交互的每个模块,在所述android系统中选择编译所述模块时需要继承、且在androidsdk中没有公开的基类和/或方法,将其编译出来并打包成一个jar包,提供给所述app的安装程序apk进行编译;

将针对所述模块的hidl接口与系统运行层间被隐藏的接口打包成另一个jar包,作为接口依赖库提供给所述apk进行编译;

利用针对所述每个模块的所述一个jar包和所述另一个jar包,编译所述apk。

较佳地,将所述一个jar包提供给所述apk进行编译的方式包括:将所述一个jar包拷贝到所述apk的编译工程中,并标记为仅编译依赖该jar包,所述apk中不包括所述一个jar包。

较佳地,将另一个jar包提供给所述apk进行编译的方式包括:将所述一个jar包拷贝到所述apk的编译工程中,并标记为仅编译依赖该jar包,所述apk中不包括所述一个jar包。

较佳地,针对ril模块,所述需要继承、且在androidsdk中没有公开的基类包括:hwbinder类、hwblob类、hwparcel类、ihwbinder类和ihwinterface类。

较佳地,针对ril模块,所述需要继承、且在androidsdk中没有公开的方法包括:worksource类的getname、get和size方法。

较佳地,针对ril模块,所述被隐藏接口为lteradio接口。

由上述技术方案可见,在基于硬件抽象层接口定义语言hidl框架的安卓android系统中,对于依赖于hidl接口的app,选择app编译时需要继承、且在androidsdk中没有公开的基类和/或方法,将其编译出来并打包成一个jar包,提供给app的安装程序(apk)进行编译;将被隐藏的接口打包成另一个jar包,作为接口依赖库提供给apk进行编译;利用前述两个jar包,编译相应的apk。通过上述方式,将sdk中没有公开的相应基类、方法和lteradio接口打包成jar包,提供给apk依赖,使得apk编译过程中可以正常使用相应的基类、方法和接口,实现应用上层与系统运行库间的正常交互,从而在引入hidl接口的安卓系统中实现app的单仓编译。

附图说明

图1为引入hidl框架前ril的交互框架示意图;

图2为引入hidl框架后ril的交互框架示意图;

图3为本申请中app编译方法的基本流程示意图;

图4为本申请中打包的jar包与riljat组件的依赖关系图。

具体实施方式

为了使本申请的目的、技术手段和优点更加清楚明白,以下结合附图对本申请做进一步详细说明。

在安卓系统的app中,为实现特定功能,可能需要实现一些模块,这些模块用于实现应用层与系统运行层间的交互。对于这类模块,在引入hidl框架后,是需要利用hidl接口的,但是按照现有方式无法实现单仓编译。以ril模块为例,图1和图2分别为引入hidl框架前后ril的交互框架示意图。ril框架包括rilj和rilc。如图1所示,在引入hidl框架前,rilj和rilc之间是通过socket接口相连的,可以实现单仓编译。如图2所示,在引入hidl框架后,rilj和rilc之间的接口变成了hidl接口,但是实现hidl时需要继承的hwbinder、hwblob、hwparcel、ihwbinder和ihwinterface这些类本身为@hide属性,需要使用的worksource类的getname,get,size等方法也为@hide属性,这些@hide属性的基类和方法没有在androidsdk中开放;同时,实现ril模块时需要使用的interface中定义的lteradio接口也没法打包到sdk中。由于上述被隐藏的类、方法和接口没有打包到sdk中,因此无法直接提供给apk开发人员使用,从而无法实现ril模块的单仓编译,继而影响整个app的编译。

针对上述情况,本申请提供一种app的编译方法,能够针对每个用于实现应用层与系统运行层间交互的模块,实现单仓编译,从而保证整个app实现单仓编译。

图3为本申请中app编译方法的基本流程示意图。如图1所示,该方法包括:

步骤301,针对app要实现的应用层与系统运行层间交互的每个模块,选择编译相应模块时需要继承、且在androidsdk中没有公开的基类和/或方法,将其编译出来并打包成一个jar包,提供给app的apk进行编译。

以要实现ril模块为例,选择编译ril模块时需要继承、且在androidsdk中没有公开的基类和方法,也就是将hwbinder类、hwblob类、hwparcel类、ihwbinder类和ihwinterface类以及worksource类的getname、get和size等方法,将上述选择出的类和方法编译出来并打包一个jar包中,例如hidlsupport.jar。

对于其他类似模块也同样进行处理。对于有些模块,可能在实现时所需的所有基类都已经包括在sdk中,只有部分方法不包括,那么就只将这些隐藏的方法编译出来并打包;有些模块,可能在实现时所需的所有方法都包括在sdk中,只有部分基类不包括,那么就只将这些隐藏的基类编译出来并打包。在实际的实现过程中,针对各个模块的不同情况,选择相应的基类和/或方法编译出来并打包。

在将打包好的jar包提供给apk进行编译时,具体处理可以为:将这个jar包拷贝到apk的编译工程中,并标记为仅编译依赖该jar包,而发布的apk中不包括该jar包。

步骤302,对应于步骤301中的每个模块,将针对相应模块的hidl接口与系统运行层间的被隐藏接口打包成另一个jar包,作为接口依赖库提供给apk进行编译。

以要实现ril模块为例,针对ril模块,hidl接口与系统运行层间的被隐藏接口为interface中定义的lteradio接口,因此,将该接口打包成jar包,例如lteradiointerface.jar。

对应于不同的模块,被隐藏接口也可能不同。在实际应用中,根据实际情况选择合适的接口打包成jar包即可。

在将打包好的接口jar包提供给apk进行编译时,具体处理可以与步骤301中的相同:将这个jar包拷贝到apk的编译工程中,并标记为仅编译依赖该jar包,而发布的apk中不包括该jar包。

步骤303,利用针对各个模块的jar包,编译apk。

对于一个app,如果该app要实现的各个依赖于hidl接口的模块都已经提供了相应的jar包,则可以对该app的apk进行单仓编译。

至此,本申请中的app编译方法流程结束。

图4为针对ril模块的编译依赖示意图。如图4所示,一个通信类app(ecomapp),为实现ril模块,打包了hidlsupport.jar(源自步骤301中)和lteradiointerface.jar(源自步骤302中),并与riljat组件建立了依赖关系,并标记该依赖仅限于编译依赖,发布的apk中不包括hidlsupport.jar和lteradiointerface.jar;同时,系统中自带有androidsdk,能够提供其他sdk中公开的基类、方法和接口。通过上述方式,在编译app的apk时,可以顺利找到riljat组件需要继承的基类、方法和接口,从而实现单仓编译。

上述即为本申请中app编译方法的具体实现。通过上述方法,可以将需要使用、但隐藏的类、方法和接口打包成jar包,提供给apk依赖,以实现apk的单仓编译,提高了开发编译app的灵活性。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值