1.前言
上篇《Android Automotive 14(3)车机应用系统平台签名》已经将应用配置好了系统平台签名,那么如何用Android Studio进步调试学习AAOS 14相关API,尤其是CarService相关的API呢?
这篇文章将记录一下对于车机系统应用,如何导入framework.jar和android.car.jar。
2.概念
谷歌官方对于Automotive架构的解释,可以参照Automotive;
所以,如果简单理解 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,不包括系统的@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文件夹:
在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注解。
针对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调用完成,就可以看到打印:
5.总结
通过以上jar包的导入,我们完成了
- System API的调用
- CarService API的调用
对车机系统应用开发,也有了更深一步的了解。AAOS 14其他部分,还有更多的地方等着去探索。
如果你喜欢我的文章,欢迎关注我的微信公众号阿坤iKun,关注不迷路,我是练习时长两年半的阿坤iKun,下期再见!