SDL中文论坛

标题: Android Studio(2.0) [打印本页]

作者: ancientcc    时间: 2016-5-13 23:05
标题: Android Studio(2.0)
Android的JNI开发主要有两种情况:一种是使用已经编译好的.so动态库(自用自写的Android.mk);一种是使用c/c++源代码开发(由gradle自动生成Android.mk),现阶段Rose是使用第一种方法。主要原因是第二种生成的“LOCAL_C_INCLUDES”会使编译变复杂并可能失败。

LOCAL_C_INCLUDES是Android.mk中可容许字段,指示C/C++可搜索的头文件目录。用gradle生成时,它不灵活是次要的,更重要是可能造成编辑失败。

举个例子,build.gradle有这样语句。
  1. android {
  2.         sourceSets.main {
  3.                 jni.srcDirs = ['src/main/jni',
  4.                         '../../src-test']
  5.         }
  6. }
复制代码
由它生成的Android.mk是以下语句。
  1. LOCAL_SRC_FILES := \
  2.         C:\ddksample\MyApplication\app\src\main\jni\myCode.cpp \
  3.         C:\ddksample\src-test\plugin.cpp \

  4. LOCAL_C_INCLUDES += C:\ddksample\MyApplication\app\src\main\jni
  5. LOCAL_C_INCLUDES += C:\ddksample\src-test
复制代码

从以上看出,gradle会以每个srcDir生成对应一个LOCAL_C_INCLUDES,当项止存在同名头文件时,rose中就存在不少同名头文件,它会造成编译失败。

当然,自写Android.mk缺点是显而易见的,1)不易维护;2)不能调试NDK代码。但在gradle还不成熟情况下,Rose只能继续采用这种方法。





欢迎光临 SDL中文论坛 (http://www.libsdl.cn/bbs/) Powered by Discuz! X3.3