android r 编译找不到头文件_kOS(1):编译
kOS不是一个全新操作系统,它基于Android。编译kOS app须要android NDK,版本至少是16b,至于android SDK则不须要了。
一、app层
1.1 预定义宏:_KOS
Android.mk
--------------------
LOCAL_CFLAGS += -D_KOSkOS用Android NDK编译,于是kOS app继承了编译Android app时所有预义宏。为区别Android app,kOS app要求编译时多加上_KOS,该宏定义的地方是在Android.mk。注:基于Rose开发时,Rose已在给出的Android.mk中预定义了该宏。
1.2 头文件
/linker/kos/include
--------------------
camera2.h
gui2.h
mediacodec2.h
sys2.h 这4个头文件声明了app调用libkosapi.so时可使用的api。用Rose开发时,它们放在
所有api是C语法,没用C++,而且都有extern "C"修饰。
编译kOS app时,不必向NDK增加或修改任何头文件。
1.3 库文件
/linker/kos/lib
--------------------
libkosapi.so 对app来说,kOS就一个新增库:libkosapi.so。用Rose开发时,它们放在
注:libkosapi.so分32位和64位版本,它们复制于
二、android源码层
2.1 让libkosapi.so成为系统库
须执行两个步骤。1)修改
/system/core/rootdir/etc/public.libraries.android.txt
-----------------
libandroid.so
libc.so
...
libkosapi.so public.libraries.android.txt在设备上的位置是“/etc/public.libraries.txt”。
2.2 libkosapi.so源码(frameworks目录。新增)
源码去实现api时用的是cpp,为保证api能被C代码准确调用,cpp文件中需include相关api的头文件,以确保输出的api是extern "C"。
LOCAL_CFLAGS += -fvisibility=hidden -DNDK_EXPORT='__attribute__((visibility ("default")))'为减少*.so尺寸,让只输出自个希望的api,Android.mk使用了“visibility”,希望输出的api前加上NDK_EXPORT宏。
NDK_EXPORT int gui2_get_surface()2.3 systemserver源码(frameworks目录。新增)
2.4 rose库(system目录。新增,用惯了Rose,从中提取kOS要用到部分,像tfile)
2.5 zygote(frameworks目录。修改)
2.6 其它修改
- CameraService::getCameraServiceProxy()。不再通过IServiceManager,直接返回nullptr。media.camera.proxy服务由Java写的SystemServer实现,等将来改到C++后再放开。
- BatteryService::checkService()。不再通过IServiceManager,直接返回nullptr。batterystats服务由Java写的SystemServer实现,等将来改到C++后再放开。
- CameraService::BasicClient::startCameraOps()。注释掉开始到“mOpsActive = true”(包括它)的代码。AppOpsManager是反调app进行权限判断,它是Jave写的。
/frameworks/native/libs/binder/IServiceManager.cpp中的checkPermission。直接返回true。权限判断等将来实现。

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
