私は.aar
個のAndroidモジュールを生成するためにAndroidスタジオと連携しています。 Javaクラスとメソッドを公開して他のプロジェクトで呼び出すことができます。生成されたスタティック/共有ライブラリをバンドルします。
これらのメソッドの1つは、静的ライブラリで定義され、JNIを通じてJavaから呼び出されるC++メソッドです。
.aar
をインポートして、そのようなメソッドを呼び出すときに、私は "未定義の参照"で挨拶します。 .aar
を解凍して検索すると、Cmakeを使用してAndroidスタジオから生成された静的/共有ライブラリのトレースが含まれていないことがわかります。
これをどのように修正できますか?ライブラリーを生成CMakeLists.txtの
内容:
cmake_minimum_required(VERSION 3.4.1)
set(GCC_COVERAGE_LINK_FLAGS "--whole-archive")
# Find the android-log library for debug purposes
find_library(log-lib log)
# Set directory variables
set(LIBS_DIR ${CMAKE_SOURCE_DIR}/libs)
set(SRC_DIR ${CMAKE_SOURCE_DIR})
# Compiles the static transaction library from sources
add_library(code-logic
STATIC
${SRC_DIR}/src/CustomAPI.cpp
${SRC_DIR}/src/ParameterAPI.cpp)
include_directories(${SRC_DIR}/inc/)
# Compiled native-lib from native cpp source code
add_library(native-lib SHARED src/main/cpp/native-lib.cpp)
# Link it with android-log and transaction-logic
target_link_libraries(native-lib
code-logic
log )
私は図書館が実際にProjectDirectory/app/.externalNativeBuild/cmake/release/${ARCH}/libs/${ARCH}/lib.so
で生成されていることがわかりますが、彼らはintermediates/
フォルダまたは任意の場所に作ら.aar
には表示されません。
(limmodule /構築/出力/ AARに)AAR FILAに共有ライブラリを構築し、バンドルに、それはGradleのを実行するのに十分だ** bundleRelease **タスク(または** bundleDebugは**お望みならば)。しかし、これは静的ライブラリでは機能しません。 –
ありがとう、私は明日見てみましょう! – Nepho
@AlexCohn:私はそれを試しましたが、生成された '.aar'は、ビルドプロセス中に生成されていても何らかの理由でライブラリを含んでいません。私は実際にそれを説明することはできません...私は私のマニュアルビルディングスクリプトソリューションに固執すると思います – Nepho