NDk编译过程与问题集

本文详细介绍了如何在Android工程中集成并调用JNI函数的完整流程,包括创建JNI函数、编译JNI代码、生成.h头文件、实现函数、添加Android.mk文件、编译JNI及整合到Android项目中。通过实际操作步骤,帮助开发者掌握JNI与Android应用集成的关键技巧。

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

0.使用eclipse正常创建一个android工程

0.1 添加jni函数如下

jni1Activity.java

==================

package com.chase.test.jni1;

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

public class jni1Activity extends Activity {
static {
System.loadLibrary("chasejni1");
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText(testPrint("chase jni"));
setContentView(tv);
}

private native String testPrint(String what);
}


0.2 编译得到bin目录,下面出现apk等文件


1.产生jni的.h头文件

1.0 执行命令(命令必须在bin下面classes目录里面执行,否则javah无法解析文件目录路径,就找不到class,无法产生.h文件)

javah com.chase.test.jni1.jni1Activity

javah -classpath ../bin/classes myj.cameratest.FilterWrapper


1.1得到com_chase_test_jni1_jni1Activity.h

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_chase_test_jni1_jni1Activity */


#ifndef _Included_com_chase_test_jni1_jni1Activity
#define _Included_com_chase_test_jni1_jni1Activity
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_chase_test_jni1_jni1Activity
 * Method:    testPrint
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_chase_test_jni1_jni1Activity_testPrint
  (JNIEnv *, jobject, jstring);


#ifdef __cplusplus
}
#endif
#endif

1.2 将com_chase_test_jni1_jni1Activity.h复制到工程目录(src同级目录)下的jni文件夹里面

1.3 建立com_chase_test_jni1_jni1Activity.c实现函数

#include <jni.h>
#define LOG_TAG "chasejni"


/* Native interface, it will be call in java code */
JNIEXPORT jstring JNICALL Java_com_simon_HelloWorld_printJNI(JNIEnv *env, jobject obj, jstring str)
{
    return (*env)->NewStringUTF(env, str);
}

1.4 添加Android.mk

找了一个已经存在的mk文件,修改下面两行就可以

LOCAL_MODULE    := chase-jni -->名字可以随便取.但是名字要与System.loadLibrary("chasejni1");一致
LOCAL_SRC_FILES := com_chase_test_jni1_jni1Activity-jni.c -->名字可以随便取.


2.0 编译JNI

参考前面文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值