【发布时间】:2017-12-19 15:09:13
【问题描述】:
我的 Android 项目应生成本机可执行文件作为构建的一部分,并支持 API 14 (Android 4.0) 的所有设备。 问题是 4.0 仅支持非 pie 可执行文件,而 Android > 5.0 仅支持 pie 可执行文件。这意味着我应该同时生成 pie 和非 pie 可执行文件,并且在我当前的设置(Android Studio 3.0、NDK r16、llvm-5.0)中找不到任何合适的方法来实现这一点。 我在我的 CMakeLists.txt 文件中对 Android Studio 2.3 和 NDK r15 使用了以下解决方法:
add_executable(hello
src/main/cpp/main.cpp
)
add_executable(hello-nonpie
src/main/cpp/main.cpp
)
target_compile_definitions(hello
PRIVATE
-DANDROID_PIE=ON
)
target_compile_definitions(hello-nonpie
PRIVATE
-DANDROID_PIE=OFF
)
此 hack 不再适用于 AS 3.0 和 NDK r16 - 它仅在我的 minSdkVersion 设置为 14 时生成非 pie 二进制文件,或者仅当我将 -DANDROID_PIE=ON 参数明确传递给 cmake 时才生成 pie 二进制文件。
我发现在一个构建中嵌入 pie 和非 pie 版本的唯一方法是创建两个相同的 Android 库模块,在它们的 build.gradle 文件中具有不同的 -DANDROID_PIE 参数值,并使应用程序模块依赖于它们。它确实有效,但减慢了配置和构建时间的两倍多,因为现在我没有一个而是三个项目(应用程序本身和两个模块)。
任何有关解决此问题的想法将不胜感激。
【问题讨论】:
标签: android android-studio gradle cmake android-ndk