仅通过命令行创建本地android活动(makefile)

Create native android activity via command line only (makefile)

本文关键字:活动 android makefile 命令行 创建      更新时间:2023-10-16

目标

在android中创建本地活动

  • 经由CCD_ 1&仅限Makefile
  • 不使用gradle, ant, maven, android.mk和所有其他东西

问题

  • 我已经通过makefile创建了一个(java原生(android apk,它在我的三星S7上运行良好
  • 当我尝试运行该应用程序时,它会以"Unable to load native library"崩溃
  • 我的直觉是我没有正确地编译/链接android_native_app_glue.c --> libandroid_native_app_glue.amain.cpp --> libnative-activity.so
  • 它与谷歌的预编译armeabi-v7a libnative-activity.so配合使用效果良好
  • 以下是源代码:https://github.com/skanti/Android-Manual-Build-Command-Line/tree/master/native-activity

我首先创建静态应用程序胶为:

aarch64-linux-android-gcc -march=armv8-a -c android_native_app_glue.c -o native_app_glue.o
aarch64-linux-android-ar rcs libandroid_native_app_glue.a native_app_glue.o

然后我编译main.cpp并将其与链接

aarch64-linux-android-c++ -march=armv8-a -std=c++11 -fPIC -c main.cpp -o main.o
aarch64-linux-android-c++ -shared -llog -landroid -lEGL -lGLESv1_CM -lnative_app_glue main.o -o libnative-activity.a

错误报告

AndroidRuntime: Process: com.example.native_activity, PID: 30897
AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.native_activity/android.app.NativeActivity}: java.lang.IllegalArgumentException: Unable to load native library: /data/app/com.example.native_activity-1/lib/arm64/libnative-activity.so

它与谷歌预编译的armeabi-v7a配合良好libnative-activity.so

如果这是有效的,那么合子过程是32位的。如果您没有更改任何其他内容,那么这意味着您正试图将64位库加载到32位进程中,但这是行不通的。

如果你构建一个32位库,它能正常工作吗?这至少可以证明您的构建做的是正确的,而且这只是一个需要的流程创建更改。