2016-08-28 108 views
0

目标

在android系统创建天然活性创建原生Android活动:通过命令行只(生成文件)

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

问题

  • 我已经通过makefile在我的Samsung S7上创建了一个(java-native)android apk安卓版。
  • 当我尝试运行该应用程序时,它与“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 
+0

您似乎在构建libnative-activity.a,而不是libnative-activity.so。 – solidpixel

+0

是什么让你觉得呢?查看标志'''-fpic'''和''''''''''''''。我也通过'''readelf''检查了'''.so'''。这似乎也很好。 –

+0

您正在将最终命令的输出文件定义为“-o libnative-activity.a”,但是如果文件显示为OK,那么我想不是这样。 – solidpixel

回答

0

它正常工作与谷歌的预编译armeabi-V7A libnative-activity.so

如果工作正常,则受精卵的过程是32位的。如果您没有更改其他任何内容,那么这意味着您正尝试将64位库加载到32位进程中,这不起作用。

如果你建立一个32位库,它能正常工作吗?这至少会证明你的构建正在做正确的事情,而这只是一个需要创建流程的变化。