android NDK开发demo(基于android )

来源:互联网 发布:中英文小说阅读软件 编辑:程序博客网 时间:2024/06/06 02:06
利用android studio进行NDK开发
一.新建android项目

新建Myndkproject工程然后再新建一个class为MyHelloNDK的类,定义native方法。

public class MyHelloNDK {
static {
System.loadLibrary("myhellotest");
} public native String getString();//本地方法
}


二.配置NDK

  如截图所示,如果没有配置的话,请先下载ndk,然后如截图所示配置。


三.生成so库文件

1.make project生成MyHelloNDK对应的.class文件,然后进入.class文件目录

在路径:app\build\intermediates\classes\debug


2.进入该路径后,调用jni.h命令生成对应的.h文件

利用android studio的terminal进入到debug路径下,执行如下命令:

javah -jni my.com.myndkproject.MyHelloNDK //-jni 后为你的类的包名加类名

3.执行完成后会在该路径下生成对应的.h文件,生成的代码如下

/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class my_com_myndkproject_MyHelloNDK */#ifndef _Included_my_com_myndkproject_MyHelloNDK#define _Included_my_com_myndkproject_MyHelloNDK#ifdef __cplusplusextern "C" {#endif/* * Class:     my_com_myndkproject_MyHelloNDK * Method:    getString * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_my_com_myndkproject_MyHelloNDK_getString  (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif

4.在工程的main目录下新建一个名字为jni的目录,然后将刚才的 .h文件剪切过来。在jni目录下新建一个c文件,随意取名,我的叫myhellotest.c 。然后编辑代码如下

//// Created by c_lj on 16-12-30.//#include "my_com_myndkproject_MyHelloNDK.h"/* * Class:     my_com_myndkproject_MyHelloNDK * Method:    getString * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_my_com_myndkproject_MyHelloNDK_getString  (JNIEnv * env, jobject obj){     return (*env)->NewStringUTF(env,"This just a test for Android Studio NDK JNI developer!");}

5.检查配置工程的local.properties文件中添加NDK路径,有些版本默认未配置

ndk.dir=/home/c_ljf/AndroidSDK/android-sdk-linux/ndk-bundlesdk.dir=/home/c_ljf/AndroidSDK/android-sdk-linux


6.配置app/build.gradle的文件
apply plugin: 'com.android.application'android {    compileSdkVersion 24    buildToolsVersion "25.0.0"    defaultConfig {        applicationId "my.com.myndkproject"        minSdkVersion 15        targetSdkVersion 24        versionCode 1        versionName "1.0"        ndk {            moduleName "myhellotest"         //生成的so名字            abiFilters "armeabi", "armeabi-v7a", "x86"  //输出指定三种abi体系结构下的so库。        }    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }}dependencies {    compile 'com.android.support:appcompat-v7:24.2.1'    compile fileTree(dir: 'libs', include: ['*.jar'])    testCompile 'junit:junit:4.12'}
7.build 工程就可以生成对应的库了

1.MainActivity.java

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        TextView tv=(TextView)findViewById(R.id.tv);        MyHelloNDK myHelloNDK=new MyHelloNDK();        tv.setText(myHelloNDK.getString());    }}
2.布局文件

<?xml version="1.0" encoding="utf-8"?><RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    android:paddingBottom="@dimen/activity_vertical_margin"    tools:context="my.com.myndkproject.MainActivity">    <TextView        android:text="Hello World!"        android:id="@+id/tv"        android:layout_width="wrap_content"        android:layout_height="wrap_content"/></RelativeLayout>
四.以后总结,马上下班了。
参考1:http://blog.csdn.net/yanbober/article/details/45309049/

参考2:http://www.open-open.com/lib/view/open1475221220286.html#articleHeader1


0 0
原创粉丝点击