Android 开发手记之NDK 编程实例(3)

写完了 c 文件和 Makefile 文件,是否可以编译了呢?我们试一下。在 cygwin 中,进入工程目录,运行 ndk-build ,得到下面的结果:

Administrator@lenovo-0e47e162 /Android/android-ndk-r4/samples/myndk

$ ndk-build

Android NDK: Could not find application's manifest from current directory.

Android NDK: Please ensure that you are inside the project's directory !

/android/android-ndk-r4/build/core/build-local.mk:74: *** Android NDK: Aborting

.  Stop.

看到这个错误的意思是,缺少 manifest 文件。老版本的 NDk ,工程中有一个 apps ,里面包含了应用的程序文件和 Application.mk 。现在的版本,不需要我们自己编写 Application.mk, ,不过仍需要工程相关的配置信息。那么如何做到呢?需要手工去写 manifest 文件么?不需要。我们只需要在 Eclipse 中,创建工程就可以了,这些配置文件会自动生成。

前面讲过,在工程的 src 夹子下用来放置 Java 文件。我们打开 Eclipse ,然后新建一个 Android 工程,工程名就叫 MyJNI ,工程路径选择我们创建的 NDK 的路径。这里需要注意的是,工程名,包名等,需要和上面的 c 文件中的保持一致。

(Java _com_jpf_myjni _MyJNI _stringFromJNI)

Android 开发手记之NDK 编程实例

工程建立好后,编辑 src/com/jpf/myjni/MyJNI.java 文件,内容如下:

package com.jpf.myjni;

import android.app.Activity;

import android.widget.TextView;

import android.os.Bundle;

public class MyJNI extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super .onCreate(savedInstanceState);

TextView  tv = new TextView( this );

tv.setText( stringFromJNI() );

System. out .println( "Here we go ..." );

setContentView(tv);

System. out .println( "Done!" );

}

public native String  stringFromJNI();

static {

System.loadLibrary ( "myjni" );

}

}
 

需要说明的几点:

public native String  stringFromJNI(); 这句申明,带有 native 关键字,说明该方法是本地方法。

System.loadLibrary ( "myjni" ); 这句就是用来加载我们的 c 动态库的。上面声明的方法,具体实现,就在我们加载的库中。

linux

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwxfxs.html