web-dev-qa-db-ja.com

ビルドAndroid Cmakeを使用したNDKプロジェクト

AndroidネイティブアプリケーションをAndroid NDKとCmakeで生成したいので、 Android-cmake をダウンロードしました=ツールチェーン。

Cmakeはプロジェクトを正常に生成しますが、generateディレクトリに移動して「make」を実行しようとすると、次のエラーが発生します。

-- Configuring done
-- Generating done
-- Build files have been written to: /Users/ldz/Desktop/myProject
[  1%] Building CXX object Project/src/Main/Core/CMakeFiles/Core.dir/Main/Main.cpp.o
arm-linux-androideabi-g++: error: unrecognized command line option '-stdlib=libc++'

ここで何が問題なのかわかりません。私のプロジェクトはC++ 11を使用しています。これが、私のg ++ --versionの結果です。

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.0 (clang-500.2.76) (based on LLVM 3.3svn)
Target: x86_64-Apple-darwin12.5.0
Thread model: posix

ありがとう!

13
LongDuZboub

Cmakeを使用してAndroid NDKプロジェクトをビルドし、APKを作成するには、次のようにする必要があります。

  • Android-cmakeを使用する代わりに、 taka-no-meからのフォーク を使用する必要があります。
  • 次に、 pixellightのApk.cmake を使用します。このリポジトリから[AndroidManifest.xml.in、LoadLibraries.Java.in、strings.xml.in]もコピーします。
  • このようなCMakeLists.txtを持っています:
    cmake_minimum_required(VERSION 2.8.3)project(testBuilder)include( "Apk.cmake" REQUIRED)include_directories($ {Android_NDK}/sources/Android/native_app_glue)set(TEST_SRC $ {Android_NDK} /sources/Android/native_app_glue/Android_native_app_glue.csrc /Main.cpp)set(CMAKE_CXX_FLAGS "$ {CMAKE_CXX_FLAGS} -std = c ++ 0x -ffor-scope -fno-rtti -fno-exceptions -pipe -ffunction-sections -fdata-sections -ffast-math -Wnon-virtual -dtor -Wreorder -Wsign-promo -fvisibility = hidden -fvisibility-inlines-hidden -Wstrict-null-sentinel -Os -funroll-all-loops -fpeel-loops -ftree-vectorize ")set(LINKER_FLAGS" $ {LINKER_FLAGS} -Wl、-必要に応じて-Wl、-gc-sections -Wl、-no-undefined -Wl、-strip-all -Wl、-rpath-link = $ {Android_NDK_SYSROOT}/usr/lib /- L $ {Android_NDK_SYSROOT}/usr/lib/")add_library(test SHARED $ {TEST_SRC})target_link_libraries(test log Android)set_target_properties(test PROPERTIES COMPILE_DEFINITIONS" Android ")set(APP_SHARED_LIBRARIES $ {LIBRARY_OUTPUT_PATH} /libtest.so)Android_テスト "$ {CMAKE_BINARY_DIR}/apk" "$ {APP_SHARED_LIBRARIES} "" ""データ ")

これはMain.cppです

#include <Android_native_app_glue.h>
#include <Android/log.h>

#define APPNAME "TestApp"

void Android_main(struct Android_app* state)
{
    app_dummy(); // Make sure glue isn't stripped

    __Android_log_print(Android_LOG_INFO, APPNAME, "HolyShit you did it !");

    ANativeActivity_finish(state->activity);
}
18
Vi.

Vi.:sの回答に基づいて、githubでAndroid-cmakeのクローンを作成し、Android.apk.cmakeという変更されたApk.cmakeを追加しました。 pixellight:sLoadLibraries.Javaの代わりにNativeActivityを使用します。

クローンはここにあります: https://github.com/Discordia/Android-cmake

Vi.:sの回答で例を作成しました: https://github.com/Discordia/Android-cmake-example

6
Robert Sjödahl