Android NDK编程
来源:互联网 发布:h3c配置vlan多个端口 编辑:程序博客网 时间:2024/05/16 07:53
系统:mac OS,IDE:Android Studio,sdk 5.0,ndk r10e
1, 找到当前用户下的,.bashrc, 添加 export PATH=~~~ndk/android-ndk-r10e:$PATH,
保存退出,执行 source ~/.bashrc 。其中~~~ndk/android-ndk-r10e是你ndk本地的路径
2,创建Android项目
public class MainActivity extends AppCompatActivity { static { System.loadLibrary("jni-test"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView txtOne = (TextView) findViewById(R.id.txt_test_1); txtOne.setText(get()); set("from jni"); } public native String get(); public native void set(String str); public static void methodCallByJni(String msgFromJni) { Log.i("-----jniCallJava", msgFromJni); }}
3,创建jni目录,与java目录同级,创建文件:test.cpp, Android.mk, Application.mk
test.cpp
#include <jni.h>#include <stdio.h>#ifdef __cplusplusextern "C" {#endifvoid callJavaMethod(JNIEnv *env, jobject thiz) { jclass clazz = env->FindClass("com/yuliang/ndktest/MainActivity"); if (clazz == NULL) { printf("find class MainActivity error!"); return; } jmethodID id = env->GetStaticMethodID(clazz, "methodCallByJni", "(Ljava/lang/String;)V"); if (id == NULL) { printf("find method methodCallByJni error!"); } jstring msg = env->NewStringUTF("msg send by methodCallByJni in test.cpp"); env->CallStaticVoidMethod(clazz, id, msg);}jstring Java_com_yuliang_ndktest_MainActivity_get(JNIEnv *env, jobject thiz) { printf("invoke get in c++\n"); callJavaMethod(env, thiz); return env->NewStringUTF("from JNI so!");}void Java_com_yuliang_ndktest_MainActivity_set(JNIEnv *env, jobject thiz, jstring string) { printf("invoke set from c++\n"); char* str = (char*)env->GetStringUTFChars(string, NULL); printf("%s\n", str); env->ReleaseStringUTFChars(string, str);}#ifdef __cplusplus}#endifAndroid.mk
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := jni-testLOCAL_SRC_FILES := test.cppinclude $(BUILD_SHARED_LIBRARY)Application.mk
APP_ABI := armeabi armeabi-v7a
4,切换到jni父目录,执行ndk-build进行编译,生成与jni同级目录libs下,有.so文件,与jni同级创建jniLibs,将.so复制到此处。
5,app的build.gradle文件进行修改
defaultConfig { applicationId "com.yuliang.ndktest" minSdkVersion 21 targetSdkVersion 23 versionCode 1 versionName "1.0" ndk { moduleName "jni-test" }}
packagingOptions { exclude 'lib/armeabi/libjni-test.so'}
6, 项目的gradle.properties
android.useDeprecatedNdk=true"
7, 项目的local.properties,你本机ndk路径
ndk.dir=................/ndk/android-ndk-r10e
8,如果多人开发,其他开发者需要做的事
(1)java代码相同
(2)创建同样的jinLibs,如果.so是armeabi,需要再创建armeabi目录
(3)项目的gradle.properties 文件 android.useDeprecatedNdk=true"
0 0
- Android NDK 编程实例
- Android NDK编程入门
- android ndk 编程
- Android: NDK编程入门
- Android NDK编程入门
- Android + NDK + cygwin 编程
- Android NDK编程入门
- Android NDK 编程
- Android: NDK编程
- Android开发 NDK编程
- android studio NDK编程
- Android: NDK编程入门
- Android NDK编程
- Android NDK编程
- Android Studio Ndk 编程
- Android Studio NDK 编程
- Android NDK编程
- Android JNI + NDK 编程
- Mac ssh
- 使用MiniProfiler给Asp.net MVC和Entity Framework号脉(附源码)
- 验证码识别
- android PullToRrefresh自定义下拉刷新动画
- 关于Hessian矩阵
- Android NDK编程
- 基于一致性hash算法 C++语言的实现详解
- BZOJ_P4291 [PA2015]Kieszonkowe(贪心)
- 设置ssh免密码验证
- Android学习笔记(30):选项卡TabHost
- MYSQL for mac 卸载篇
- xml文件中特殊符号代替
- 一些不错的技术文章
- spring mvc + mybaties+ mysql搭建--2016版