kOS不是一个全新操作系统,它基于Android。编译kOS app须要android NDK,版本至少是16b,至于android SDK则不须要了。

一、app层

1.1 预定义宏:_KOS

Android.mk
--------------------
LOCAL_CFLAGS += -D_KOS

kOS用Android NDK编译,于是kOS app继承了编译Android app时所有预义宏。为区别Android app,kOS app要求编译时多加上_KOS,该宏定义的地方是在Android.mk。注:基于Rose开发时,Rose已在给出的Android.mk中预定义了该宏。

1.2 头文件

<apps-src>/linker/kos/include
--------------------
camera2.h
gui2.h
mediacodec2.h
sys2.h

这4个头文件声明了app调用libkosapi.so时可使用的api。用Rose开发时,它们放在<apps-src>/linker/kos/include目录。

所有api是C语法,没用C++,而且都有extern "C"修饰。

编译kOS app时,不必向NDK增加或修改任何头文件。

1.3 库文件

<apps-src>/linker/kos/lib
--------------------
libkosapi.so

对app来说,kOS就一个新增库:libkosapi.so。用Rose开发时,它们放在<apps-src>/linker/kos/lib目录。注:基于Rose开发时,Rose已在给出的Android.mk中用“-L”链接了libkosapi.so。

注:libkosapi.so分32位和64位版本,它们复制于<aosp>/out/target/product/<device>/system/lib或lib64。

二、android源码层

2.1 让libkosapi.so成为系统库

须执行两个步骤。1)修改<aosp>/build/target/product/base.mk,让把libkosapi.so放入设备的/system/lib。2)修改public.libraries.android.txt,让成为系统库,即在调用android_init_namespaces时,public_libraries会有libkosapi.so。

<aosp>/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目录。新增)

<aosp>/frameworks/native/include/kosapi。头文件。

<aosp>/frameworks/native/libs/kosapi。cpp文件。

源码去实现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目录。新增)

<aosp>/frameworks/native/include/kos。头文件。

<aosp>/frameworks/native/services/systemserver。systemserver的cpp文件。

2.4 rose库(system目录。新增,用惯了Rose,从中提取kOS要用到部分,像tfile)

<aosp>/system/core/include/rose。头文件。

<aosp>/system/core/librose。rose库cpp。

2.5 zygote(frameworks目录。修改)

<aosp>/frameworks/base/cmds/app_process。

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写的。
  • <aosp>/frameworks/native/libs/binder/IServiceManager.cpp中的checkPermission。直接返回true。权限判断等将来实现。
kOS和Android源码树区别

android r 编译找不到头文件_kOS(1):编译相关推荐

  1. Linux 编译找不到头文件

    Linux下使用gcc编译找不到头文件,但是查看 系统头文件件存放目录 /usr/local/include 发现头文件确实存在, 这是为什么呢? 这是因为Linux下的默认头文件路径  不包含 /u ...

  2. android r 编译找不到头文件_嵌入式开发之交叉编译程序万能命令_以freetype为例...

    6.4 交叉编译程序:以freetype为例 使用buildroot来给ARM板编译程序.编译库会很简单, 以后系统讲解buildroot时再使用buildroot. 现在我们还是手工交叉编译free ...

  3. linux gcc 编译找不到头文件,找不到库

    找不到头文件 解决方式 (头文件均为编译时刻使用) 1.把头文件路径写成绝对路径,把路径写全,如 (相对路径也行) #include "/usr/include/stdio.h" ...

  4. android r 编译找不到头文件_「投稿」iOS逆向——砸壳与反编译

    作者:疯狂的蛋神 近来对iOS逆向十分感兴趣,就在业余时间里自己在上网找了各种资料学习,发现许多资料对于一些细节描述的不够详细,所以也踩了很多坑,我也将自己踩的一些坑总结出来,希望对大家有所帮助. 注 ...

  5. 当Android工程中提示你找不到头文件,但你已经设置头文件路径了

    虽然在Android.mk文件中,配置了LOCAL_C_INCLUDES路径,但是工程中的红色叉号一直提示找不到头文件 这时,你在工程树目录中展开Includes项,捣鼓捣鼓,重新build下,或许就 ...

  6. 10.29 工作笔记 ndk编译C++,提示找不到头文件(ndk-build error: string: No such file or directory)...

    ndk编译C++.提示找不到头文件(ndk-build error: string: No such file or directory) 被这个问题弄得愁眉苦脸啊.心想为啥一个string都找不到呢 ...

  7. IAR 编译时找不到头文件的解决方法

    IAR 编译时找不到头文件的解决方法 参考文章: (1)IAR 编译时找不到头文件的解决方法 (2)https://www.cnblogs.com/kunx/p/9248106.html 备忘一下.

  8. xcode引入sdk_解决Xcode引入第三方SDK找不到头文件

    一,引入第三方sdk时找不到头文件问题: 我在mac mini,Xcode6.x的环境下引入了第三方SDK,同Xcode自带的framework同放在工程的Frameworks路径下,想在代码中使用第 ...

  9. C++找不到头文件问题

    在我们直接运行github上面下载下来的项目时,难免会出现很多奇怪的问题. 其中的一个问题就是找不到头文件 但是我们明明可以手动在文件夹中找到这些头文件的位置,为什么编译器他就是找不到呢? 这是因为编 ...

最新文章

  1. 吉林大学不如温州大学,泰晤士最新世界大学排名惹争议
  2. sql中set命令解析
  3. 一种怪异的节点删除方式
  4. Linux:几个重要的文件处理命令
  5. ASP.NET Core之跨平台的实时性能监控(2.健康检查)
  6. eclipse中tomcat能正常启动,在浏览器中不能打开问题
  7. TCP程序流程及服务器客户端
  8. 理解lambda在linq中的应用
  9. qt 3d迷宫游戏_《加雷利亚的地下迷宫与魔女的旅团》最新情报公布
  10. Python练习:平方值格式化
  11. Day27:threading模块
  12. 如何在本地使用markdown进行博客编辑
  13. 论文阅读笔记(十一)——Mobilenet-SSDv2: An Improved Object Detection Model for Embedded Systems
  14. 实习成长之路——SpringBean一:BeanDefinition元信息有什么?除了Bean名称和类型,还有那些Bean的元信息值得关注?
  15. android 炫飞 打印机,手机拍照打印机推荐 佳能炫飞CP1200打印机介绍【详解】
  16. 笔记44-JQuery高级笔记
  17. html 调用es2015模块,给大家分别介绍一下CommonJS和ES2015的import
  18. 计算机找不到海信电视,如何设置海信电视投屏 海信电视投屏设置方法【详解】...
  19. 解绑数字身份,解锁新玩法与构建方式(下)
  20. 云顶之弈怎么防止被机器人拉_云顶之弈:只有钻石玩家才知道的12个小技巧,都是干货!...

热门文章

  1. c语言memset清空指向数组的指针_C语言中数组和指针的关系
  2. mysql数据库管理文件_数据库管理中文件的使用_MySQL
  3. 从AndroidStudio同步上传项目代码到GitHub
  4. MySQL三大范式详解(小白也能懂哦)
  5. python缩进编码教程_python基础语法教程:行与缩进
  6. 4.1.6 OS之文件的基本操作原理(创建、删除、打开、关闭、读-写)
  7. linux实时信号与sigqueue函数编程实例
  8. QT下 cannot find -IGL的解决办法
  9. openssl / vs2019 编译 openssl 1.0.2u 过程说明
  10. 乐鑫代理启明云端分享|ESP32系列教程之三: VS Code远程连接Linux