众所周知android是基于linux开发,如果了解android的底层实现,会知道安卓系统实际上可以说是基于linux的一个"应用层",那么这个"应用层"是否可以运行在普通的linux电脑上呢,答案是肯定的,但目前并没有看到这样的实现。

如果去谷歌或者谷歌上搜索,怎么让android在linux系统上运行,得到的结果大多是通过模拟器,另外还有ARchon、shashlik、Anbox,于是我就去了解一下这几个项目。

ARChon是谷歌退出基于谷歌浏览器的一个插件,安装好安卓应用后就会多出一个浏览器插件,可以夸平台运行,ARchon基于Native Client实现,Native Client目前谷歌已放弃。

ARChon模拟了一个Linux运行环境,供安卓使用,打开插件的压缩包会看到安卓系统的一些.so,这个.so可以在模拟的环境下执行。

关于ARChon有人写过分析文章https://blog.csdn.net/yeshennet/article/details/83048545

Anbox是在linux环境下可用的,是使用容器技术,在容器内运行基于linux的android系统。运行效率比虚拟机高,但不能在windows上运行。

shashlik资料不多,在github上有源码,使用cmake重写编译的文件,通过cmake可以对涉及到的各个模块进行重写编译,看描述一开始以为是编译成可执行文件直接在linux下运行,但实际上运行环境是通过qemu模拟,安卓依赖的binder驱动在shashlik项目也没有找到。不过对于binder驱动有另外的项目在linux系统上实现。

也就说通过修改shashlik有希望在linux上直接运行,而不通过虚拟机。

本人尝试编译过shashlik,其中编译java部分比较容易,生成framework.jar,在windows和linux下都可以编译,涉及到jni部分对linux的依赖较多,在linux下编译比较容易。

在windows本人尝试使用Cygwin64模拟,Cygwin64可以模拟大部分linux的特性,比如pthread,fork之类的,另外也可以安装很多编译时依赖的第三库libgif、icu之类,这些都没有问题,但也有一些功能是没有的,编译时找不到头文件,经过修改之后,最终可以生产libjni.dll以及依赖的dll。

费了很大劲,终于编译成功了,于是新建java工程,导入framework.jar,System.load导入依赖的dll,new pain()看看效果,可惜报错,看错误报告是jni层报的错,于是又想办法调试,进过一番研究,下载CLion之后设置环境为cygwin,调试的问题解决了。

经过调试之后,发现jni层在访问一个变量的时候程序就崩溃,可能是内存溢出了吧,不管这个调用,直接注释掉,然后又发现另外一个错误,错误是在调用icu库里面的函数,我以为是有2个icu版本的原意导致的,改了之后还是不行。

由于问题太多,没有办法只能放弃了,后面肯定还会有各种莫名其妙的问题,编译就已经够麻烦,太费时间。

本来打算是把依赖binder的系统服务都去掉,只保留gui的部分,生成一个jar包(包含jni部分),通过引入这个jar,在windows上可以用安卓的布局方式来编写桌面应用。

跟布局有关计算大小、摆放位置,是按钮、文本框样式这些都是在framework.jar中,涉及到绘图部分就是jni的部分,可以用skia实现,虽然安卓的绘图后来改为opengl,但是skia依然存在,理论上可以通过修改继续使用skia绘图。

因此安卓的一套gui的框架是有希望可以移植的。可惜jni层的代码对linux的依赖太多,如果要在其他的平台上运行,需要改动的地方太多。如果换成linux会容易很多。由于用linux的人比较少,本人并不想在linux下实验,shashlik本身就是基于linux的,虽然使用了qemu,我想去掉qemu也不会太难。

更多内容请关注我的公众号:zhaojiedev

