本人最近要移植一部分C++的源码到Android源码中,比如3D引擎的开源代码,供上层绘制使用,不是纯应用的java代码,请问
1、这部分代码移植到Android源码中得哪个目录
2、mk文件需要做哪些改变?
3、生成后的.so文件在哪里
4、最后生成烧机文件时怎样会自动生在/system/lib目录下大牛们请指点
1、这部分代码移植到Android源码中得哪个目录
2、mk文件需要做哪些改变?
3、生成后的.so文件在哪里
4、最后生成烧机文件时怎样会自动生在/system/lib目录下大牛们请指点
解决方案 »
- Dlna 怎么实现推送手机屏幕(镜像)
- 送分 android 平台下如何开发office
- Android使用了哪几个类实现把资源XML文件当中的资源标识符转换成相类型应识符资源对象的?
- 视频流和音频流合并要什么技术
- 如何设置LinearLayout的长宽和位置???????
- 加载main Activity之前,添加载入页面
- android1.6版本的东西转到1.5版本的问题
- 关于opengl在android平台上运行效率,帮忙看下
- android输入法输入音调
- 新手求助!关于spinner onItemSelected函数里的ID问题
- [求助LinearLayout]为什么添加两个textview显示不出来
- ActionBar如何在开始时不显示
邮箱:[email protected]。辛苦念茜!
放在external/下是比较规矩的做法2、mk文件需要做哪些改变?
这个要具体情况具体分析了……3、生成后的.so文件在哪里
out/下的system/lib/4、最后生成烧机文件时怎样会自动生在/system/lib目录下
具体原因需要细细分析build/envsetup.sh 你愿意自己学习探究下吗哈哈……至于英文资料,我很抱歉里面涉及了一些项目保密信息,所以……
不过,android下c++是有缺陷的:比如exception,虚函数的支持等等,望君三思。
2.根据原来makefile的写法,改成android.mk的写法,但是如果原来是automake的就有点麻烦
4.在android.mk里面加入#include BUILD_LIBRARY好像直接就默认放到system/lib/下
上面说错了,应该是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的格式,填好就行了
1.放在哪个目录下并不重要,遵照习惯固然好,但也可以放在其他目录下
2.mk文件和makefile的道理是一样,只是google精简了它,但是目标,依赖,规则这三要素还是存在,你编译的目标要指定,依赖的共享库,静态库要指定,头文件路径要加入,必要的编译选项,链接选项需具备,编译规则只要include google预定义的那几个变量就可以
3. 生成后的so文件在哪在你编译完之后会有提示,你不必纠结它在哪,只要它最后出现在你的烧机文件系统里就ok,你可以手动拷贝到烧机用的根文件系统的某一目录下
4. 通常so库是出现在/system/lib下,但你也可以不放在这一目录,随便某一目录都行,只是别忘了在init.rc里指定LD_LIBRARY_PATH这个环境变量的地方加上这个目录。这是链接库路径的一个环境变量,你只要保证系统能找到你的库就行
恩,这个看懂了,就是扫描所有的Android.mk文件。然后由 /Build 目录下的若干定义好的mk文件来统筹编译
“编译的目标,依赖的共享库,静态库,头文件路径,编译选项,链接选项,编译规则” 这些makefile的结构和规则正在熟悉中。多谢!