我有2个Android NDK模块A和B。B依赖于A,但不能集成在一起,因为B仅与Android 8.1+兼容,并且在构建时需要另一个Android目标。
我使用CMake来构建两者。
在建造B时如何将B链接到A?
我不想手动指定../.../../build/intermediates/cmake/[..]
中某处的相对路径。
add_library( A SHARED IMPORTED )
set_target_properties(A PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/../../../../A/build/intermediates/cmake/debug/obj/${ANDROID_ABI}/libA.so )
target_link_libraries(B A)
是否有一种更清洁的方法?
支持的方法是将所有本机项目放在一个模块中。我知道这不符合您的要求,但想澄清一下,不,实际上没有“正确”的方式来完成您要问的事情。
能够对本机代码具有模块间依赖性是https://issuetracker.google.com/120166563。解决此问题后,您就可以执行您实际想要的操作。
根据您的要求,现在拥有的可能是最好的选择。我对Android Gradle API不太熟悉,但是您也许可以从build.gradle中获取B的A的out目录,并将其作为参数传递给CMake。我认为您可以为此使用https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.CmakeOptions.html#com.android.build.gradle.internal.dsl.CmakeOptions:buildStagingDirectory。