2021/10/24

tensorflow lite android example, build

lite 的 example 跟 tensor 是合在一起的,所以要整個 clone。

雖然說明說,就用 studio 開啟project 然後 build 就可以了,結果 fail,說 :app task 少一個...wrapper (?)
只好用手動,參考 tools 下的 script,是 call project 下的 gradlew 來 build 的,
奇怪 run build_all_android... 卻沒有 build,手動 run build_android_app.sh + example_path 也一樣,一直說沒有 gradlw。

手動的話,就是到 project 下 run
./gradlew assembleRelease 
有碰到兩個 error,一個說沒有 ANDROID_SDK_ROOT 變數,就 export 一下,指定到 Sdk folder
另外一個說沒有需要的 Ndk 版本 (跟有安裝的不一樣),所以參考這一篇,安裝特定版本的 Ndk 後,就 OK 了。


使用 studio 開啟 'android' folder 是可以 build 的,但是一旦接受建議,把 gradlew 從 4.0 升級到 7.0 之後,就有 error 了。
遵照這一頁:Allow insecure protocols, android gradle,修改的話...
diff --git a/lite/examples/object_detection/android/build.gradle b/lite/examples/object_detection/android/build.gradle
index 8ccd3140..b820d78d 100644
--- a/lite/examples/object_detection/android/build.gradle
+++ b/lite/examples/object_detection/android/build.gradle
@@ -7,7 +7,7 @@ buildscript {
         mavenLocal()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:4.0.0'
+        classpath 'com.android.tools.build:gradle:7.0.3'
         classpath 'de.undercouch:gradle-download-task:4.0.2'
         // NOTE: Do not place your application dependencies here; they belong
         // in the individual module build.gradle files
@@ -19,6 +19,7 @@ allprojects {
         google()
         mavenCentral()
         maven {
+           allowInsecureProtocol = true
             name 'ossrh-snapshot'
             url 'http://oss.sonatype.org/content/repositories/snapshots'
         }
第一個 diff 是 studio upgrade 時改的,第二格是要自己加的。
加完後,重新 build 就 OK了。
.. 但是用 studio build 真的比較久,build 完電腦還當機。
用 command line 比較快。


認真看一下 error message:
Could not resolve all dependencies for configuration ':app:taskApiDebugRuntimeClasspath'.
Using insecure protocols with repositories, without explicit opt-in, is unsupported. 
Switch Maven repository 'ossrh-snapshot(http://oss.sonatype.org/content/repositories/snapshots)' 
to redirect to a secure protocol (like HTTPS) or allow insecure protocols. 
See
allowInsecureProtocol
for more details. 

大部分的 project 都只需要改這些 build.gradle ,有些要改manifest。為了方便,fork 一份到自幾的 github,其中 branch: gradle7 就是為了新版 android studio 的新版 gradle 修改的

沒有留言:

張貼留言