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

时间:2016-08-28 06:06:55

标签: java c++ android-ndk arm

目标

在android中创建原生活动

  • 通过vim&仅Makefile
  • 没有使用gradle, ant, maven, android.mk和其他所有东西

问题

  • 我已经通过makefile创建了一个(java-native)android apk,它在我的 Samsung S7 上运行良好。
  • 当我尝试运行该应用时,它与" Unable to load native library"崩溃。
  • 我的直觉是说我没有正确编辑/链接android_native_app_glue.c --> libandroid_native_app_glue.amain.cpp --> libnative-activity.so
  • 适用于 Google 预编译的armeabi-v7a libnative-activity.so
  • 以下是源代码:https://github.com/skanti/Android-Manual-Build-Command-Line/tree/master/native-activity

我首先创建静态app-glue:

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

1 个答案:

答案 0 :(得分:0)

  

适用于谷歌预编译的armeabi-v7a   libnative-activity.so

如果这样可行,则zygote进程为32位。如果你没有改变任何其他内容,那么这意味着你试图将64位库加载到32位进程中,这将无法正常工作。

如果构建32位库,它是否正常工作?这至少可以证明你的构建正在做正确的事情,而且只需要改变流程创建。