Update gradle to build TFLilte Java bindings AAR library (#6197)
Process for building the AAR:
1. Start AndroidStudio. Select "Open File or Project" then choose `iree/bindings/tflite/java/gragle.build`.
2. AndroidStudio should sync the project and setup gradlew uner `iree/bindings/tflite/java`.
3. Make the project using android studio or run the build directly in terminal:
```shell
./gradlew build
```
This produces two libraries under `iree/bindings/tflite/java/build/outputs/aar`:
* `iree-tflite-bindings-debug.aar`
* `iree-tflite-bindings-release.aar`
AAR contents:

Include either library in another gradle project for iree tflite binding support.
Addresses #6198
diff --git a/bindings/tflite/java/README.md b/bindings/tflite/java/README.md
new file mode 100644
index 0000000..0c0e875
--- /dev/null
+++ b/bindings/tflite/java/README.md
@@ -0,0 +1,24 @@
+# IREE TFLite Android Native Bindings
+
+## Building The Library
+
+Process for building the AAR library:
+
+1. Start AndroidStudio. Select _Open File or Project_ then choose `iree/bindings/tflite/java/gragle.build`
+2. AndroidStudio should sync the project and setup gradlew uner `iree/bindings/tflite/java`
+3. Make the project using AndroidStudio or run the build directly in terminal:
+```shell
+./gradlew build
+```
+
+This produces two libraries under `iree/bindings/tflite/java/build/outputs/aar`:
+* `iree-tflite-bindings-debug.aar`
+* `iree-tflite-bindings-release.aar`
+
+### AAR Contents
+
+
+
+## Using the Library
+
+Include either library in another gradle project for IREE TFLite binding support. See "[Adding dependencies with the Project Structure Dialog](https://developer.android.com/studio/projects/android-library#psd-add-dependencies)" for use in AndroidStudio.
diff --git a/bindings/tflite/java/build.gradle b/bindings/tflite/java/build.gradle
index f226f6c..de0fd34 100644
--- a/bindings/tflite/java/build.gradle
+++ b/bindings/tflite/java/build.gradle
@@ -23,7 +23,6 @@
android {
compileSdkVersion 29
-
defaultConfig {
minSdkVersion 28
targetSdkVersion 29
@@ -42,15 +41,20 @@
"-DIREE_BUILD_SAMPLES=OFF",
"-DIREE_BUILD_PYTHON_BINDINGS=OFF",
"-DIREE_HOST_BINARY_ROOT=${hostInstallDir}"
+
+ targets "iree-tflite-bindings"
}
}
}
sourceSets {
main {
- java.srcDirs = ['java/org/tensorflow/lite']
- jni.srcDirs = ['java/org/tensorflow/lite/native']
- manifest.srcFile 'org/tensorflow/lite/tests/TestManifest.xml'
+ manifest.srcFile 'org/tensorflow/lite/AndroidManifest.xml'
+ java {
+ srcDirs('org/tensorflow/lite')
+ exclude('tests/**') // Don't build tests into the library
+ }
+ jni.srcDirs = ['org/tensorflow/lite/native']
}
}
@@ -62,6 +66,10 @@
}
}
+dependencies {
+ implementation 'com.android.support:support-annotations:22.2.0'
+}
+
// Task to cmake configure the host
task cmakeConfigureHost(type: Exec) {
doFirst {
diff --git a/bindings/tflite/java/org/tensorflow/lite/AndroidManifest.xml b/bindings/tflite/java/org/tensorflow/lite/AndroidManifest.xml
new file mode 100644
index 0000000..d8ebeb4
--- /dev/null
+++ b/bindings/tflite/java/org/tensorflow/lite/AndroidManifest.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="org.tensorflow.lite">
+</manifest>
diff --git a/bindings/tflite/java/org/tensorflow/lite/Interpreter.java b/bindings/tflite/java/org/tensorflow/lite/Interpreter.java
index b280a74..4500939 100644
--- a/bindings/tflite/java/org/tensorflow/lite/Interpreter.java
+++ b/bindings/tflite/java/org/tensorflow/lite/Interpreter.java
@@ -8,11 +8,11 @@
package org.tensorflow.lite;
+import android.support.annotation.NonNull;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.util.HashMap;
import java.util.Map;
-import org.checkerframework.checker.nullness.qual.NonNull;
/**
* Main driver class for the IREE Java compatibility shim. Provides model
diff --git a/bindings/tflite/java/org/tensorflow/lite/native/CMakeLists.txt b/bindings/tflite/java/org/tensorflow/lite/native/CMakeLists.txt
index f4c76c1..7494dcb 100644
--- a/bindings/tflite/java/org/tensorflow/lite/native/CMakeLists.txt
+++ b/bindings/tflite/java/org/tensorflow/lite/native/CMakeLists.txt
@@ -6,17 +6,25 @@
iree_add_all_subdirs()
-iree_cc_library(
- NAME
- native_deps
- SRCS
+set(_NAME "iree-tflite-bindings")
+add_library(${_NAME} SHARED "")
+
+target_sources(${_NAME}
+ PRIVATE
"interpreter_jni.cc"
"tensor_jni.cc"
"tensorflow_lite_jni.cc"
- HDRS
- DEPS
+)
+
+target_link_libraries(${_NAME}
+ PUBLIC
iree::base
+ iree::base::logging
bindings::tflite::shim
- LINKOPTS
+)
+
+target_link_options(${_NAME}
+ INTERFACE
"-landroid"
+ "-llog"
)
diff --git a/bindings/tflite/java/settings.gradle b/bindings/tflite/java/settings.gradle
new file mode 100644
index 0000000..1bc5c06
--- /dev/null
+++ b/bindings/tflite/java/settings.gradle
@@ -0,0 +1 @@
+rootProject.name = 'iree-tflite-bindings'