NDK 入门
16lz
2021-01-26
初步使用NDK
在windows平台,需要下载Cygwin工具才能编译C文件,长期写JAVA,突然写C程序感觉挺爽的,O(∩_∩)O~
然后到Android官方下载Android NDK.
首先创建一个简单Android Project
编写一个JNI.java类,主要放置native方法
package com.birds.android.ndk;/** * @author gaofeng * @2013-10-25 * */public class JNI {public native String getString(String str);}
非常简单就是打印一个字符串
编译Eclipse工程,然后cmd进入project到bin/classes目录下,生成一个头文件
输入命令 javah -d ../../jni com.birds.android.ndk.JNI -d是输出到指定目录
在jni目录下建一个jni.c文件,头文件是刚刚生成的 com_birds_android_ndk_JNI.h
开始实现函数体内容
#include "com_birds_android_ndk_JNI.h"JNIEXPORT jstring JNICALL Java_com_birds_android_ndk_JNI_getString (JNIEnv *env, jobject job, jstring jstr) { const char* s1 = "I got a string";return (*env)->NewStringUTF(env,s1);}
编写一个mk配置文件 用来编译生成so模块
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := first-jni -- 这个是自己起的模块名字
LOCAL_SRC_FILES := jni.c -- 要编译的c源文件
include $(BUILD_SHARED_LIBRARY)
进入工程下面输入ndk-build命令
自动会在项目的libs目录里面生成so模块文件
在Activity里面调用
static {System.loadLibrary("first-jni"); //这地方写模块名字}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.btn1).setOnClickListener(this);}@Overridepublic void onClick(View v) {if (v.getId() == R.id.btn1) {String s = new JNI().getString("");Toast.makeText(this, s, Toast.LENGTH_SHORT).show();}}
更多相关文章
- android busybox 配置
- [置顶] Android系统安全之旅 第1章 运行编译过的Android系统
- 解决升级到Android(安卓)Studio 3 Beta版本编译异常
- Android培训班(42)
- 四、android studio使用自己库编译工程
- Android(安卓)系统开发生成签名供 Android(安卓)Studio 使用
- 【转】Android(安卓)OTA 升级之一:编译升级包
- Android中Media Framework浅析(二)——MediaServer
- IOS之UIViewController