Skip to content

[android_deploy] CRASH caused by Module.load func while running App on Android Device with  #4884

@KindleHe

Description

@KindleHe

I install the apk in vivo X6S A, according to the Android TVM Demo

vivo X6S A is arm64-v8a with android-22, so I modify config.mk as following:

APP_ABI = arm64-v8a

APP_PLATFORM = android-22

# whether enable OpenCL during compile
USE_OPENCL = 0

# the additional include headers you want to add, e.g., SDK_PATH/adrenosdk/Development/Inc
ADD_C_INCLUDES =

# the additional link libs you want to add, e.g., ANDROID_LIB_PATH/libOpenCL.so
ADD_LDLIBS =

However, I run app in device, the app crash immediately, so I add some lines for debug:

Log.i(TAG, "libCacheFilePath=" + libCacheFilePath);
Module modelLib = Module.load(libCacheFilePath);
Log.i(TAG, "Finish Module.load");

Then, I use adb logcat -b main -v time>app.log command to capture crash on android device machine to get the following log file
app.log
Here is some important information of app.log

02-14 23:38:51.469 I/MainActivity(28024): libCacheFilePath=/data/data/org.apache.tvm.android.demo/cache/tvm4j_demo_-856121318/deploy_lib_cpu.so
02-14 23:38:51.469 W/System.err(28024): Try loading tvm4j from native path.
02-14 23:38:51.469 W/System.err(28024): Try loading tvm4j-linux-x86_64 from native path.
02-14 23:38:51.469 W/System.err(28024): [WARN] TVM native library not found in path. Copying native library from the archive. Consider installing the library somewhere in the path (for Windows: PATH, for Linux: LD_LIBRARY_PATH), or specifying by Java cmd option -Djava.library.path=[lib path].
02-14 23:38:51.469 W/System.err(28024): Attempting to load libtvm4j.so
02-14 23:38:51.469 W/System.err(28024): [WARN] Couldn't find native library tvm4j.
02-14 23:38:51.469 W/System.err(28024): java.lang.UnsatisfiedLinkError: Couldn't find the resource libtvm4j.so
02-14 23:38:51.469 W/System.err(28024):         at org.apache.tvm.NativeLibraryLoader.extractResourceFileToTempDir(NativeLibraryLoader.java:127)
02-14 23:38:51.469 W/System.err(28024):         at org.apache.tvm.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:87)
02-14 23:38:51.469 W/System.err(28024):         at org.apache.tvm.Base.<clinit>(Base.java:73)
02-14 23:38:51.469 W/System.err(28024):         at org.apache.tvm.Function.listGlobalFuncNames(Function.java:52)
02-14 23:38:51.469 W/System.err(28024):         at org.apache.tvm.Function.getFunction(Function.java:38)
02-14 23:38:51.469 W/System.err(28024):         at org.apache.tvm.Module.getApi(Module.java:41)
02-14 23:38:51.469 W/System.err(28024):         at org.apache.tvm.Module.load(Module.java:140)
02-14 23:38:51.469 W/System.err(28024):         at org.apache.tvm.Module.load(Module.java:146)
02-14 23:38:51.469 W/System.err(28024):         at org.apache.tvm.android.demo.MainActivity$LoadModleAsyncTask.doInBackground(MainActivity.java:186)
02-14 23:38:51.469 W/System.err(28024):         at org.apache.tvm.android.demo.MainActivity$LoadModleAsyncTask.doInBackground(MainActivity.java:124)
02-14 23:38:51.469 W/System.err(28024):         at android.os.AsyncTask$2.call(AsyncTask.java:292)
02-14 23:38:51.469 W/System.err(28024):         at java.util.concurrent.FutureTask.run(FutureTask.java:237)
02-14 23:38:51.469 W/System.err(28024):         at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
02-14 23:38:51.469 W/System.err(28024):         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
02-14 23:38:51.469 W/System.err(28024):         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
02-14 23:38:51.469 W/System.err(28024):         at java.lang.Thread.run(Thread.java:818)
02-14 23:38:51.469 W/System.err(28024): Try to load tvm4j (runtime packed version) ...
02-14 23:38:51.469 W/linker  (28024): /data/app/org.apache.tvm.android.demo-1/lib/arm64/libtvm4j_runtime_packed.so: unused DT entry: type 0x6ffffef5 arg 0x54f0
02-14 23:38:51.469 W/linker  (28024): /data/app/org.apache.tvm.android.demo-1/lib/arm64/libtvm4j_runtime_packed.so: unused DT entry: type 0x6ffffffe arg 0x514d8
02-14 23:38:51.469 W/linker  (28024): /data/app/org.apache.tvm.android.demo-1/lib/arm64/libtvm4j_runtime_packed.so: unused DT entry: type 0x6fffffff arg 0x2
02-14 23:38:51.479 W/System.err(28024): libtvm4j loads successfully.
02-14 23:38:51.479 E/AndroidRuntime(28024): FATAL EXCEPTION: AsyncTask #1
02-14 23:38:51.479 E/AndroidRuntime(28024): Process: org.apache.tvm.android.demo, PID: 28024
02-14 23:38:51.479 E/AndroidRuntime(28024): java.lang.RuntimeException: An error occured while executing doInBackground()
02-14 23:38:51.479 E/AndroidRuntime(28024):     at android.os.AsyncTask$3.done(AsyncTask.java:304)
02-14 23:38:51.479 E/AndroidRuntime(28024):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
02-14 23:38:51.479 E/AndroidRuntime(28024):     at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
02-14 23:38:51.479 E/AndroidRuntime(28024):     at java.util.concurrent.FutureTask.run(FutureTask.java:242)
02-14 23:38:51.479 E/AndroidRuntime(28024):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
02-14 23:38:51.479 E/AndroidRuntime(28024):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
02-14 23:38:51.479 E/AndroidRuntime(28024):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
02-14 23:38:51.479 E/AndroidRuntime(28024):     at java.lang.Thread.run(Thread.java:818)
02-14 23:38:51.479 E/AndroidRuntime(28024): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'org.apache.tvm.Function org.apache.tvm.Function.pushArg(java.lang.String)' on a null object reference
02-14 23:38:51.479 E/AndroidRuntime(28024):     at org.apache.tvm.Module.load(Module.java:140)
02-14 23:38:51.479 E/AndroidRuntime(28024):     at org.apache.tvm.Module.load(Module.java:146)
02-14 23:38:51.479 E/AndroidRuntime(28024):     at org.apache.tvm.android.demo.MainActivity$LoadModleAsyncTask.doInBackground(MainActivity.java:186)
02-14 23:38:51.479 E/AndroidRuntime(28024):     at org.apache.tvm.android.demo.MainActivity$LoadModleAsyncTask.doInBackground(MainActivity.java:124)
02-14 23:38:51.479 E/AndroidRuntime(28024):     at android.os.AsyncTask$2.call(AsyncTask.java:292)
02-14 23:38:51.479 E/AndroidRuntime(28024):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)

As you can see, libCacheFilePath occurs while Finish Module.load not, which means that Module modelLib = Module.load(libCacheFilePath); failed. Meanwhile, the app.log says Caused by: java.lang.NullPointerException.

So, I locate the crash is caused by Module.load func or libCacheFilePath, however libCacheFilePath=/data/data/org.apache.tvm.android.demo/cache/tvm4j_demo_-856121318/deploy_lib_cpu.so, and I find deploy_lib_cpu.so indeed exist in

➜  app git:(dev/kindlehe/walk-through) ✗ find ./ -name deploy_lib_cpu.so
.//build/intermediates/merged_assets/release/out/deploy_lib_cpu.so
.//build/intermediates/merged_assets/debug/out/deploy_lib_cpu.so
.//build/intermediates/assets/release/deploy_lib_cpu.so
.//build/intermediates/assets/debug/deploy_lib_cpu.so
.//src/main/assets/deploy_lib_cpu.so

Finally, I conclude the crash is caused by Module.load func.

But, I don' t know how to sovle the crash problem, begging for your kind-hearted help sincerely!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions