直接调吗?应该有些前期的配置吧,还有dll和so都可以调吗?最好给个简单的例子

解决方案 »

  1.   

      可以用native方法,其实现步骤: 1、在Java中声明native()方法,然后编译;
        2、用javah产生一个.h文件;
        3、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件);
        4、将第三步的.c文件编译成动态链接库文件;
        5、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问了。  首先写好JAVA文件
    public class NativeExampleActivity extends Activity {
    TextView textView01;
    private Button btnStart;

        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);        btnStart = (Button) this.findViewById(R.id.btnStart);
    btnStart.setOnClickListener(clickButtonStart);
            textView01 = (Button) this.findViewById(R.id.btnStart);    }
        
        private  OnClickListener clickButtonStart = new OnClickListener()
        {
    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
    textView01.setText("4+5="+addFunction(4, 5));
    }    
        };  
        
        static {
            try {
                Runtime.getRuntime().loadLibrary("org_natives_example_NativeExampleActivity");
            } catch (Throwable t) {
            }
        }
        
        public native int addFunction(int a, int b);
    }
        然后在工程的bin/classes目录下执行javah -jni org.natives.example.NativeExampleActivity,    就会在根目录下得到一个org_natives_example_NativeExampleActivity.h的文件    然后根据头文件的内容编写com_hode_hodeframework_modelupdate_CheckFile.c文件  #include "com_hode_hodeframework_modelupdate_CheckFile.h"
    JNIEXPORT jint JNICALL Java_org_natives_example_NativeExampleActivity_addFunction
      (JNIEnv *, jobject, jint a, jint b)
      {
      return (a + b);
      }
    把c文件编译成ko文件,push到手机的system/lib目录下。就可以了。
    用命令cl -LD org_natives_example_NativeExampleActivity.cpp,可以编译成lib,dll,obj文件
      

  2.   

    我在javah时出错“错误: 无法访问android.app.Activity
      找不到android.app.Activity的类文件”
    如果进到包里面在javah的话提示“错误: 找不到 'NativeExampleActivity' 的类文件。”
      

  3.   

    还有我没看明白调用的是什么库,假如我想要用的是已有的a.dll(a.so也可以)该如何调用?
      

  4.   

    android项目的话  先把xxx.so放到libs/armeabi/下面  没有libs自己建一个
    然后代码直接引用System.loadLibrary("xxx");
    然后各种public native 方法。。
      

  5.   

    如果还不明白 请google Android  NDK 编译你就晓得怎么用了
      

  6.   

    好像是不能直接导入的,先按4楼的方法创建jni的so文件,然后在那个so文件中调用第三方的so,参考http://www.360doc.com/content/11/0609/19/1861654_122741977.shtml
      

  7.   

    我找到一种方法了,用JNA。
    JNI太复杂了,javah时总有问题,成功过一次,之后就没对过,原理也很难懂。
    http://apps.hi.baidu.com/share/detail/31610125
      

  8.   

    貌似楼主有个JNA的分享
    链接怎么不通啊?
      

  9.   

    楼主,在android中JNA怎么调用so文件的?能给个例子不?