2016-04-21 97 views
1

我现在将C++库移植到Android。我已经完成了初始工作,并以Application.mk/Android.mk方式构建。如何使用Android Studio + Gradle + NDK构建外部C++库?

即将推出的Java库演示应用程序正在Android Studio中开发。我可以一起构建一切(演示+库) - 感谢StackOverflow社区。

但是我无法访问这些构建中的本机调试。但是调试是必要的 - 图书馆还不够稳定。纯控制台GDB调试现在需要很多时间,并且将来可能会消耗更多时间。

因此,我决定使用Android Studio和Gradle构建使用集成调试器。

我有专用库模块与NDK和Java(包装)部分。 但是,C/C++源文件不在jni /子目录下。它们位于另一个目录中。

因此,我可以配置Gradle从该目录获取源代码。 我试过像这样:

apply plugin: 'com.android.model.library' 

model { 
android { 
    compileSdkVersion = 23 
    buildToolsVersion = "23.0.2" 

    defaultConfig.with { 
     minSdkVersion.apiLevel = 10 
     targetSdkVersion.apiLevel = 23 
     versionCode = 1 
     versionName = "1.0" 
    } 

    ndk { 
     moduleName = "inttalksdk" 
     stl "gnustl_shared" 
     cppFlags.add("-std=c++11") 
     cppFlags.add("-fexceptions") 
     ldLibs.addAll(['log']) 
    } 
} 

android.sources { 
    main.jni.source { 
     srcDirs.add(["src"]) 
    } 
} 


android.buildTypes { 
    release { 
     minifyEnabled = false 
     proguardFiles.add(file('proguard-android.txt')) 
    } 
} 
} 

但是AS无法同步项目。 错误消息:

Gradle 'Android' project refresh failed 
Error:Attempt to read a write only view of model of type 'java.lang.Object' given to rule 'android.sources { ... } @ inttalksdk/build.gradle line 24, column 5' 

我真正的问题是:如何添加这些外部C/C++文件到摇篮建?

我使用最新的AS 2.0 + 0.7.0 beta3实验性插件。

请帮忙。

回答

1

问题出在0.7.0-beta3的实验性插件上。我恢复到0.6.0版本。 这句法是确定的:

android.sources { 
    main { 
     jni { 
      source { 
       srcDir "${project.ext.inttalksdk}/src/Components/Util/" 
      } 
     } 
    } 
+0

你也可以添加C++代码库,然后执行'编制项目(“:我-JNI代码”)' –

+0

谢谢!但最后我转向了CMake支持 - 它为我节省了几个小时。 – Dmytro