想在手机上做一些功能的扩展,本来是想从驱动层入手的,但驱动需要改内核。因为,1,手机自带的内核是没有源码的,没有其中的symbal的支持,自编的内核模块是不能在其下用的。2,自编全部内核因为没有电路的硬件信息,基本上没可能了。所以只能从HAL层去入手了。并且因为MTK的不开源性,从HAL层入手,对MTK手机更适当一些。
这样就要先去了解一下HAL吧。
从示例入手最快。网上找到一个mokoid的示例。这个是个教学示例。https://code.google.com/archive/p/mokoid/ google上的示例下了问题很多,要编译的.mk文件都少。github上找了一个,https://github.com/kangear/mokoid-read-only 这个git clone下来,要编译通的话,要改一些地方。
1,目录结构改一下,{android-source}/mokoid/trunk/{ https://github.com/kangear/mokoid-read-only所见目录}.这是因为其下的文件中对相互引用时。当然改源码也可以。
2,先要android 源码编译过。android源码我下的是4.4.4 r2。因为真机是这个。这个需要oracle jkd.用openjdk通不过。oracle jkd需要的是1.6的版本,ubuntu的apt已不提供下载,自已找个地方下载bin包,解压。在build目录下,生成envjava.sh如下。
#oracle java
export JAVA_HOME=/media/ququ/android/tools/jdk1.6.0_45 #解压的JDK目录。
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin
进入源码目录要编译前,
source ./build/envjava.sh
source ./build/envsetup.sh
3,进入mokoid/trunk
mmm ./
会有一些报错。依提示不难解决。主要是因不编译环境不同,有些目录找不到,改一源码就可。可以单独进入子目录,用mmm ./去单独编译。
4,如上的都不是坑,很快就能过了。直的坑在下到真机去运行。编译时有提示输出的内容,这些就查要下载到手机中的。输出的内容主要在android-source/out/target/product/generic/system/下的目录去找。
5,android-source/out/target/product/generic/system/app