トップ «前の日記(2021-01-02) 最新 次の日記(2021-01-06)» 編集

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|

2021-01-05 [Android][Gradle][ndk-build]既存のネイティブ・ソースをGradleに組み込む

ndk-buildを使っている既存のネイティブ・ソースをGradleに組み込み手順を調べた。

Android Studio UIを利用すると思わぬ副作用が発生する懸念があるのと、Android Studioの利用は次の段階で検討するので、手動で対応する方法のみとなっている。

gradle.propertiesにCMakeでなくndk-buildを選択していると設定する。

PROP_APP_ABI=armeabi-v7a:arm64-v8a
PROP_BUILD_TYPE=ndk-build

build.gradleのdefaultConfigブロックにndk-buildのオプションを設定する。

android {
  ...
  defaultConfig {
    ...
    externalNativeBuild {
      if (PROP_BUILD_TYPE == 'ndk-build') {
        ndkBuild {
          arguments '-j4'
          arguments 'NDK_MODULE_PATH=modules'
        }
      }
      else if (PROP_BUILD_TYPE == 'cmake') {
        cmake {
          arguments "-DANDROID_ARM_NEON=TRUE", "-DANDROID_TOOLCHAIN=clang"
          cFlags "-D__STDC_FORMAT_MACROS"
          cppFlags "-fexceptions", "-frtti"
        }
      }
    }
  }
 
  buildTypes {...}
 
  productFlavors {
    ...
    demo {
      ...
      externalNativeBuild {
        if (PROP_BUILD_TYPE == 'ndk-build') {
          ndkBuild {
            ...
          }
        }
        else if (PROP_BUILD_TYPE == 'cmake') {
          cmake {
            ...
            targets "native-lib-demo",
                    "my-executible-demo"
          }
        }
      }
    }
 
    paid {
      ...
      externalNativeBuild {
        if (PROP_BUILD_TYPE == 'ndk-build') {
          ndkBuild {
            ...
          }
        }
        else if (PROP_BUILD_TYPE == 'cmake') {
          cmake {
            ...
            targets "native-lib-paid",
                    "my-executible-paid"
          }
        }
      }
    }
  }
 
  externalNativeBuild {
    if (PROP_BUILD_TYPE == 'ndk-build') {
      ndkBuild {...}
    }
    else if (PROP_BUILD_TYPE == 'cmake') {
      cmake {...}
    }
  }
}

buidl.gradleでndk.abiFiltersフラグにABIを設定する。

android {
  ...
  defaultConfig {
    ...
    externalNativeBuild {
      if (PROP_BUILD_TYPE == 'ndk-build') {
        ndkBuild {...}
      }
      else if (PROP_BUILD_TYPE == 'cmake') {
        cmake {...}
      }
    }
 
    ndk {
      abiFilters = []
      abiFilters.addAll(PROP_APP_ABI.split(':').collect{it as String})
    }
  }
  buildTypes {...}
  externalNativeBuild {...}
}

トップ «前の日記(2021-01-02) 最新 次の日記(2021-01-06)» 編集