Создание пакетов APK x86 и ARM* APK с помощью компилятора Intel® и GNU* gcc

Table of Contents

  1. Введение
  2. Подготовка среды сборки
  3. Сборка из командной строки
    1. Настройка приложения
    2. Очистка рабочей области приложения
    3. Сборка двоичных файлов для архитектуры ARM*
    4. Сборка двоичных файлов для архитектуры x86
    5. Подготовка пакета приложения (APK)
  4. Сборка в интегрированной среде разработки Eclipse*
  5. Примечание о невыполнении очистки двоичных файлов в .\libs\[targetabi]
  6. Прочие статьи по теме и ресурсы

Введение

Существуют устройства Android* на процессорах с архитектурами наборов инструкций (ISA) ARM* или x86. Различные архитектуры наборов инструкций не имеют двоичной совместимости, поэтому приложение, содержащее нативный код, должно содержать нативные библиотеки для каждой архитектуры. Одним из механизмов распространения таких приложений являются так называемые «толстые» пакеты приложений Android* («толстые» APK).

В этой статье содержатся пошаговые инструкции по созданию такого «толстого» пакета APK, включающего независимые от архитектуры файлы для виртуальной машины Dalvik* (Dalvik, 2013), а также библиотеки для разных архитектур. В статье описывается сборка нативной библиотеки приложения x86 с помощью Intel® IntegratedNativeDeveloperExperience (INDE).

Для демонстрации используем пример hello-jni из дистрибутива NDK r10 (входящий в состав установки Intel® INDE).

Подготовка среды сборки

Необходимы следующие программные средства. Установите их, следуя приведенной инструкции.

  1. Установите:
  2. Добавьте эту папку в переменную среды PATH:
    • каталог "[jdk7-dir]\jre\bin" для использования виртуальной машины"java" VM. Это требуется для "ant" tool
      Для среды Windows не забудьте указать краткое имя папки "вида PROGRA~2" для " program files (x86)"
  3. Создайте новую переменную среды:
    • "JAVA_HOME=[jdk7-dir]"
  4. Установите:
  5. Добавьте эту папку в переменную среды PATH:
    • каталог "[ant-dir]\bin" для использования средства "ant" tool (расположение of  [ant-dir] по умолчанию: [inde-dir]\IDEintegration)

Сборка из командной строки

В этом разделе содержатся инструкции по созданию пакетов APK для поддержки устройств Android с архитектурой ARM* и x86 в среде сборки с командной строкой.

Откройте окно командной строки или окно терминала в Linux*; перейдите в папку примеров Android NDK "hello-jni" [ndk-dir]\samples\hello-jni; выполните следующие действия.

Примечание: Все средства, перечисленные в разделе выше, должны быть доступны из этого окна.

  1. Настройка приложения

    Выполните следующую команду в папке "hello-jni" для создания файла build.xml который будет впоследствии использован для сборки примера.

        $ android update project --target android-19 --name HelloJni --path . --subprojects

    Примечание.
            --target android-19: соответствует версии (KITKAT)

  2. Очистка рабочей области приложения

    Используйте следующую команду для очистки всей рабочей области, включая библиотеки, для всех архитектур ISA.
        $ ant clean
        $ ndk-build V=1 APP_ABI=all clean

    Примечание:
            . V=1 : печать всех команд по мере их выполнения.
            . APP_ABI=all :принудительная очистка всех промежуточных файлов для всех целевых платформ. Если не указать этот параметр, будет очищен только файл для целевой платформы armeabi

  3. Сборка двоичных файлов для архитектуры ARM*

    Используйте указанную ниже команду для сборки двоичного файла приложения для архитектуры ARM:
        $ ndk-build APP_ABI=armeabi-v7a V=1 NDK_TOOLCHAIN=arm-linux-androideabi-4.8

    Примечание:
            . APP_ABI=armeabi-v7a : настройка компиляции для целевой платформы ARM*.
            . NDK_TOOLCHAIN=arm-linux-androideabi-4.8 : вместо используемого по умолчанию GNU* gcc 4.6, используется gcc 4.8.

    Двоичный файл приложения (libhello-jni.so ) создается по адресу . .\libs\armeabi-v7a\libhello-jni.so

  4. Сборка двоичных файлов для архитектуры x86 с помощью компилятора Intel

    Используйте указанную ниже команду для сборки двоичного файла приложения для архитектуры x86 с помощью компилятора Intel.
        $ ndk-build APP_ABI=x86 V=1 NDK_TOOLCHAIN=x86-icc NDK_APP.local.cleaned_binaries=true

    Примечание:
            . APP_ABI=x86 : настройка компиляции для архитектуры x86.
            . NDK_TOOLCHAIN=x86-icc : замена используемого по умолчанию компилятора gcc 4.6 на компилятор Intel C/C++ для Android.
            . NDK_APP.local.cleaned_binaries=true : отмена удаления библиотеки в каталоге libs/armeabi. См. примечания ниже.

    Двоичный файл приложения (libhello-jni.so ) создается по адресу . .\libs\x86\libhello-jni.so

  5. 5. Подготовка пакета приложения (APK)

    После сборки всех двоичных файлов для каждой целевой платформы Android убедитесь, что папка libs\[targetabi] содержит требуемые библиотеки для каждой целевой архитектуры.

    Чтобы упростить создание пакета и избежать его подписания, используйте следующую команду для создания отладочного пакета.
        $ ant debug

    После этого новый пакет HelloJni-debug.apk появится в папке . .\bin directory. Его можно запустить в имитаторах x86* или ARM*, поддерживающих API уровня 19 или выше, содержащихся в Android SDK.
    Пакет HelloJni-debug.apk содержит библиотеки для двух целевых платформ: ARM EABI v7a и x86.

