【问题标题】:Which version of NDK should I use with a Titanium Android module?我应该将哪个版本的 NDK 与 Titanium Android 模块一起使用?
【发布时间】:2017-06-02 21:30:50
【问题描述】:

根据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 版本,这似乎很奇怪。我不确定要使用哪个版本。

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2015-04-13
      • 2015-06-18
      • 1970-01-01
      • 2010-12-22
      • 2012-09-22
      • 2016-04-01
      • 1970-01-01
      • 2021-08-26
      • 1970-01-01
      相关资源
      最近更新 更多