AndroidStudio环境下ndk开发
2015-10-19 17:57
141 查看
AndroidStudio环境下ndk开发的基本步骤是,写本地方法生成头文件,用c/c++实现本地方法,配置android.mk文件生成so文件。具体步骤如下
1.创建android工程:MyJni。
2.写本地方法,并编译成class文件,在\app\build\intermediates\classes\debug中找。
3.用命令行编译成头文件:
javah -d jni -classpath D:\devolp\SDK\SDK\platforms\android-23\android.jar;D:\devolp\SDK\SDK\extras\android\support\v4\android-support-v4.jar;D:\devolp\SDK\SDK\extras\android\sup
port\v7\appcompat\libs\android-support-v7-appcompat.jar;E:\AndroidDev\Utils\MyJni\app\build\intermediates\classes\debug com.vko.myjni.MainActivity
在编译头文件时,可以选择javah -d app/src/jni 这样就可以省略第7步了
4.在jni文件夹中建c/c++文件,并写入代码
5.在jni文件夹中新建并配置android.mk文件
mk文件具体的可以参考android-ndk-r9\docs下的文档
6.编译c/c++文件成为so文件。用命令行:ndk-build
可以看到
7.在app目录中build.gradle文件中加入
组成如下:
7.将libs中的文件包括文件夹全部拷入到app目录中的libs文件夹中
删掉项目目录下libs、jni、obj目录不影响程序运行
8.运行android程序
1.创建android工程:MyJni。
2.写本地方法,并编译成class文件,在\app\build\intermediates\classes\debug中找。
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 txtView = (TextView) findViewById(R.id.txt); txtView.setText(getStringFromNative()); } }
3.用命令行编译成头文件:
javah -d jni -classpath D:\devolp\SDK\SDK\platforms\android-23\android.jar;D:\devolp\SDK\SDK\extras\android\support\v4\android-support-v4.jar;D:\devolp\SDK\SDK\extras\android\sup
port\v7\appcompat\libs\android-support-v7-appcompat.jar;E:\AndroidDev\Utils\MyJni\app\build\intermediates\classes\debug com.vko.myjni.MainActivity
在编译头文件时,可以选择javah -d app/src/jni 这样就可以省略第7步了
4.在jni文件夹中建c/c++文件,并写入代码
#include <jni.h> /* Header for class com_vko_myjni_MainActivity */ #ifndef _Included_com_vko_myjni_MainActivity #define _Included_com_vko_myjni_MainActivity #ifdef __cplusplus //以标准C形式输出 extern "C" { #endif JNIEXPORT jstring JNICALL Java_com_vko_myjni_MainActivity_getStringFromNative (JNIEnv * env, jobject){ return (*env)->NewStringUTF(env,"Hello From JNI!"); } #ifdef __cplusplus } #endif
5.在jni文件夹中新建并配置android.mk文件
mk文件具体的可以参考android-ndk-r9\docs下的文档
#必须以LOCAL_PATH变量开头 LOCAL_PATH := $(call my-dir) #清除变量 include $(CLEAR_VARS) LOCAL_MODULE := JniTest LOCAL_SRC_FILES := main.c LOCAL_DEFAULT_CPP_EXTENSION := cpp #include $(BUILD_EXECUTABLE) #编译生成动态共享库 include $(BUILD_SHARED_LIBRARY)
6.编译c/c++文件成为so文件。用命令行:ndk-build
可以看到
7.在app目录中build.gradle文件中加入
sourceSets { main { jniLibs.srcDirs = ['libs'] } }
组成如下:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "com.vko.myjni"
minSdkVersion 10
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets { main { jniLibs.srcDirs = ['libs'] } }
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.0.1'
}
7.将libs中的文件包括文件夹全部拷入到app目录中的libs文件夹中
删掉项目目录下libs、jni、obj目录不影响程序运行
8.运行android程序
相关文章推荐
- 【ToolBar】Android ToolBar之完全解析
- [Android] 抽象布局——include、merge 、ViewStub
- Android仪表盘
- Android Support Library 2015
- android导入工程出现红色感叹号的解决方法
- Android-Parcelable理解与使用(对象序列化)
- android、java中判断图片文件的格式
- GridView & ListView (Android盒子开发)
- Android开发:shape和selector和layer-list的(常用说明)
- android 如何让activity运行时不显示
- Android--边距(margin)与内边距(padding)
- AndroidStudio+ideasmali动态调试smali汇编
- android vlc compile error fix
- Android设备root及xposed&Privacy的安装
- Android 滚动条属性
- Android编译过程详解(一)
- Android 简单图片浏览器 ImageView
- 模拟Android多点触控
- android 控制POS机图文打印(二)
- 修改Android OS操作系统的代码,自动请求AGPS