2016-04-21 96 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