关闭

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

标签: android
255人阅读 评论(0) 收藏 举报
分类:

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


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1374次
    • 积分:34
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条
    文章存档
    最新评论