Новая версия CrystaX NDK 10.3.0 доступна для скачивания.
Наиболее важные изменения в этом выпуске:
- Новые GCC и LLVM/clang.
- Сильно улучшена поддержка Objective-C v2.
- Добавлена поддержка Python (2.7 и 3.5) для Android.
Кроме этого, починено много ошибок и сделано огромное количество улучшений. Ниже вы можете ознакомиться с более подробной информацией.
Новые GCC и LLVM/clang
В этом выпуске мы добавили новые тулчейны, основанные на gcc-5.3 и llvm-3.7. Старые gcc-4.9 и llvm-3.6 также присутствуют для совместимости, но будут удалены в следующем релизе.
Нет нужды говорить, что это значит для разработчиков, особенно в свете активно развивающихся gcc и clang в плане поддержки новых стандартов C, C++ и Objective-C. Теперь вы можете использовать наиболее передовые языковые фичи и для Android.
Также, в этом релизе мы перешли полностью на собственные ветки GCC и LLVM/clang, которые основаны на upstream с минимальными точечными правками (ранее gcc и clang в CrystaX NDK были ответвлены от Google’s gcc и clang). Принять такое решение помог тот факт, что у нас накопилась довольно большая «тестовая масса», позволяющая с определенной степенью уверенности утверждать, что компилятор, справляющийся со всеми нашими тестами — это годный, рабочий компилятор.
Это решение, хоть и было трудным, тем не менее оказалось очень верным, т.к. теперь процесс обновления gcc и clang до новых версий очень прост и происходит в полуавтоматическом режиме. Так, обновление до gcc-5.3 заняло всего три дня, из которых 20 минут заняло слияние с upstream-ом, следующие 20 часов — сборка нового билда и еще двое суток — полный прогон автоматических тестов. Из них только первая часть потребовала ручной работы.
$ $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 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
Python для Android
Мы предоставляем собранные бинарники python-2.7 и python-3.5 (исполняемые файлы, библиотеки и заголовочные файлы) для всех поддерживаемых Android ABI. Как и все остальные подобные пакеты в CrystaX NDK, Python был собран из официальных исходников, без единого изменения в его коде. Это прямое следствие нашего подхода: когда что-либо не собирается, мы не правим собираемый код. Вместо этого мы чиним CrystaX NDK, делая поведение нижнеуровневых библиотек соответствующим стандартам (POSIX и де-факто стандартам, таким как GNU/Linux).
Python в CrystaX NDK пока находится в экспериментальном состоянии, хотя он и работает довольно хорошо, насколько мы видим. Тем не менее, он пока еще не настолько хорошо оттестирован, как остальные компоненты, поэтому в нем могут быть ошибки или частично отсутствующая функциональность. В случае, если вы найдете подобные огрехи, не стесняйтесь сообщать нам о них!
Мы хотим сказать огромное спасибо Виталию Мурашеву (@vitaly-murashev) — 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
Мы продолжаем улучшать поддержку 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
Мы включили в состав CrystaX NDK собранные библиотеки и заголовочные файлы 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++.
Итого
Кроме этого, в этом выпуске было сделано большое количество мелких улучшений и исправлений. Полный список закрытых тикетов находится здесь.
ссылка на оригинал статьи http://habrahabr.ru/post/273053/
Добавить комментарий