关于android系统的移植相关推荐

  1. Android系统触摸屏移植后出现小圆圈

    移植FT6X系列的触摸屏后,发现系统工作并不能像正常触摸屏那样,而是出现了一个小圆圈,像鼠标一样移动,进过查找相关资料,终于发现出现这种状况的原因是因为Android系统把触摸屏当成触摸板,所以才会出 ...

  2. Android系统的分区及img文件、移植烧写过程

    一.引言 本章介绍Android的几个分区,已经编译后生成的.img镜像文件,对于大家移植整个Android有一定的帮助.本人也首次接触Android,有不正确的地方,欢迎指正! 二.Android的 ...

  3. android2012系统,压倒性份额四核技术 Android系统2012前瞻

    第1页:2012年Android市场繁荣依然 也许你小时候写作文时听语文老师说光阴荏苒还不以为然,但转眼功夫2011年即将落下帷幕,远的不说,仅仅Android市场就用一年的时间完成了过去手机市场用几 ...

  4. Android视频压缩实现,基于Android系统的H.264视频压缩技术实现

    3.2 底层驱动移植模块设计 Android系统本身是一个庞大的系统,移植需要考虑Android系统的硬件抽象层(HAL)和Linux中的相关设备驱动程序.移植的目的就是为了改动较小的内容,支撑较为庞 ...

  5. android 系统源码介绍

    一.系统目录 1.1 系统目录含义 1.2 系统jar作用 Android系统源码目录 system/framework 下各个jar包的用途 am.jar:终端下执行am命令时所需的java库.源码 ...

  6. Android系统移植与调试之-------如何修改Android设备添加重启、飞行模式、静音模式等功能(一)...

    1.首先先来看一下修改前后的效果对比图 修改之后的图片 确认重启界面 具体的修改内容在下一篇中具体介绍. Android系统移植与调试之------->如何修改Android设备添加重启.飞行模 ...

  7. Android系统移植与驱动开发概述

    1.Android系统架构分为四层:linux内核,Android是基于linux内核的. c/c++代码库,包括C/C++编写的代码库,包括dalivk虚拟机的运行时. Android SDK AP ...

  8. Android 系统(33)---sensor移植总结

    Sensor作为Android系统的一个输入设备,对Android设备来说是必不可少的.Sensor主要报告G-Sensor.LightsSensor.ProximitySensor.Temperat ...

  9. android系统硬件OpenGL 3D移植(二)

    通过前面两篇文章:  http://blog.csdn.net/andyhuabing/article/details/7176049 http://blog.csdn.net/andyhuabing ...

最新文章

  1. 【总结】使用Json4s实现Scala对象转Json
  2. [教程]MongoDB 从入门到进阶 (User系统)
  3. python常见错误-新手常见Python错误及异常解决处理方案
  4. SpringFramework4系列之SpringJMS:(一)搭建JMS-注解加XML版
  5. 在 SAP BTP 里使用 SAP HANA Cloud 试用版 Trial Version 的一些限制
  6. vue mint-ui 弹出框
  7. tcp序列号为什么是随机的_译文:每个开发人员应了解的 TCP 知识
  8. 动态规划在求解硬币问题中的应用(JAVA)--币制最大化、找零问题、硬币收集问题
  9. 55 MM配置-评估和科目设置-定义账户分类参考
  10. android欢迎页圆形倒计时,android 欢迎页圆形进度条倒计时功能
  11. 多线程-使线程具有有序性
  12. Android中Fragment生命周期和基本用法
  13. db2离线备份_DB2高危操作LOAD命令风险详解
  14. 平安性格测试题及答案_中国平安EPASS测试题2016年
  15. 图片复印如何去除黑底_如何处理打印出来的图片很黑的情况
  16. iphone屏幕镜像如何全屏_苹果手机投到电视上能全屏嘛 具体怎样投屏呢
  17. Nuc做文件服务器,Intel NUC 安装Windows Server 2016 图解教程
  18. 使用按键精灵实现界面点击自动化
  19. 阿里云超级码力第二场记录
  20. java中new具体意思_java中new是什么意思?

热门文章

  1. wow服务器维护8月14,2008年8月14日维护公告
  2. 阿里妈妈超级搜索接口
  3. 马斯克解释星际飞船原型测试失败:操作失误是主因
  4. win7 flash无法全屏,win7全屏问题
  5. 一建有什么刷题软件,怎么备考?
  6. java删除linux上的文件或文件夹工具类
  7. 公钥 私钥 数字签名 CA证书
  8. WiFi宝和WiFi共享精灵的区别
  9. 三星泰泽Tizen系统挑战Android系统
  10. dubbo客户端的实现