Мы рады сообщить, что новый выпуск CrystaX NDK 10.3.0 готов к использованию!
Наиболее важные изменения в этом выпуске:
- Новые GCC и LLVM/clang.
- Сильно улучшена поддержка Objective-C v2.
- Добавлена поддержка Python (2.7 и 3.5) для Android.
Кроме этого, починено много ошибок и сделано огромное количество улучшений. Ниже вы можете ознакомиться с более подробной информацией.
В этом выпуске мы добавили новые тулчейны, основанные на gcc-5.3 и llvm-3.7. Старые gcc-4.9 и llvm-3.6 также присутствуют для совместимости, но будут удалены в следующем релизе.
$ $NDK/toolchains/arm-linux-androideabi-5/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --version arm-linux-androideabi-gcc (GCC) 5.3 20151204 Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ $NDK/toolchains/llvm-3.7/prebuilt/linux-x86_64/bin/clang -target armv7-none-linux-androideabi --version clang version 3.7 Target: armv7-none-linux-android Thread model: posix
Мы очень сильно улучшили рантайм Objective-C v2 и это позволило нам включить все языковые возможности современного Objective-C - Automatic Reference Counting, Objective-C Literals syntax и т.д. Также, в этом выпуске мы добавили Objective-C фреймворки CoreData, CoreText, CoreGraphics и CoreVideo, в дополнение к ранее добавленным Foundation и CoreFoundation.
Для вашего удобства был создан пример, показывающий, как можно использовать Objective-C для разработки проекта сразу для iOS и Android.
ВНИМАНИЕ! Все заявленные возможности современного Objective-C v2 доступны только при использовании LLVM/clang. Если вы используете ndk-build, простейшим способом указать это будет добавление следующих строк в Application.mk:
# Application.mk NDK_TOOLCHAIN_VERSION := clang # Or this one, if you want to be explicit regarding version: #NDK_TOOLCHAIN_VERSION := clang3.7
Мы предоставляем собранные бинарники python-2.7 и python-3.5 (исполняемые файлы, библиотеки и заголовочные файлы) для всех поддерживаемых Android ABI. Как и все остальные подобные пакеты в CrystaX NDK, Python был собран из официальных исходников, без единого изменения в его коде. Это прямое следствие нашего подхода: когда что-либо не собирается, мы не правим собираемый код. Вместо этого мы чиним CrystaX NDK, делая поведение нижнеуровневых библиотек соответствуюшим стандартам (POSIX и де-факто стандартам, таким как GNU/Linux).
Python в CrystaX NDK пока находится в экспериментальном состоянии, хотя он и работает довольно хорошо, насколько мы видим. Тем не менее, он пока еще не настолько хорошо оттестирован, как остальные компоненты, поэтому в нем могут быть ошибки или частично отсутствующая функциональность. В случае, если вы найдете подобные огрехи, не стесняйтесь сообщать нам о них!
Мы хотим сказать огромное спасибо Виталию Мурашеву - Python появился в CrystaX NDK главным образом благодаря его помощи. Это и есть то, как работает open source: сделать что-либо для удовольствия и поделиться результатами с сообщество. Виталий, еще раз спасибо!
Собранные бинарники Python лежат в каталогах $NDK/sources/python/2.7 и $NDK/sources/python/3.5. Если вы используете ndk-build, вот пример использования Python в вашем проекте:
# Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := mymodule LOCAL_SRC_FILES := ... LOCAL_SHARED_LIBRARIES := python_shared include $(BUILD_SHARED_LIBRARY) # Replace 3.5 by 2.7 if needed $(call import-module,python/3.5)
Мы продолжаем улучшать поддержку POSIX в CrystaX NDK. В этом выпуске мы перенесли в libcrystax.so (сердце CrystaX NDK) еще больше POSIX интерфейсов, поэтому теперь она зависит от Google libc еще меньше. Фактически, единственная большая часть POSIX, еще не реализованная в libcrystax.so - это POSIX threads. Это - то, что мы собираемся исправить в следующем релизе. Тем самым мы сможем избавиться от зависимости от Google libc, полностью заменив ее на libcrystax.so.
В рамках нашей работы по улучшению поддержки POSIX, мы интегрировали Open POSIX Test Suite в процесс автоматического тестирования CrystaX NDK. Благодаря этому, мы можем быть уверены, что libcrystax.so предоставляет реализацию, действительно соответствующую POSIX.
Мы включили собранные библиотеки и заголовочные файлы Boost 1.59.0. Теперь они собираются в двух вариантах - с использованием GNU libstdc++ и LLVM libc++ реализаций стандартной библиотеки C++. Ранее мы предоставляли библиотеки Boost, собранные только с GNU libstdc++, тем самым вынуждая пользователей указывать gnustl в своих проектах. Теперь вы можете указывать любую из двух: ndk-build автоматически определит предпочтительный вариант и подключит правильные версии библиотек Boost.
Также, в связи с тем, что у нас теперь есть Python для Android, мы начали собирать и тестировать Boost.Python. Эта работа еще не доведена до конца, но мы продолжаем работать над этим и со временем ситуация будет улучшаться.
CrystaX - официально одобренный тестер для проекта Boost. Это означает, что мы в непрерывном режиме тестируем библиотеки Boost, публикуя результаты на сайте Boost (master, develop). Это работает на пользу как Boost, так и CrystaX NDK. Пользователи Boost получают возможность использовать оттестированные библиотеки Boost на Android, а пользователи CrystaX NDK выигрывают оттого, что CrystaX NDK в свою очередь тестируется Boost тестами и тем самым практически доказывается хорошая степень соответствия стандартам POSIX и C++.
А также в этом выпуске было сделано большое количество исправлений и улучшений, в сумме ведущих к более стандартному и предсказуемому поведению CrystaX NDK. Здесь вы можете ознакомиться с полным списком закрытых в этой версии тикетов.
Здесь вы можете скачать CrystaX NDK 10.3.0.
Если же вы работаете под OS X и используете Homebrew, просто наберите в командной строке:
brew install crystax-ndk