移植C++或者java代码到Android源码的步骤

liufengcool 2011-11-03 10:52:31
本人最近要移植一部分C++的源码到Android源码中,比如3D引擎的开源代码,供上层绘制使用,不是纯应用的java代码,请问
1、这部分代码移植到Android源码中得哪个目录
2、mk文件需要做哪些改变?
3、生成后的.so文件在哪里
4、最后生成烧机文件时怎样会自动生在/system/lib目录下

大牛们请指点

...全文
585 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
liufengcool 2011-11-10
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 challchampion 的回复:]

我的理解:
1.放在哪个目录下并不重要,遵照习惯固然好,但也可以放在其他目录下
2.mk文件和makefile的道理是一样,只是google精简了它,但是目标,依赖,规则这三要素还是存在,你编译的目标要指定,依赖的共享库,静态库要指定,头文件路径要加入,必要的编译选项,链接选项需具备,编译规则只要include google预定义的那几个变量就可以
3. 生成后的so文件在哪在你编译完之后……
[/Quote]

“编译的目标,依赖的共享库,静态库,头文件路径,编译选项,链接选项,编译规则” 这些makefile的结构和规则正在熟悉中。多谢!
liufengcool 2011-11-10
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 cdbdyx 的回复:]

上面说错了,应该是BUILD_SHARED_LIBRARY
另外我想跟你说一下.mk的大概原理,顺便自己也屡一下
.mk只是一个文本,并不是sh脚本
真正负责make工作的在build/下,这里面有真正的Makefile和一些sh脚本
当你在根目录下make时或者mmm时
后台的makefile会递归所有目录,把所有的android.mk包含到makefile文件中来,类似这样
。。。。
frameworks/ex/common/Android.mk
frameworks/base/Android.mk
frameworks/opt/emoji/Android.mk
。。。。

而每个android.mk的写法都是
LOCAL_SRC_FILES:=xxxx
#include BUILD_xxxxxxx

而BUILD_xxxxxxx又可以替换为类似下面的
c_arm_sources := $(patsubst %.c.arm,%.c,$(filter %.c.arm,$(LOCAL_SRC_FILES)))
c_arm_objects := $(addprefix $(intermediates)/,$(c_arm_sources:.c=.o))
c_objects := $(c_arm_objects) $(c_normal_objects)
$(c_objects): $(intermediates)/%.o: $(TOPDIR)$(LOCAL_PATH)/%.c $(yacc_cpps) $(LOCAL_ADDITIONAL_DEPENDENCIES)

所以,最终也就是生成了一个多个target的makefile,跟普通makefile没啥区别

而你要做的就是按照android.mk的格式,填好就行了
[/Quote]

恩,这个看懂了,就是扫描所有的Android.mk文件。然后由 /Build 目录下的若干定义好的mk文件来统筹编译
challchampion 2011-11-09
  • 打赏
  • 举报
回复
我的理解:
1.放在哪个目录下并不重要,遵照习惯固然好,但也可以放在其他目录下
2.mk文件和makefile的道理是一样,只是google精简了它,但是目标,依赖,规则这三要素还是存在,你编译的目标要指定,依赖的共享库,静态库要指定,头文件路径要加入,必要的编译选项,链接选项需具备,编译规则只要include google预定义的那几个变量就可以
3. 生成后的so文件在哪在你编译完之后会有提示,你不必纠结它在哪,只要它最后出现在你的烧机文件系统里就ok,你可以手动拷贝到烧机用的根文件系统的某一目录下
4. 通常so库是出现在/system/lib下,但你也可以不放在这一目录,随便某一目录都行,只是别忘了在init.rc里指定LD_LIBRARY_PATH这个环境变量的地方加上这个目录。这是链接库路径的一个环境变量,你只要保证系统能找到你的库就行
Jay_+wqq_635731323 2011-11-09
  • 打赏
  • 举报
回复
NDK开发,网上例子一把把的。[Quote=引用 20 楼 cdbdyx 的回复:]
引用 14 楼 liufengcool 的回复:

引用 13 楼 yiyaaixuexi 的回复:

1、这部分代码移植到Android源码中得哪个目录
放在external/下是比较规矩的做法

2、mk文件需要做哪些改变?
这个要具体情况具体分析了……

3、生成后的.so文件在哪里
out/下的system/lib/

4、最后生成烧机文件时怎样会自动生在/sys……
[/Quote]
Calon Mo 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 liufengcool 的回复:]

大牛白天不出没么?
[/Quote]

你猜对了,大牛都是凌晨1,2点行动的。
liufengcool 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 yiyaaixuexi 的回复:]

引用 14 楼 liufengcool 的回复:

引用 13 楼 yiyaaixuexi 的回复:

1、这部分代码移植到Android源码中得哪个目录
放在external/下是比较规矩的做法

2、mk文件需要做哪些改变?
这个要具体情况具体分析了……

3、生成后的.so文件在哪里
out/下的system/lib/

4、最后生成烧机文件时怎样会自动生在/sy……
[/Quote]

哎,一声叹息~ 更有后来着无数声叹息。。。
liangpingyy 2011-11-09
  • 打赏
  • 举报
回复
期待大神们的精彩答案!
充电宝111 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 liufengcool 的回复:]

引用 13 楼 yiyaaixuexi 的回复:

1、这部分代码移植到Android源码中得哪个目录
放在external/下是比较规矩的做法

2、mk文件需要做哪些改变?
这个要具体情况具体分析了……

