Android Studio jni开发

本文详细介绍了如何在Android Studio 1.5环境下使用JNI技术进行开发的过程,包括配置NDK环境变量、创建JNI桥接方法、生成并编译C/C++代码等关键步骤。

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

前提

编程环境介绍:
Android Studio版本1.5

此处 不介绍各种的环境变量设置(比如JAVA_HOME;CLASSPATH;NDK_ROOT;Path)

首先,需要下载NDK,配置环境。
这里写图片描述
下载并安装需要一段时间,然后进行下一步,项目右键打开Open Module Settings(快捷键 F4 )
这里写图片描述
路径是在SDK目录下的ndk-bundle文件夹,这个是下载自动安装到的目录。

在开始JNI开发之前,需要确认你的javah命令是否可以使用。

javah命令不好使,或许是因为没有设环境变量。
这里写图片描述
通过命令行输入javah回车后,可以打印出相应信息,算是成功了。

接下来可以进入JNI开发了。

正题

首先,新建 一个项目,并按照如下方式写上代码

public class MainActivity extends AppCompatActivity {
    static {
        System.loadLibrary("JniTest");
    }
    public native String getStringFromNative();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView tv = (TextView) findViewById(R.id.tv);
        tv.setText(getStringFromNative());
    }
}

然后,构建项目生成MainActivity.class文件,查看在如下目录:

\项目文件夹\app\build\intermediates\classes\debug\包名\MainActivity.class

接下来,用命令javah生成.h文件。这里需要注意的是要进入 \app\src\main的目录下执行javah命令,为的是生成的 .h 文件同样是在\app\src\main路径下,可以在Studio的工程结构中直接看到。
这里写图片描述

javah -d jni -classpath D:\Android\sdk\extras\android\m2repository\com\android\support\appcompat-v7\23.2.1\appcompat-v7-23.2.1-sources.jar;..\..\build\int
ermediates\classes\debug com.glodon.ndk.MainActivity

回车之后,便可生成jni文件夹
这里写图片描述
编辑main.c文件
这里写图片描述
复制如下代码到main.c文件

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
#include <android/log.h>

#ifndef LOG_TAG
#define LOG_TAG "ANDROID_LAB"
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
#endif

/* Header for class lab_sodino_jnitest_MainActivity */

#ifndef _Included_com_glodon_ndk_MainActivity
#define _Included_com_glodon_ndk_MainActivity
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class: com_glodon_ndk_MainActivity
 * Method: getStringFromNative
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_glodon_ndk_MainActivity_getStringFromNative
  (JNIEnv * env, jobject jObj){
      LOGE("log string from ndk.");
      return (*env)->NewStringUTF(env,"Hello From JNI!");
  }

#ifdef __cplusplus
}
#endif
#endif

到这里后,我们再执行一个”Build->Make Project”,发现Messages里报错
这里写图片描述
需要去项目根目录下的 gradle.properties 文件里添加如下代码:

android.useDeprecatedNdk=true

再次去执行”Build->Make Project”,还是会报错

修改build.gradle配置
工程中共有两个build.gradle配置文件,我们要修改的是在\app\build.gradle这个文件。为其在defaultConfig分支中增加上

ndk {  
    moduleName "JniTest"  
    ldLibs "log", "z", "m"  
    abiFilters "armeabi", "armeabi-v7a", "x86"  
} 

这里写图片描述

最后,去执行”Build->Make Project”。应该是成功啦。会生成一些.so文件
这里写图片描述

此时运行项目应该会得到如下结果

这里写图片描述

手机设备或者是模拟器界面上也会显示出 “Hello From JNI!”

这就表示成功啦!


在开发过程中,遇到了这样的一个问题,此处标记一下。

错误: 无法访问android.support.v7.app.AppCompatActivity
原因:编译的classpath未加入v4和v7库。

解决办法:javah -d jni -classpath D:\Android\sdk\extras\android\m2repository\com\android\support\appcompat-v7\23.2.0\appcompat-v7-23.2.0-sources.jar;….\build\intermediates\classes\debug com.glodon.ndk.MainActivity
将路径改为自己的路径,我的是在这里的
这里写图片描述

此处记录一下参考地址
http://blog.youkuaiyun.com/sodino/article/details/41946607
http://blog.youkuaiyun.com/yanbober/article/details/45309049

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值