实验环境
VirtualBox + Ubuntu12.04 32bit + linux-3.10.103内核
这次编译的是32位的内核,因此64-bit kernel
一项不能选中,而且一般将内核源码放置在/usr/src
目录下。
编译命令make
执行完之后,会产生核心bzImage
和可加载模块modules
。
接着是安装过程:
回调机制就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法。下面结合经典的例子进行说明:
动态加载可以用来进行插件开发,这些插件大概都是为了在一个主程序中实现比较通用的功能,使主程序具有可扩展性。实现原理是实现一套插件接口,把插件实现编成apk或dex,在运行时用DexClassLoader动态加载进来。
预备知识:Android中的动态加载机制
忘了说我的运行环境是Ubuntu14.04,vim,gcc version 4.8.4,操作系统和编辑器没什么要紧,gcc如果版本低了可能不支持C++11。
编译运行方法如下:
1 | $ g++ -std=c++11 -o test test.c |
下面的方法是基于编译完Android系统源码之后,再另外下载Linux内核进行编译调试的。我在编译Android6.0.1源码,烧录到nexus5真机上这篇文章中编译的是lunch 8
,即aosp_hammerhead-userdebug,但是用emulator
启动模拟器时,需要用模拟器版本的编译lunch 1
,即aosp_arm-eng。