在Android Studio 3.0中构建饼图和非饼图可执行文件
作为构建的一部分,我的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使用了以下变通方法:在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
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-可能,我认为这是个错误。然而,你的方法似乎奏效了——非常感谢!