Android提供了NDK来供开发人员调用C/C++所写的SO文件,基本方式如下:假设NDK的存放路径为:E:\android-ndk-1.5_r1,首先:在E:\android-ndk-1.5_r1\sources目录下建立自己存放.C文件的目录linux,里面写上自己的JNI方式的.C文件和Amdroid.mk配置文件;然后:在E:\android-ndk-1.5_r1\apps\linuxSO中写Application.mk文件;第三:进入到E:\android-ndk-1.5_r1,使用cygwin的命令make APP=linux生成供Android工程使用的liblinux.so文件;最后将该SO文件所在的libs文件夹拷贝到Android的工程下,即可以供我们调用。

现在我需要的是能够先生成一个invoked.so文件,然后再用上面的方法生成一个invoke.so文件,最后供我的Android工程调用,请问具体步骤,我使用了以下两种方式都不成功:
第一种为:
我的Android工程叫AndroidLinuxSOJNI,新建一个Activity类:com.hxf.linuxinvoke.LinuxSO
package com.hxf.linuxinvoke;

import android.app.Activity; 

 import android.os.Bundle; 

 import android.widget.TextView; 


 public class LinuxSO extends Activity { 

     public native int del(int x,int y); 

          

     public void onCreate(Bundle savedInstanceState) { 

 super.onCreate(savedInstanceState); 

          

         System.loadLibrary("linux"); 

         TextView  tv = new TextView(this); 

         LinuxSO ls = new LinuxSO(); 

         int del = ls.del(111, 12); 

         tv.setText("调用成功否,相减的值为:" + del);   

         setContentView(tv); 

     }


}
然后在E:\android-ndk-1.5_r1\sources\samples\linuxSO下面建立文件com_hxf_linuxinvoke_LinuxSO.c、com_hxf_linuxinvoke_LinuxSO.h、hello.c、hello.h首先用cygwin将hello.c、hello.h打包成libhello.so,然后在调用libhello.so打包com_hxf_linuxinvoke_LinuxSO.c、com_hxf_linuxinvoke_LinuxSO.h,打包命令如下:

gcc -c hello.c 

 ar cru hello.a hello.o 

 ranlib hello.a 

 gcc -shared hello.o -o libhello.so 

 /****打包com_hxf_linuxinvoke_LinuxSO为.SO文件供Android调用***/ 

 gcc -c com_hxf_linuxinvoke_LinuxSO.c 

 ar cru com_hxf_linuxinvoke_LinuxSO.a com_hxf_linuxinvoke_LinuxSO.o 

 ranlib com_hxf_linuxinvoke_LinuxSO.a 

 gcc -shared libhello.so com_hxf_linuxinvoke_LinuxSO.o -o liblinux.so


生成了我所需要的liblinuxSO.so,将其拷贝到Android的工程下的libs文件夹下面,使用上面的方式调用,发现动态库无法加载(??难道Android的make APP方式打包得到的.SO文件和我用cygwin打包得到的.SO文件不一样?也不知道怎么调试跟踪,希望了解如何跟踪调试加载动态库失败的朋友也帮忙指点指点)

我的第二种方式是:
        在E:\android-ndk-1.5_r1\sources\samples\linuxSO下面建立文件com_hxf_linuxinvoke_LinuxSO.c、c

om_hxf_linuxinvoke_LinuxSO.h、hello.c、hello.h,Android.mk文件中的内容如下: 

 LOCAL_PATH := $(call my-dir) 


 include $(CLEAR_VARS) 


 LOCAL_MODULE    := linuxSO 
LOCAL_SRC_FILES := com_hxf_linuxinvoke_LinuxSO.c
 include $(BUILD_SHARED_LIBRARY)
         在E:\android-ndk-1.5_r1\apps\linuxSO下面的内容为:
 APP_PROJECT_PATH := $(call my-dir)
 APP_MODULES      := linuxSO
 然后进入到E:\android-ndk-1.5_r1,在cygwin中使用make APP=linuxSO命令出现如下错误:

 out\apps\linuxSO\android-1.5-arm\objs\linuxSO/com_hxf_linuxinvoke_LinuxSO.o:In function ‘Java_com_hxf_linuxinvoke_LinuxSO_del’: sources\samples\linuxSO\com_hxf_linuxinvoke_LinuxSO.c:10:undefined reference to ‘sum’
 out/apps/li其中的sum是我在hello.c中的一个方法,也就是我无法找到libhello.so,请教请教各位高手,如何才能够实现调用已经有的.SO文件,然后生成供Android使用的.SO文件,万分感谢!