Сборка в интегрированной среде разработки Eclipse*

  1. Откройте Eclipse и загрузите пример [inde-dir]/IDEintegration/NDK/samples/hello-jni
    • В меню выберите File > New > Project > Android
    • Нажмите кнопку Android Project from Existing Code button
    • В поле Root Directory нажмите кнопкуBrowse... и выберите папку [ndk-dir]/samples
    • Затем щелкните Deselect All и выберите только нужный проект: hello-jni
    • Снимите флажок  Copy projects into workspace
    • Нажмите кнопку Finish.
  2. Добавьте в проект поддержку нативного кода.
    • Щелкните имя проекта правой кнопкой мыши и выберите Android Tools > Add Native Support...
    • Нажмите кнопку Finish.
    Примечание. Если после этого шага на консоли появляется сообщение об ошибке "Unable to launch cygpath" этот шаг можно пропустить, что не повлияет на проект.

  3. Создайте отдельную конфигурацию сборки для каждой целевой платформы, задайте команду сборки.
    Щелкните проект правой кнопкой мыши и выберите Properties -> C/C++ Build -> "Manage configurations..."
    Щелкните New... чтобы добавить новые конфигурации на основе конфигурации по умолчанию.
    • Имя: x86_icc Описание: для целевой платформы x86 с помощью компилятора Intel icc
    • Имя: arm_gcc Описание: для целевой платформы ARM с помощью компилятора GNU gcc
    В этом же окне свойств проекта установите для параметра Configuration значение x86_icc.
    • Снимите флажок "Use default build command"
    • Добавьте следующий текст в поле Build command field:
      ndk-build APP_ABI=x86 NDK_TOOLCHAIN=x86-icc
    • Щелкните Apply
    В этом же окне свойств проекта установите для параметра Configuration значение "arm_gcc":
    • Снимите флажок "Use default build command"
    • Добавьте следующий текст в поле Build command field:
      ndk-build APP_ABI=armeabi-v7a NDK_TOOLCHAIN=arm-linux-androideabi-4.8
    • Нажмите кнопку Apply затем нажмите кнопку OK
  4. Очистка всей рабочей области приложения
    • Если файл Application.mk существует в папке [eclipse-workspace-dir]\HelloJni\jni убедитесь, что он не содержит следующую строку.
      NDK_APP.local.cleaned_binaries=true
    • Щелкните проект правой кнопкой мыши и выберите Build configurations > Clean all…
  5. Создайте файл Application.mk в папке [eclipse-workspace-dir]\HelloJni\jni если он не существует, и убедитесь, что он содержит следующую строку.
    NDK_APP.local.cleaned_binaries=true
  6. Соберите двоичный файл для целевой архитектуры ARM* с помощью gcc и для целевой архитектуры x86 с помощью компилятора Intel.
    • Щелкните проект правой кнопкой мыши и выберите Build Configurations > Build Selected...
    • Выберите “arm_gcc” and “x86_icc”
    • Нажмите кнопку Ok.
    • Проверьте выходные двоичные файлы по следующим адресам.
      •  [eclipse-workspace-dir]\HelloJni\libs\armeabi-v7a\libhello-jni.so
      • [eclipse-workspace-dir]\HelloJni\libs\x86\libhello-jni.so
  7. Создание неподписанных пакетов приложений
    Щелкните проект правой кнопкой мыши и выберите Android Tools > Export Unsigned Application Package...

Примечание о невыполнении очистки двоичных файлов в .\libs\[targetabi]

Параметр NDK_APP.local.cleaned_binaries=true для отключения удаления собранных ранее библиотек может не работать в будущих версиях NDK. См. [ndk-dir]/build/core/setup-app.mk для получения информации о том, как отключить действия удаления для установленных двоичных файлов.

Прочие статьи по теме и ресурсы 

Дополнительные сведения о средствах Intel для разработчиков Android см. на сайте Intel® Developer Zone for Android.

Для получения подробной информации о возможностях оптимизации компилятора обратитесь к нашему Уведомлению об оптимизации.
Возможность комментирования русскоязычного контента была отключена. Узнать подробнее.