我应该在Titanium Android模块中使用哪个版本的NDK?

时间:2017-06-02 21:30:50

标签: android module android-ndk appcelerator appcelerator-titanium

根据sourcewiki,Titanium需要Android NDK的r9。但在Android archives中,最早的版本是r10e(2015年5月)。目前的版本是r14b。

使用r14b(和r13b)我从ndk-build中得到编译失败,涉及C ++类型不匹配。

[ERROR] /Users/jdee/Library/Application Support/Titanium/mobilesdk/osx/6.1.0.GA/android/native/include/AndroidUtil.h:57:49: warning: format specifies type 'int' but the argument has type 'long' [-Wformat]

我可以使用r10e,r11c和r12b干净地编译模块,但是我对使用不支持的NDK版本发布的东西犹豫不决。 Titanium在2014年也需要NDK版本,这似乎很奇怪。我不确定使用哪个版本。

1 个答案:

答案 0 :(得分:1)

截至今天,同样wiki page讲的是NDK r12,可以从official archive下载。使用较旧的NDK的缺点是依赖于编译器兼容性的细微差别的风险。它需要在各种支持的设备上进行详尽的测试,以证明您使用NDK r16进行构建是正常的。请注意,升级NDK需要一些修复,请参阅https://github.com/appcelerator/titanium_mobile/pull/9926

只要您不需要特定于Oreo及更高版本的本机API,就可以毫无顾虑地使用r12。

如果您的项目涉及无法使用NDK r12构建的其他NDK组件,请记住您可以在一个应用程序中混合单独构建的共享库(具有不同的NDK版本),只要它们不在它们之间共享C ++对象即可。这种感觉就是Titanium v​​8框架是安全的。

这里的一个弱点是共享STL运行时 libc ++ _ shared.so 。您的应用中不能有两个不同版本的版本。对于这种情况,最安全的解决方案可能是将Titanium Application.mk file更改为使用

APP_STL := c++_static