139 lines
4.0 KiB
Groovy
139 lines
4.0 KiB
Groovy
// This file provides basic support for building the TensorFlow demo
|
|
// in Android Studio with Gradle.
|
|
//
|
|
// Note that Bazel is still used by default to compile the native libs,
|
|
// and should be installed at the location noted below. This build file
|
|
// automates the process of calling out to it and copying the compiled
|
|
// libraries back into the appropriate directory.
|
|
//
|
|
// It is necessary to customize Gradle's build directory, as otherwise
|
|
// it will conflict with the BUILD file used by Bazel on case-insensitive OSs.
|
|
project.buildDir = 'gradleBuild'
|
|
getProject().setBuildDir('gradleBuild')
|
|
|
|
buildscript {
|
|
repositories {
|
|
jcenter()
|
|
google()
|
|
}
|
|
|
|
dependencies {
|
|
classpath 'com.android.tools.build:gradle:4.0.1'
|
|
classpath 'org.apache.httpcomponents:httpclient:4.5.12'
|
|
}
|
|
}
|
|
|
|
allprojects {
|
|
repositories {
|
|
jcenter()
|
|
google()
|
|
}
|
|
}
|
|
|
|
// set to 'bazel', 'none'
|
|
def nativeBuildSystem = 'bazel'
|
|
|
|
// Controls output directory in APK and CPU type for Bazel builds.
|
|
def cpuType = 'armeabi-v7a'
|
|
|
|
// Output directory in the local directory for packaging into the APK.
|
|
def nativeOutDir = 'libs/' + cpuType
|
|
|
|
// Default to building with Bazel.
|
|
def nativeBuildRule = 'buildNativeBazel'
|
|
def demoLibPath = '../../../bazel-bin/tensorflow/tools/android/test/libtensorflow_demo.so'
|
|
def inferenceLibPath = '../../../bazel-bin/tensorflow/tools/android/inference_interface/libtensorflow_inference.so'
|
|
|
|
// If building with Bazel, this is the location of the bazel binary.
|
|
// NOTE: Bazel does not yet support building for Android on Windows.
|
|
def bazelLocation = '/usr/local/bin/bazel'
|
|
|
|
// import DownloadModels task
|
|
project.ext.ASSET_DIR = projectDir.toString() + '/assets'
|
|
project.ext.TMP_DIR = project.buildDir.toString() + '/downloads'
|
|
|
|
// Download default models; if you wish to use your own models then
|
|
// place them in the "assets" directory and comment out this line.
|
|
apply from: "download-models.gradle"
|
|
|
|
apply plugin: 'com.android.application'
|
|
|
|
android {
|
|
compileSdkVersion 29
|
|
|
|
lintOptions {
|
|
abortOnError false
|
|
}
|
|
|
|
sourceSets {
|
|
main {
|
|
if (nativeBuildSystem == 'bazel') {
|
|
// TensorFlow Java API sources.
|
|
java {
|
|
srcDir '../../java/src/main/java'
|
|
exclude '**/examples/**'
|
|
}
|
|
|
|
// Android TensorFlow wrappers, etc.
|
|
java {
|
|
srcDir '../../tools/android/inference_interface/java'
|
|
}
|
|
}
|
|
// Android demo app sources.
|
|
java {
|
|
srcDir 'src'
|
|
}
|
|
|
|
manifest.srcFile 'AndroidManifest.xml'
|
|
resources.srcDirs = ['src']
|
|
aidl.srcDirs = ['src']
|
|
renderscript.srcDirs = ['src']
|
|
res.srcDirs = ['res']
|
|
assets.srcDirs = [project.ext.ASSET_DIR]
|
|
jniLibs.srcDirs = ['libs']
|
|
}
|
|
|
|
debug.setRoot('build-types/debug')
|
|
release.setRoot('build-types/release')
|
|
}
|
|
defaultConfig {
|
|
targetSdkVersion 29
|
|
minSdkVersion 21
|
|
}
|
|
}
|
|
|
|
task buildNativeBazel(type: Exec) {
|
|
workingDir '../../..'
|
|
commandLine bazelLocation, 'build', '-c', 'opt', \
|
|
'tensorflow/tools/android/test:tensorflow_native_libs', \
|
|
'--crosstool_top=//external:android/crosstool', \
|
|
'--cpu=' + cpuType, \
|
|
'--host_crosstool_top=@bazel_tools//tools/cpp:toolchain'
|
|
}
|
|
|
|
task copyNativeLibs(type: Copy) {
|
|
from demoLibPath
|
|
from inferenceLibPath
|
|
into nativeOutDir
|
|
duplicatesStrategy = 'include'
|
|
dependsOn nativeBuildRule
|
|
fileMode 0644
|
|
}
|
|
|
|
tasks.whenTaskAdded { task ->
|
|
if (nativeBuildSystem == 'bazel') {
|
|
if (task.name == 'assembleDebug') {
|
|
task.dependsOn 'copyNativeLibs'
|
|
}
|
|
if (task.name == 'assembleRelease') {
|
|
task.dependsOn 'copyNativeLibs'
|
|
}
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
if (nativeBuildSystem == 'none') {
|
|
implementation 'org.tensorflow:tensorflow-android:+'
|
|
}
|
|
}
|