在Android Studio 3.0中构建饼图和非饼图可执行文件

在Android Studio 3.0中构建饼图和非饼图可执行文件,android,android-studio,gradle,cmake,android-ndk,Android,Android Studio,Gradle,Cmake,Android Ndk,作为构建的一部分,我的Android项目应该生成本机可执行文件,并支持API 14(Android 4.0)中的所有设备。 问题是4.0只支持非饼图可执行文件,而Android>5.0只支持饼图可执行文件。这意味着我应该同时生成饼图和非饼图可执行文件,而在我当前的设置(Android Studio 3.0、NDK r16、llvm-5.0)中,我找不到任何合适的方法来实现这一点。 我在CMakeLists.txt文件中为Android Studio 2.3和NDK r15使用了以下变通方法: a

作为构建的一部分,我的Android项目应该生成本机可执行文件,并支持API 14(Android 4.0)中的所有设备。 问题是4.0只支持非饼图可执行文件,而Android>5.0只支持饼图可执行文件。这意味着我应该同时生成饼图和非饼图可执行文件,而在我当前的设置(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
    )
此黑客不再在AS 3.0和NDK r16上工作-它只在我的
minSdkVersion
设置为14时生成非饼图二进制文件,或者仅在我显式地将
-DANDROID\u pie=on
参数传递给cmake时生成饼图二进制文件

我发现在一个版本中嵌入pie和非pie版本的唯一方法是创建两个相同的Android库模块,在它们的
build.gradle
文件中使用不同的
-DANDROID\u pie
参数值,并使应用模块依赖于它们。它确实可以工作,但配置和构建时间比现在慢了一倍多。我有三个项目(应用程序本身和两个模块)。 如果您有任何关于解决此问题的想法,我们将不胜感激。

我回答了我们的问题,但为了完整起见,请在这里包括:

此黑客不再在AS 3.0和NDK r16上工作-它只在我的
minSdkVersion
设置为14时生成非饼图二进制文件,或者仅在我显式地将
-DANDROID\u PIE=on
参数传递给CMake时生成饼图二进制文件

我真的不明白你的方法是怎么起作用的<代码>-DANDROID_PIE作为预处理器定义,不会改变任何内容。您要做的是为with pie可执行文件设置
-fPIE
cflag和
-pie
ldflag


或者,您可以将
minSdkVersion
最多增加到16。这些天几乎没有剩下任何ICS设备了,我怀疑剩下的很多设备只是被用作闹钟和电视遥控器。

>我真的不明白你的方法是如何工作的-你说得对,恐怕没有:我在“工作”之后将设置更新为3.0/r16-可能,我认为这是个错误。然而,你的方法似乎奏效了——非常感谢!