Android Automotive 14(4)导入系统jar包

1,377 阅读2分钟

title-1920.png

1.前言

上篇《Android Automotive 14(3)车机应用系统平台签名》已经将应用配置好了系统平台签名,那么如何用Android Studio进步调试学习AAOS 14相关API,尤其是CarService相关的API呢?
这篇文章将记录一下对于车机系统应用,如何导入framework.jarandroid.car.jar

2.概念

谷歌官方对于Automotive架构的解释,可以参照Automotive;
vehicle_hal_arch4.png
所以,如果简单理解 AAOS(Android Automotive OS) = AOSP(Android Open Source Project) +Car Service 也是可以的。 对于传统的第三方应用而言,我们常使用Android的SDK,就是图中的ANDROID FRAMEWORK API ;
而对于AAOS,就多出了一个CAR API部分,这部分添加了对汽车特定功能的支持,封装成API供应用层使用。
ANDROID FRAMEWORK API 其实就是对应framework.jar,比如我们代码每次引用的Bundle.java类,里面的路径其实就是调用 C:\android\Sdk\platforms\android-34\android.jar,也就是framework.jar包。
sdk.png
这部分是标准的SDK,不包括系统的@SystemApi接口。
同样的CAR API 其实就是对应android.car.jar,汽车相关的API都在里面,通用的SDK并不包含这部分,所以Android Studio本身无法直接访问。
了解了这2组API的大概情况后,下面就是我们找到AAOS编译的生成物,导入配置即可。

3.导入

编译完AAOS代码,可以找到,android.car.jar对应路径:

aosp\out\target\common\obj\JAVA_LIBRARIES\android.car_intermediates\classes.jar
或者
aosp\out\soong\.intermediates\packages\services\Car\car-lib\android.car\android_common\javac\android.car.jar

MD5值可以看出,两者表示是同一个文件

framework.jar对应路径:

aosp\out\soong\.intermediates\frameworks\base\framework\android_common\turbine-combined\framework.jar
或者
aosp\out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\classes-header.jar

其实,MD5值可以看出,两者表示是同一个文件

将jar拷贝到libs文件夹:
libs.png

在app的build.gradle中加入:

dependencies {  
    compileOnly files("libs/android.car.jar")  
    compileOnly files("libs/framework.jar")
}

其中compileOnly声明,库在编译代码时是可用的,实际在运行时,应用程序将依赖于设备上已有的系统库。

4.使用

针对framework.jar, 举一个SystemApi的例子:

import android.os.SystemProperties;
//ro.build.product  
String product = SystemProperties.get("ro.build.product");  
Log.d(TAG, "API using test: product="+product);

从代码也可以看出,显示为SystemApi注解。
systemapi.png
针对android.car.jar,举一个获取档位信息的例子:

import android.car.Car;  
import android.car.VehicleAreaType;  
import android.car.VehiclePropertyIds;  
import android.car.hardware.CarPropertyValue;  
import android.car.hardware.property.CarPropertyManager;
//gearSelection  
Car car = Car.createCar(this);  
CarPropertyManager mCarPropertyManager = (CarPropertyManager) car.getCarManager(Car.PROPERTY_SERVICE);  
CarPropertyValue<Integer> gearSelection = mCarPropertyManager.getProperty(Integer.class,  
        VehiclePropertyIds.GEAR_SELECTION, VehicleAreaType.VEHICLE_AREA_TYPE_GLOBAL);  
Log.d(TAG, "API using test: gearSelection=: +" + gearSelection);

当然上述CarSevice调用比较粗糙,具体可以参照: frameworks\opt\car\setupwizard\library\main\src\com\android\car\setupwizardlib\util\CarDrivingStateMonitor.java 里面有对档位监听回调更为详细和标准的示例。

以上API调用完成,就可以看到打印:
api_demo.png

5.总结

通过以上jar包的导入,我们完成了

  • System API的调用
  • CarService API的调用

对车机系统应用开发,也有了更深一步的了解。AAOS 14其他部分,还有更多的地方等着去探索。
如果你喜欢我的文章,欢迎关注我的微信公众号阿坤iKun,关注不迷路,我是练习时长两年半的阿坤iKun,下期再见!
icon.png