标签:
  1.jni是Java native interface的缩写,java 本地接口。它提供了若干的API实现了Java和其他语言的通信(主要是C/C++)。从Java1.1开始,jni标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。 
  2.ndk:Android NDK 是在SDK前面又加上了“原生”二字,即Native Development Kit,因此又被Google称为“NDK”。 
  3..so:共享函数库,在可执行程序启动的时候加载,所有程序重新运行时都可自动加载共享函数库中的函数。
4.为何要使用ndk?
     1. 代码的保护,由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。
     2. 在NDK中调用第三方C/C++库,因为大部分的开源库都是用C/C++代码编写的。
     3. 便于移植,用C/C++写的库可以方便在其他的嵌入式平台上再次使用。
1.首先下载ndk包 
2.进入菜单右上角file->Project Structure:进入下面界面,在最下面Android ndk location选择本地ndk的目录点击OK
 
3.新建项目后,选择file->new ->Floder->jni Folder: 
        这时java目录下会出现一个jni文件夹 
4.配置本地项目的Build.gradle,选中Module下的Build.gradle,添加如下内容
apply plugin: ‘com.android.application‘
android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"
    defaultConfig {
        applicationId "com.example.lancao.myhellojni"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        //在此处添加配置
        ndk{
            moduleName "lancao"
            ldLibs "log","z","m"
            abiFilters "armeabi","armeabi-v7a","x86"
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘
        }
    }
}
dependencies {
    compile fileTree(dir: ‘libs‘, include: [‘*.jar‘])
    testCompile ‘junit:junit:4.12‘
    compile ‘com.android.support:appcompat-v7:23.3.0‘
}
5.静态加载动态库,编写naive方法,和普通java方法基本没区别。
package com.example.lancao.myhellojni;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView textView = (TextView) findViewById(R.id.text);
        textView.setText(getStringFromNative());
    }
    //静态加载动态库
    static {
        System.loadLibrary("lancao");
    }
//申明本地方法
    public   native String getStringFromNative();
}
6.生成头文件。在android studio 的命令行界面中,进入/app/src/main/java目录下,执行命令:
javah -d  ../jni com.example.lancao.myhellojni.MainActivity这样就在src/main/目录中新增了jni目录,以及com_example_lancao_myhellojni_MainActivity.h头文件。 
   
 7.com_example_lancao_myhellojni_MainActivity.h的具体内容为
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_lancao_myhellojni_MainActivity */
#ifndef _Included_com_example_lancao_myhellojni_MainActivity
#define _Included_com_example_lancao_myhellojni_MainActivity
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
#endif
8.新建c本地文件
//导入本地的库文件,必须添加
#include <android/log.h>
#include <jni.h>
JNIEXPORT jstring JNICALL Java_com_example_lancao_myhellojni_MainActivity_getStringFromNative(JNIEnv * env , jobject j)
{
//返回一个字符串“hello from jni !”
    return (*env)->NewStringUTF(env,"Hello From JNI!");
}9.这样就完成了交叉编译之输出helloWorld了
JNI交叉编译第一篇之输出helloWorld(android studio版)
标签:
原文地址:http://blog.csdn.net/myloveyaqiong/article/details/51362618