[Android源码开发] Android 4.3的代码迁移到4.4的过程中遭遇的种种问题及解决方法

更新至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函数才能正常生成和使用。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值