2

Я построил несколько пробных С и С ++ программ с использованием Gradle следующего these examplesандроид студии экспериментальной NDK с библиотекой

Я также был в состоянии настройки андроида студии с экспериментальными функциями для построения андроид проекта призывающего нативные функций с помощью this answer

Я знаю, что я могу построить этот проект с помощью android.useDeprecatedNdk=true

и предоставить свой файл android.mk для андроида студии, чтобы собрать и построить приложение.

Возможно ли с помощью экспериментальной функции построить эту же программу? Этот проект построен с помощью CMAKE, и есть некоторые шаги компиляции, которые выводят файлы, которые необходимо связать. ndk-build создает эти файлы, но я не могу найти способ сделать это с помощью экспериментальных функций Android.

Я пытаюсь проверить цели и построить нетривиальный пример построения более сложного проекта. Я решил попытаться построить the zlib library.

Вот мой build.gradle

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

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

     defaultConfig.with { 
      applicationId = "me.test.testnative_exp" 
      minSdkVersion.apiLevel = 10 
      targetSdkVersion.apiLevel = 23 
      versionCode = 1 
      versionName = "1.0" 

      buildConfigFields.with { 
       create() { 
        type = "int" 
        name = "VALUE" 
        value = "1" 
       } 
      } 
     } 
    } 

    compileOptions.with { 
     sourceCompatibility=JavaVersion.VERSION_1_7 
     targetCompatibility=JavaVersion.VERSION_1_7 
    } 

    android.ndk { 
     moduleName = "hello-jni" 
     cppFlags += "-I${file("src/main/jni/zlib")}".toString() 
     stl   = "stlport_static" 
    } 

    android.buildTypes { 

     release { 
      minifyEnabled = false 
      proguardFiles += file('proguard-rules.pro') 
     } 
    } 

    android.sources { 
     main { 
      java { 
       source { 
        srcDir 'src' 
       } 
      } 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:23.0.1' 
    compile 'com.android.support:design:23.0.1' 
} 

моя структура проекта

app/ 
build/ 
libs/ 
src/ 
src/main/testActivity.java 
jni/zlib <- the zlib folder is the one that I downloaded from the zlib website. 
jni/hello-jni.c 

После синхронизации с build.gradle я получаю ошибку ссылку на заголовок в файле: infbak9.c не удалось найти #include "zutil.h"

но оба файла находятся в каталоге zlib под jni.

Можно ли использовать экспериментальную сборку ndk для студии Android для компиляции этого проекта?

ответ

0

есть хороший проект в github, я использую его структуру в шахте, это хороший пример для начала «как использовать экспериментальный (v_0.4.0) плагин в сложном проекте?» :

https://github.com/frogermcs/FlatBuffs

* есть Zlib в андроиде НКА, просто добавьте соответствующий cflag и ldLibs.add("z") в Gradle. и в вашем родном коде include <zlib.h>

и хорошая экспериментальная Gradle конфигурации от Google: https://github.com/googlesamples/android-ndk/blob/229cbe86238d401bb06166b8dfadec8198532589/native-codec/app/build.gradle

0

вы можете проверить этот репозиторий для группы образцов:
https://github.com/googlesamples/android-ndk

Ваш вопрос может быть в состоянии неподвижная добавив что-то как [из образца чайника]:
cppFlags.addAll (['- I' + "$ {ndkDir}/sources/android/cpufeatures", '- I' + file ('src/main/jni/ndk_helper ')])

просто замените каталог своим собственным путем «zutil.h» и т. Д., Вы также можете использовать последнюю версию эксперимента с градиентом, чтобы упростить ваш скрипт - например, удалить «.with» для defaultConfig.with, удалить раздел версии java 7 (последняя студия Android может обрабатывать java 8), те ".toString() «вещь также многословна, поэтому образцы изменили стиль на использование« + »[это не проблема для вашей ошибки сборки, хотя]