更新至20151121
======== 编译过程 ========
错误一:API不匹配
错误信息:
You have tried to change the API from what has been previously released in
an SDK. Please fix the errors listed above.
错误原因:
current.txt中的API与源码不符。
解决方法:
make update-api
仍然报错,好像libcore和dalvik中修改的API并没有更新,手动更新这些API。再make,成功。
错误二:java版本修改不彻底
错误信息:
忘记记录了。。
错误原因:
java版本修改不完整,只修改了java和javac.
解决方法:
sudo update-alternatives --config javah #javap, javadoc jar等都需修改
错误三:文件权限不足
错误信息:
dalvik/tools/dex-preopt: Permission denied
错误原因:
文件权限不足,无执行权限。
不过感觉好奇怪啊,为什么会没有执行权限?可能与这些代码是从其他机器复制过来的有关?
解决方法:
chmod u+x dex-preopt
======== 运行过程 ========
错误一:无法注册native函数
错误信息:
Unable to register: not native: Ljava/lang/Double; .doubleToLongBits:D(J)
错误原因:
/libcore/luni/src/main/native文件夹下增加了java_lang_Double.cpp,相关内容与/dakvik/vm/native/java_lang_Double.cpp不匹配。
解决方法:
修改/libcore/luni/src/main/native/java_lang_Double.cpp文件的相应部分
错误二:找不到native函数的实现
错误信息:
No implementation found for native Ljava/lang/String;.fastIndexOf:(II)I
错误原因:
原本/libcore/luni/src/main/java/java/lang/String.cpp文件在4.4中不存在,相应内容被存储在了/libcore/libarm和/libcore/libdvm的相应位置。因此native函数的相关实现不匹配。
解决方法:
修改/libcore/libarm和/libcore/libdvm中的相应文件。
关于native函数的小结:
native函数的相关信息大多被存储在/dalvik/vm/native文件夹下,/libcore/luni/src/main/java下和/libcore/luni/src/main/native下,三者必须匹配。而4.4较4.3新增了两个文件夹,分别为/libcore/libarm和/libcore/libdvm,可以看出似乎是将/libcore/luni中的部分类和函数拆分成了arm和dvm两种实现,分别存储在了这两个文件夹中。类似的,相应文件中的内容必须匹配,native函数才能正常生成和使用。