ndk初体验

    技术2022-05-20  63

    (其实只是写了个helloworld)

    1.跟往常一样,先建一个Android的project

    2.在工程的根目录下面建一个jni的文件夹,里面创建你需要用到的c/c++源文件以及Android.mk.

    3.编写c/c++代码:以下是我的测试:

    #include <jni.h> //这个加上 jstring Java_cn_com_alfred_MyJNI_stringFromJNI(JNIEnv* env, jobject thiz) { return (*env)->NewStringUTF(env, "Alfred, I love you!/nYou are the best"); }  

    4.编写Android.mk,实际上这是一个makefile,用来告诉NDK需要编译哪些文件,生成哪些模块

     

    LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := MyJNI LOCAL_SRC_FILES := test.c include $(BUILD_SHARED_LIBRARY) 

    其中LOCAL_PATH表示c/c++源代码文件的位置;LOCAL_MODULE表示生成的共享库的名称;LOCAL_SRC_FILES代表c/c++代码的文件。不需要把头文件列在里面;头文件的依赖关系是ndk自动计算的。

    5.修改java代码:

    package cn.com.alfred; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class MyJNI extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView textView = (TextView)findViewById(R.id.textView); textView.setText(stringFromJNI()); } public native String stringFromJNI(); //在java文件声明这个函数 static { System.loadLibrary("MyJNI"); //读入共享库 } } 

    6.编译:此处直接用Eclipse的直接编译

    选中项目,选project->Properites->Builders->New->Program

     

    Main 选项卡:

    Name:Android NDK Builder

    Location: D:/cygwin/bin/bash.exe

    WorkDirectory: D:/cygwin/bin

    Arguments:

    --login -c "cd /cygdrive/E/test/workspaces/eclipse/MyJNI/jni && $NDK/ndk-build"

    不多说,一看就能明

     

    这里要specify到你的项目

    同样这里也要specify你的project。然后点ok。

    要勾上。

    不过要注意,此后他经常会build,搞到你写代码非常烦,可以在写完代码需要看效果的时候再勾上。

    到此,完毕。

    但是,写起程序来还是要注意很多东西,什么类型的跟c/c++虽然一样,但是名字不一样。

    好,写到这里,去上毛概。

    明天继续努力,优化转换算法。

     


    最新回复(0)