首页 > 代码库 > 安卓NDK流程
安卓NDK流程
- 定义wrap类,声明native函数,加载库
package com.ndk.hello;public class Classs { public native String say_hello(); static { System.loadLibrary("HelloAndroidNDK"); }}
- 在项目根目录创建jni文件夹,在此文件夹生成JNI头文件
javah -classpath ../bin/classes com.ndk.hello.Classs
- 为生成的com_ndk_hello_Classs.h写实现文件
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_ndk_hello_Classs */#ifndef _Included_com_ndk_hello_Classs#define _Included_com_ndk_hello_Classs#ifdef __cplusplusextern "C" {#endif/* * Class: com_ndk_hello_Classs * Method: say_hello * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_ndk_hello_Classs_say_1hello (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif
#include "com_ndk_hello_Classs.h"JNIEXPORT jstring JNICALL Java_com_ndk_hello_Classs_say_1hello(JNIEnv * env, jobject this){ return (*env)->NewStringUTF(env,"Hello Java NDK!");}
- 在jni文件夹写Android.mk文件
# 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.#LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := HelloAndroidNDKLOCAL_SRC_FILES := com_ndk_hello_Classs.cinclude $(BUILD_SHARED_LIBRARY)
- 在jni文件夹中交叉编译mk文件
$NDK/ndk-build
- 将生成libs/armeabi/libHelloAndroidNDK.so文件
- 编写安卓框架程序,调用native方法。
package com.ndk.hello;import com.ndk.hello.Classs;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;public class HelloAndroidNDK extends Activity{ @Override public void onCreate(Bundle s) { super.onCreate(s); Classs c = new Classs(); String say = c.say_hello(); TextView tv = new TextView(this); tv.setText(say); setContentView(tv); }}
安卓NDK流程
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。