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

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