2016-08-28 159 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位庫,它能正常工作嗎?這至少會證明你的構建正在做正確的事情,而這只是一個需要創建流程的變化。