Как ускорить сборку android ndk

У нас есть довольно большой проект на С++, который мы создаем кросс-платформу для Android и iOS. Xcode использует все ядра при компиляции и намного быстрее (4-5 раз в зависимости от машины). Есть ли способ улучшить азбучную работу НДК? Какие-либо варианты нескольких процессоров? У нас есть предварительно скомпилированные заголовки, но мне кажется, что это использование ресурсов, которые виноваты.

Так что любые советы или рекомендации для ускорения разработки проекта android ndk были бы очень оценены!

Ответы

Ответ 1

Вам не требуется использовать систему сборки Android для вашей компиляции; все инструменты доступны для использования в Makefile (хотя вам нужно будет позаботиться о настройке включенных путей, путей библиотек и параметров компилятора).

Поскольку вы можете создать свой собственный Makefile вместо использования сценариев сборки по умолчанию, вы можете использовать параметр th -jN, чтобы указать количество одновременных операций для выполнения.

Ответ 2

Следующий фрагмент bulid.gradle показывает пример -jN и abifilters: (см. http://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.ExternalNativeNdkBuildOptions.html и https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.NdkOptions.html)

android {
compileSdkVersion 21
buildToolsVersion '25.0.3'

defaultConfig {
    applicationId "test"
    minSdkVersion 21
    targetSdkVersion 21

    ndk {
        moduleName "native_lib"
        abiFilters 'armeabi-v7a', 'arm64-v8a'
    }
    externalNativeBuild {
        ndkBuild {
            arguments '-j4'
        }
    }
    jackOptions {
        enabled true
    }
}.....

Ответ 3

Для всех, кто получил следующую ошибку

Не удалось найти аргументы метода() для аргументов [-jx] для объекта типа com.android.build.gradle.internal.dsl.NdkBuildOptions.

Существует разница между

android.externalNativeBuild (здесь) и

android.defaultConfig.externalNativeBuild (здесь).

android.defaultConfig.externalNativeBuild принимает arguments и может использоваться для установки опции -j.