3、生成后的.so文件在哪里
out/下的system/lib/

4、最后生成烧机文件时怎样会自动生在/system/lib目录下
具体原因需要细细分析build……
[/Quote]

上面说错了,应该是BUILD_SHARED_LIBRARY
另外我想跟你说一下.mk的大概原理,顺便自己也屡一下
.mk只是一个文本,并不是sh脚本
真正负责make工作的在build/下,这里面有真正的Makefile和一些sh脚本
当你在根目录下make时或者mmm时
后台的makefile会递归所有目录,把所有的android.mk包含到makefile文件中来,类似这样
。。。。
frameworks/ex/common/Android.mk
frameworks/base/Android.mk
frameworks/opt/emoji/Android.mk
。。。。

而每个android.mk的写法都是
LOCAL_SRC_FILES:=xxxx
#include BUILD_xxxxxxx

而BUILD_xxxxxxx又可以替换为类似下面的
c_arm_sources := $(patsubst %.c.arm,%.c,$(filter %.c.arm,$(LOCAL_SRC_FILES)))
c_arm_objects := $(addprefix $(intermediates)/,$(c_arm_sources:.c=.o))
c_objects := $(c_arm_objects) $(c_normal_objects)
$(c_objects): $(intermediates)/%.o: $(TOPDIR)$(LOCAL_PATH)/%.c $(yacc_cpps) $(LOCAL_ADDITIONAL_DEPENDENCIES)

所以,最终也就是生成了一个多个target的makefile,跟普通makefile没啥区别

而你要做的就是按照android.mk的格式,填好就行了







充电宝111 2011-11-09
  • 打赏
  • 举报
回复
看什么机密资料啊,都不如看android官网的资料
充电宝111 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 yiyaaixuexi 的回复:]

1、这部分代码移植到Android源码中得哪个目录
放在external/下是比较规矩的做法

2、mk文件需要做哪些改变?
这个要具体情况具体分析了……


3、生成后的.so文件在哪里
out/下的system/lib/

4、最后生成烧机文件时怎样会自动生在/system/lib目录下
具体原因需要细细分析build/envsetup.sh 你愿意自己学习探究下吗哈哈……
[/Quote]

2.根据原来makefile的写法,改成android.mk的写法,但是如果原来是automake的就有点麻烦
4.在android.mk里面加入#include BUILD_LIBRARY好像直接就默认放到system/lib/下
抱雪过冬 2011-11-06
  • 打赏
  • 举报
回复
我也遇到这样的问题,需要把2.3的东西移植到2.2,但是依赖太多,求大神给点思路!
念茜 2011-11-06
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 liufengcool 的回复:]

引用 13 楼 yiyaaixuexi 的回复:

1、这部分代码移植到Android源码中得哪个目录
放在external/下是比较规矩的做法

2、mk文件需要做哪些改变?
这个要具体情况具体分析了……

3、生成后的.so文件在哪里
out/下的system/lib/

4、最后生成烧机文件时怎样会自动生在/system/lib目录下
具体原因需要细细分析build……
[/Quote]

擦除这件事我也有想过,可是大致看了下,不是个小工程,哎……擦完了 不剩什么了
liufengcool 2011-11-04
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 yiyaaixuexi 的回复:]

1、这部分代码移植到Android源码中得哪个目录
放在external/下是比较规矩的做法

2、mk文件需要做哪些改变?
这个要具体情况具体分析了……

3、生成后的.so文件在哪里
out/下的system/lib/

4、最后生成烧机文件时怎样会自动生在/system/lib目录下
具体原因需要细细分析build/envsetup.sh 你愿意自己学习探究下吗哈哈……
[/Quote]

我接下来要做得就是:
1、熟悉mk脚本;
2、三思:汝让三思,君不得不思。
3、代11楼和12楼建议:资料的机密位置擦除,共享出来?
念茜 2011-11-04
  • 打赏
  • 举报
回复
1、这部分代码移植到Android源码中得哪个目录
放在external/下是比较规矩的做法

2、mk文件需要做哪些改变?
这个要具体情况具体分析了……

3、生成后的.so文件在哪里
out/下的system/lib/

4、最后生成烧机文件时怎样会自动生在/system/lib目录下
具体原因需要细细分析build/envsetup.sh 你愿意自己学习探究下吗哈哈……

至于英文资料,我很抱歉里面涉及了一些项目保密信息,所以……
不过,android下c++是有缺陷的:比如exception,虚函数的支持等等,望君三思。
jdpxiaoming 2011-11-04
  • 打赏
  • 举报
回复
版主我爱你 麻烦给 爱你的人 也发一份 302940116@qq.com
liufengcool 2011-11-03
  • 打赏
  • 举报
回复
大牛还未现身
wenkebilly 2011-11-03
  • 打赏
  • 举报
回复
求资料,512201267@qq.com,谢谢
sharco 2011-11-03
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 yiyaaixuexi 的回复:]

今天去参加移动开发者大会了
英文资料给你愿意看吗
[/Quote]
羡慕,深圳这种机会好少
liufengcool 2011-11-03
  • 打赏
  • 举报
回复
我愿意!
邮箱:xuan-cool@126.com。辛苦念茜!
[Quote=引用 8 楼 yiyaaixuexi 的回复:]

今天去参加移动开发者大会了
英文资料给你愿意看吗
[/Quote]
念茜 2011-11-03
  • 打赏
  • 举报
回复
今天去参加移动开发者大会了
英文资料给你愿意看吗
加载更多回复(4)

80,357

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