android NDK 开发实例

本文详细介绍如何在Eclipse环境下利用NDK进行Android项目的JNI开发,包括环境搭建、C/C++代码编写、编译及调试等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发环境: 已安装cygwin的win xp  系统,  已安装好cdt 的eclipse indigo(3.7.2)  即已配置好NDK开发环境
1、在eclipse中正常创建一个android 项目
主文件 MainActivity.java

package lee.study.myndkhellojni;


import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;


public class MainActivity extends Activity {


	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
//		setContentView(R.layout.activity_main);
		
		TextView textView =  new TextView(this);
		textView.setText(stringMyNdk());
		setContentView(textView);
	}




	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}




	public native String  stringMyNdk ();  
    public native String  stringMyNdk2 ();  
  
    static {  
        System.loadLibrary("myNDK");  
    }  
}
2、使用cygwin命令行进入工程目录这里是 e:/WorkSpace/MyNdkHelloJni
cd /cygdrive/e/WorkSpace/MyNdkHelloJni
mkdir jni
3、创建C文件 myndk-hello-jni.c 内容用如下:
/*
 * Copyright (C) 2009 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */
#include <string.h>
#include <jni.h>

/* This is a trivial JNI example where we use a native method
 * to return a new VM String. See the corresponding Java source
 * file located at:
 *
 *   apps/samples/hello-jni/project/src/com/example/hellojni/HelloJni.java
 */
jstring
Java_lee_study_myndkhellojni_MainActivity_stringMyNdk( JNIEnv* env,
                                                  jobject thiz )
{
    return (*env)->NewStringUTF(env, "Hello from JNI ---11111  !");
}

jstring
Java_lee_study_myndkhellojni_MainActivity_stringMyNdk2( JNIEnv* env,
                                                  jobject thiz )
{
    return (*env)->NewStringUTF(env, "Hello from JNI --- 22222 !");


}
注意:方法名称一定要按照格式: Java_pacakege_class_mathod 形式来命名
还有一点需要注意的是,在JNI的Native函数中,其前两个参数JNIEnv *和jobject 是必需的——前者是一个JNIEnv 结构体的指针是JNI的核心数据,这个结构体中定义了很多JNI的接口函数指针,使开发者可以使用JNI所定义的接口功能;
JNIEnv *env参数的使用
所有JNI接口的第一个参数是JNIEnv *env, 在C中,使用方法是
(*env)->NewStringUTF(env, "Hello from JNI ---11111    !");
但在C++中,其调用方法是
env->NewStringUTF("Hello from JNI --- 2222 !");
4、创建Android.mk文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := myNDK
LOCAL_SRC_FILES := myndk-hello-jni.c
include $(BUILD_SHARED_LIBRARY)
5、在cygwin命令行执行编译命令
$NDK/ndk-build
其中NDK是cygwin设置的环境变量(通过echo $NDK 命令可以查看,我机器配置为:/cygdrive/d/android-ndk-r9),参考上一篇博客

执行该命令后会在libs目录下生成 armeabi/libhello-jni.so  项目总体目录结构如下



6、重新编译android项目,生成apk即可。

7、真机运行结果:




8、总结:C语言的函数还有待开发,不晓得怎么用的(JNIEnv* env, jobject thiz)


<pre name="code" class="html"><pre name="code" class="html">





























                
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值