Skip to content

Commit 2959de9

Browse files
authored
fix: Add 16KB page alignment and upgrade LiteRT to 1.4.0 (#163)
- Add 16KB page alignment linker flags for Android 15+ support - Upgrade LiteRT from 1.0.1 to 1.4.0 - Fix header extraction to handle new AAR structure - Update include paths from tensorflow/lite/ to tflite/ - Bump minSdkVersion to 26, targetSdkVersion to 36 - Update NDK version to 27.1.12297006 This fixes build and runtime issues on devices with 16KB page sizes.
1 parent eec86aa commit 2959de9

File tree

7 files changed

+49
-22
lines changed

7 files changed

+49
-22
lines changed

android/CMakeLists.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,20 @@ add_library(
3636
src/main/cpp/Tflite.cpp
3737
)
3838

39+
target_link_options(${PACKAGE_NAME}
40+
PRIVATE
41+
"-Wl,-z,max-page-size=16384"
42+
"-Wl,-z,common-page-size=16384"
43+
)
44+
3945
# Specifies a path to native header files.
4046
target_include_directories(
4147
${PACKAGE_NAME}
4248
PRIVATE
4349
"../cpp"
4450
"src/main/cpp"
4551
"src/main/cpp/lib/litert/headers"
52+
"src/main/cpp/lib/litert/headers/tflite"
4653
"${NODE_MODULES_DIR}/react-native/ReactCommon"
4754
"${NODE_MODULES_DIR}/react-native/ReactCommon/callinvoker"
4855
"${NODE_MODULES_DIR}/react-native/ReactAndroid/src/main/jni/react/turbomodule" # <-- CallInvokerHolder JNI wrapper

android/build.gradle

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import java.nio.file.Paths
2+
import org.gradle.api.file.RelativePath
23

34
buildscript {
45
repositories {
@@ -127,25 +128,44 @@ dependencies {
127128
implementation "com.facebook.react:react-native:+"
128129

129130
// Tensorflow Lite .aar (includes C API via prefabs)
130-
implementation "com.google.ai.edge.litert:litert:1.0.1"
131-
extractSO("com.google.ai.edge.litert:litert:1.0.1")
132-
extractHeaders("com.google.ai.edge.litert:litert:1.0.1")
131+
implementation "com.google.ai.edge.litert:litert:1.4.0"
132+
extractSO("com.google.ai.edge.litert:litert:1.4.0")
133+
extractHeaders("com.google.ai.edge.litert:litert:1.4.0")
133134

134135
// Tensorflow Lite GPU delegate
135-
implementation "com.google.ai.edge.litert:litert-gpu:1.0.1"
136-
extractSO("com.google.ai.edge.litert:litert-gpu:1.0.1")
137-
extractHeaders("com.google.ai.edge.litert:litert-gpu:1.0.1")
136+
implementation "com.google.ai.edge.litert:litert-gpu:1.4.0"
137+
extractSO("com.google.ai.edge.litert:litert-gpu:1.4.0")
138+
extractHeaders("com.google.ai.edge.litert:litert-gpu:1.4.0")
139+
}
140+
141+
task cleanEmptyDirectories(type: Delete) {
142+
delete 'src/main/cpp/lib/headers'
143+
delete 'src/main/cpp/lib/res'
138144
}
139145

140146
task extractAARHeaders {
147+
finalizedBy cleanEmptyDirectories
141148
doLast {
142-
configurations.extractHeaders.files.each {
143-
def file = it.absoluteFile
144-
def packageName = file.name.tokenize('-')[0]
149+
configurations.extractHeaders.files.each { aarFile ->
150+
def packageName = aarFile.name.tokenize('-')[0]
145151
copy {
146-
from zipTree(file)
147-
into "src/main/cpp/lib/$packageName/"
152+
from zipTree(aarFile)
153+
into "src/main/cpp/lib/"
148154
include "**/*.h"
155+
eachFile { fileCopyDetails ->
156+
if (fileCopyDetails.name.endsWith(".h")) {
157+
def originalRelativePath = fileCopyDetails.relativePath.toString()
158+
if (originalRelativePath.startsWith("headers/external/org_tensorflow/tensorflow/")) {
159+
def newRelativePath = packageName + "/headers/" + originalRelativePath.substring("headers/external/org_tensorflow/".length())
160+
fileCopyDetails.relativePath = new RelativePath(true, newRelativePath.split('/'))
161+
} else {
162+
def newRelativePath = packageName + "/" + originalRelativePath
163+
fileCopyDetails.relativePath = new RelativePath(true, newRelativePath.split('/'))
164+
}
165+
} else {
166+
exclude fileCopyDetails.name
167+
}
168+
}
149169
}
150170
}
151171
}

android/gradle.properties

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
Tflite_kotlinVersion=1.7.0
2-
Tflite_minSdkVersion=21
3-
Tflite_targetSdkVersion=31
4-
Tflite_compileSdkVersion=31
5-
Tflite_ndkversion=21.4.7075529
1+
Tflite_kotlinVersion=2.1.10
2+
Tflite_minSdkVersion=26
3+
Tflite_targetSdkVersion=36
4+
Tflite_compileSdkVersion=36
5+
Tflite_ndkversion=27.1.12297006

cpp/TensorHelpers.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#include "TensorHelpers.h"
1010

1111
#ifdef ANDROID
12-
#include <tensorflow/lite/c/c_api.h>
12+
#include <tflite/c/c_api.h>
1313
#else
1414
#include <TensorFlowLiteC/TensorFlowLiteC.h>
1515
#endif

cpp/TensorHelpers.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
#include <jsi/jsi.h>
1313

1414
#ifdef ANDROID
15-
#include <tensorflow/lite/c/c_api.h>
15+
#include <tflite/c/c_api.h>
1616
#else
1717
#include <TensorFlowLiteC/TensorFlowLiteC.h>
1818
#endif

cpp/TensorflowPlugin.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818
#include <thread>
1919

2020
#ifdef ANDROID
21-
#include <tensorflow/lite/c/c_api.h>
22-
#include <tensorflow/lite/delegates/gpu/delegate.h>
23-
#include <tensorflow/lite/delegates/nnapi/nnapi_delegate_c_api.h>
21+
#include <tflite/c/c_api.h>
22+
#include <tflite/delegates/gpu/delegate.h>
23+
#include <tflite/delegates/nnapi/nnapi_delegate_c_api.h>
2424
#else
2525
#include <TensorFlowLiteC/TensorFlowLiteC.h>
2626

cpp/TensorflowPlugin.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
#ifdef ANDROID
1818
#include <ReactCommon/CallInvoker.h>
19-
#include <tensorflow/lite/c/c_api.h>
19+
#include <tflite/c/c_api.h>
2020
#else
2121
#include <React-callinvoker/ReactCommon/CallInvoker.h>
2222
#include <TensorFlowLiteC/TensorFlowLiteC.h>

0 commit comments

Comments
 (0)