Передать информацию об архитектуре из команды gradlew в cmake - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть приложение для Android, поддерживающее 4 разные архитектуры, а именно armeabi-v7a, arm64-v8a, x86 и x86_64.Я не хочу, чтобы каждая из этих архитектур была построена для каждого Android.Я хочу передать информацию об архитектуре в качестве аргумента через команду gradlew, чтобы пропустить сборки оставшихся архитектур.Я знаю, что флаг -DANDROID_ABI, переданный в качестве аргумента cmake, сработает, но не уверен, как передать его в качестве аргумента с помощью команды gradlew?

defaultConfig {
    minSdkVersion 21
    targetSdkVersion 26

    externalNativeBuild {
        cmake {
            cppFlags "-frtti -fexceptions"
            arguments "-DANDROID_ABI=<<requested arch to built>>"
        }
    }
}

Другими словами, как можноэта информация будет передана из команды gradlew в cmake?

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

Трюк может быть, как показано ниже:

android {   
    ...
    defaultConfig {
        externalNativeBuild {
            cmake {
                ...

                if (project.hasProperty("armeabi-v7a")) {
                    abiFilters 'armeabi-v7a'
                } else if (project.hasProperty("arm64-v8a")) {
                    abiFilters 'arm64-v8a'
                } else if (project.hasProperty("x86")) {
                    abiFilters 'x86'
                } else if (project.hasProperty("x86_64")) {
                    abiFilters 'x86_64'
                } else {
                    abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
                }
                ...
            }
        }
    }
}

Из командной строки вы можете сделать, как показано ниже, например, только построить аби armeabi-v7a

./gradlew externalNativeBuild -Parmeabi-v7a
0 голосов
/ 04 апреля 2019
https://developer.android.com/studio/build/gradle-tips#configure-separate-apks-per-abi

You can create multiple apks using same code.

android {
  ...
  splits {

    // Configures multiple APKs based on ABI.
    abi {

      // Enables building multiple APKs.
      enable true

      // By default all ABIs are included, so use reset() and include to specify that we only
      // want APKs for x86, armeabi-v7a, and mips.
      reset()

      // Specifies a list of ABIs that Gradle should create APKs for.
      include "x86", "armeabi-v7a", "mips"

      // Specify that we want to also generate a universal APK that includes all ABIs.
      universalApk true
    }
  }
}
...