android 之 JNI 詳解(六)

4.編譯.c文件生存動態庫。

        arm-none-linux-gnueabi-gcc -I/home/a/work/android/jdk1.6.0_17/include -I/home/a/work/android/jdk1.6.0_17/include/linux -fpic -c com_hello_jnitest_Nadd.c

   arm-none-linux-gnueabi-ld -T/home/a/CodeSourcery/Sourcery_G++_Lite/arm-none-linux-gnueabi/lib/ldscripts/armelf_linux_eabi.xsc -share -o libNadd.so com_hello_jnitest_Nadd.o

       得到libNadd.so文件。
  以上在ubuntu中完成。

       5.將相應的動態庫文件push到avd的system/lib中:adb push libNadd.so /system/lib。若提示Read-only file system錯誤,運行adb remount命令,即可。

  Adb push libNadd.so /system/lib

  6.在eclipsh中運行原應用程序即可。

    對於一中生成的so文件也可採用二中的方法編譯進apk包中。只需在工程文件夾中建libsarmeabi文件夾(其他文件夾名無效,只建立libs文件夾也無效),然後將so文件拷入,編譯工程即可。

       二.使用NDK生成本地方法(ubuntu and windows)

  1.安裝NDK:解壓,然後進入NDK解壓後的目錄,運行build/host-setup.sh(需要Make 3.81和awk)。若有錯,修改host-setup.sh文件:將#!/bin/sh修改爲#!/bin/bash,再次運行即可。

  2.在apps文件夾下建立自己的工程文件夾,然後在該文件夾下建一文件Application.mk和項project文件夾。

java代碼:
  1. Application.mk文件:
  2. APP_PROJECT_PATH := $(call my-dir)/project
  3. APP_MODULES := myjni

複製代碼

        3.在project文件夾下建一jni文件夾,然後新建Android.mk和myjni.c。這裏不需要用javah生成相應的.h文件,但函數名要包含相應的完整的包、類名。

  4.編輯相應文件內容。

     Android.mk文件:

java代碼:

  1. # Copyright (C) 2009 The Android Open Source Project
  2. #
  3. # Licensed under the Apache License, Version 2.0 (the "License");
  4. # you may not use this file except in compliance with the License.
  5. # You may obtain a copy of the License at
  6. # Unless required by applicable law or agreed to in writing, software
  7. # distributed under the License is distributed on an "AS IS" BASIS,
  8. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  9. # See the License for the specific language governing permissions and
  10. # limitations under the License.
  11. #

  12. LOCAL_PATH := $(call my-dir)
  13. include $(CLEAR_VARS)
  14. LOCAL_MODULE := myjni
  15. LOCAL_SRC_FILES := myjni.c
  16. include $(BUILD_SHARED_LIBRARY)
  17. //myjni.c文件:


  18. #include
  19. jstring
  20. Java_com_hello_NdkTest_NdkTest_stringFromJNI( JNIEnv* env,jobject thiz )
  21. {
  22. return (*env)->NewStringUTF(env, "Hello from My-JNI !");
  23. }

  24. //myjni文件組織:
  25. a@ubuntu:~/work/android/ndk-1.6_r1/apps$ tree myjni
  26. myjni
  27. |-- Application.mk
  28. `-- project
  29. |-- jni
  30. | |-- Android.mk
  31. | `-- myjni.c
  32. `-- libs
  33. `-- armeabi
  34. `-- libmyjni.so

系列之Android 深入研究JNI(六)的帖子鏈接http://www.eoeandroid.com/thread-87028-1-1.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章