Сгенерировать файл .so в Android Studio

Я знаю, что есть ответы, связанные с этим, но они старые и устаревшие. Я получил Android Studio 1.3 и уже загрузил Android NDK. Когда я запускаю приложение, он сбой и возвращает findLibrary returned null в Logcat . Я понял, что это связано с отсутствием файла .so библиотеки (исправьте меня, если я ошибаюсь). Мой вопрос: как создать файл .so в Android Studio?

Что у меня есть –

  • Android Studio 1.3 Стабильная версия
  • Грейдл 1.5
  • Android Experimental Plugin 0.2

Обратите внимание: если файл .so должен быть создан из Cygwin или CMD , скажите мне, как это сделать.

Solutions Collecting From Web of "Сгенерировать файл .so в Android Studio"

Для того, чтобы NDK подключился к Android Studio, необходимо выполнить несколько шагов. В настоящее время поддержка отмечена как экспериментальная, и AS начинает связывать возможность загрузки NDK в среде IDE. По умолчанию AS использует общие Android.mk и Application.mk когда источник и / или библиотеки размещаются в папке jniLibs или jniLibs . Приведенные ниже инструкции переопределяют эти значения по умолчанию, чтобы обеспечить дополнительную возможность настройки.

Короче говоря, вам необходимо:

  1. Создайте jniLibs и jniLibs по умолчанию для своих источников и библиотек.
  2. Сообщите Android Studio, где можно найти цепочку сборки NDK
  3. Скажите gradle, как скомпилировать и где разместить ваши библиотеки
  4. Создайте файл Android.mk чтобы указать порядок построения и привязки
  5. Создать источник

Создание каталогов

Внутри /app/src/main создайте каталог jniLibs и jniLibs .

Обновить local.properties

Внутри файла local.properties добавьте строку, похожую на:

ndk.dir=/home/nathan/development/bin/android-ndk-r10e

Обновить build.gradle

Это относится к уровню модуля, а не к уровню приложения. Это гарантирует, что мы определили путь сборки на шаге выше и удалим возможность Android Studio автоматически вызывать ndk-build. Используйте следующий пример в качестве руководства.

 apply plugin: 'com.android.model.application' model { android { compileSdkVersion = 23 buildToolsVersion = "23.0.0" defaultConfig.with { applicationId = "com.example.hellojni" minSdkVersion.apiLevel = 4 targetSdkVersion.apiLevel = 23 } } compileOptions.with { sourceCompatibility=JavaVersion.VERSION_1_7 targetCompatibility=JavaVersion.VERSION_1_7 } /* * native build settings */ android.ndk { moduleName = "hello-jni" /* * Other ndk flags configurable here are * cppFlags += "-fno-rtti" * cppFlags += "-fno-exceptions" * ldLibs = ["android", "log"] * stl = "system" */ } android.buildTypes { release { minifyEnabled = false proguardFiles += file('proguard-rules.txt') } } android.productFlavors { // for detailed abiFilter descriptions, refer to "Supported ABIs" @ // https://developer.android.com/ndk/guides/abis.html#sa create("arm") { ndk.abiFilters += "armeabi" } create("arm7") { ndk.abiFilters += "armeabi-v7a" } create("arm8") { ndk.abiFilters += "arm64-v8a" } create("x86") { ndk.abiFilters += "x86" } create("x86-64") { ndk.abiFilters += "x86_64" } create("mips") { ndk.abiFilters += "mips" } create("mips-64") { ndk.abiFilters += "mips64" } // To include all cpu architectures, leaves abiFilters empty create("all") } } 

Android.mk

Вам понадобится файл Android.mk каталоге /app/src/main/jni

 LOCAL_PATH := $(call my-dir) # Builds a dylib out of test.cpp include $(CLEAR_VARS) LOCAL_MODULE := test LOCAL_SRC_FILES := test.cpp LOCAL_LDLIBS := -llog include $(BUILD_SHARED_LIBRARY) 

test.cpp

Добавьте некоторый удивительный исходный код C / C ++ для вашей библиотеки. Эти файлы начнутся в /app/src/main/jni и будут скомпилированы и связаны как указано в вашем Android.mk

Пример файла

 #include <jni.h> #include <android/log.h> static const char *SOME_TAG = "MyAwesomeTag"; extern "C" { void Java_com_something_something_1android_ClassName_some_fn(JNIEnv *env, jobject obj) { __android_log_print(ANDROID_LOG_VERBOSE, SOME_TAG, "Hello from NDK :)"); } } // End extern 

Скомпилируйте и запустите.

Более года спустя с Android Studio 2.2 и выше вы можете получить все это для вас бесплатно, просто выбрав «Включить поддержку C ++» при создании нового проекта.

Для получения дополнительной информации посетите: https://developer.android.com/studio/projects/add-native-code.html .