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

解决方案 »

  1.   

    大牛们下班到家,吃完饭,要开始上CSDN了期待中
      

  2.   

    我愿意!
    邮箱:[email protected]。辛苦念茜!
      

  3.   

    版主我爱你 麻烦给 爱你的人 也发一份  [email protected]
      

  4.   

    1、这部分代码移植到Android源码中得哪个目录
    放在external/下是比较规矩的做法2、mk文件需要做哪些改变?
    这个要具体情况具体分析了……3、生成后的.so文件在哪里
    out/下的system/lib/4、最后生成烧机文件时怎样会自动生在/system/lib目录下
    具体原因需要细细分析build/envsetup.sh   你愿意自己学习探究下吗哈哈……至于英文资料,我很抱歉里面涉及了一些项目保密信息,所以……
    不过,android下c++是有缺陷的:比如exception,虚函数的支持等等,望君三思。
      

  5.   


    2.根据原来makefile的写法,改成android.mk的写法,但是如果原来是automake的就有点麻烦
    4.在android.mk里面加入#include BUILD_LIBRARY好像直接就默认放到system/lib/下
      

  6.   

    看什么机密资料啊,都不如看android官网的资料
      

  7.   


    上面说错了,应该是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的格式,填好就行了
      

  8.   

    NDK开发,网上例子一把把的。
      

  9.   

    我的理解:
    1.放在哪个目录下并不重要,遵照习惯固然好,但也可以放在其他目录下
    2.mk文件和makefile的道理是一样,只是google精简了它,但是目标,依赖,规则这三要素还是存在,你编译的目标要指定,依赖的共享库,静态库要指定,头文件路径要加入,必要的编译选项,链接选项需具备,编译规则只要include google预定义的那几个变量就可以
    3. 生成后的so文件在哪在你编译完之后会有提示,你不必纠结它在哪,只要它最后出现在你的烧机文件系统里就ok,你可以手动拷贝到烧机用的根文件系统的某一目录下
    4. 通常so库是出现在/system/lib下,但你也可以不放在这一目录,随便某一目录都行,只是别忘了在init.rc里指定LD_LIBRARY_PATH这个环境变量的地方加上这个目录。这是链接库路径的一个环境变量,你只要保证系统能找到你的库就行
      

  10.   


    恩,这个看懂了,就是扫描所有的Android.mk文件。然后由 /Build 目录下的若干定义好的mk文件来统筹编译
      

  11.   


    “编译的目标,依赖的共享库,静态库,头文件路径,编译选项,链接选项,编译规则”  这些makefile的结构和规则正在熟悉中。多谢!