JNI交叉编译第一篇之输出helloWorld(android studio版)

一.关于于NDK

1.JNI简介

  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++写的库可以方便在其他的嵌入式平台上再次使用。

android studio下配置NDK环境

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了

时间: 2025-01-05 06:18:09

JNI交叉编译第一篇之输出helloWorld(android studio版)的相关文章

安卓实战开发之JNI入门及高效的配置(android studio一键生成.h,so及方法签名)

前言 以前也讲过NDK开发,但是开始是抱着好玩的感觉去开始的,然后呢会helloWord就觉得大大的满足,现在静下来想这NDK开发到底是干什么呢? NDK开发,其实是为了项目需要调用底层的一些C/C++的一些东西:另外就是为了效率更加高效些但是在java与C相互调用时平白又增大了开销(其实效率不见得有所提高),然后呢,基于安全性的考虑也是为了防止代码被反编译我们为了安全起见,使用C语言来编写这些重要的部分来增大系统的安全性,最后呢生成so库便于给人提供方便. 好了,我们来看一下qq的结构,我们就

Android JNI入门第一篇——HelloJni

android支持使用NDK开发C程序,关于配置NDK环境问题应该不用再赘述了,这个网上有很多,这里通过一篇实例来讲述简单的JNI开发,大家可以参考这篇文章(Get Your Eclipse-Integrated NDK On!)搭建Eclipse编译C语言为so文件的开发环境. native方法实现步骤如下: 1.在Java中声明native()方法,然后编译(javac): 2.用javah产生一个.h文件: 3.编写包含.h文件的c文件 4.编译c文件 5.使用编译成功的so文件. 第一步

篇二、理解Android Studio的视图和目录分析,这个是转载

原文链接:http://blog.csdn.net/siyehuazhilian/article/details/42123563 AS一共有三种视图.我们来分别分析每一种视图的作用. 一.Project视图.(白色字体的目录/文件可不关注) 图片中的链接 Gralde介绍:http://stormzhang.com/devtools/2014/12/18/android-studio-tutorial4/ GIT/github使用:http://www.worldhello.net/gotgi

安卓学习第一节--环境搭建及Android Studio 安装

1.安装JDK 2.安装AS 安装参考网址 https://www.cnblogs.com/xiadewang/p/7820377.html 下载网址: http://www.android-studio.org/ https://services.gradle.org/distributions/ 注意: 1.这个下载很慢,估计不要1个小时也要40分钟 2.Build项目的时候非常的慢,要参考下面的修改(不要开启只线下编译) // Top-level build file where you

kinect2.0 基础篇第一篇 用C#在Visual Studio上编写关闭彩色图像的三色通道的某个通道

网上基于kinect2.0 用C#语言编写的小程序太少了 下面的链接上C#语言的一些基础开发,对于什么都不会的最好手把手敲一遍 http://blog.csdn.net/app_12062011/article/details/52665048 使用kinect2.0  要求环境如下: 系统win8以上 Usb接口3.0 Direct11 以上 1.新建一个WPF应用程序,首先肯定要添加应用  Microsoft.Kinect 2.在WPF 在Grid中 添加一个控件 <Image x:Name

第一篇 关于Android Studio的快捷键

公司最近要培训Android的课程,但是发现现在官方网站上已经不提供了Eclipse ADT的下载了,都变成了Android Studio,可能是悲催了! 对于很多Eclipse转过来的同学,不适应的最主要就是快捷键部分了,Studio默认的快捷键和Eclipse差别很大,但是Studio强大的地方在 于通过设置你可以一直沿用Eclipse风格的快捷键,这样对于那些Eclipse过渡来的同学省了很多学习成本. ? ? Preferences -> Keymap 然后就可以选择你想要的快捷键,这里

OpenCV On Android环境配置最新&amp;最全指南(Android Studio篇)

本文是从本人简书上搬运而来,属本人原创,如有转载,请注明出处:http://www.jianshu.com/p/6e16c0429044 简介 本文是<OpenCV On Android环境配置最新&最全指南>系列教程第二篇,也是配置教程的最后一篇.通过对android Studio里opencv环境配置讲解,快速帮新人解决入门配置问题. 本文内容是本人经过多次踩坑,并参考网上众多OpenCV On Android的配置教程总结而来,尽希望能帮助学习移动图像处理的朋友们少走弯路,如有转

Android NDK——使用Android Studio引用so库,jar包及module并使用JNI的正确姿势

引言 由于项目中需要用到JNI,以前虽然在Eclipse上使用过JNI和SO 文件,移植到Android Studio上的时候是花费好些力气的,也处理过不少常见的错误,而且网上很多文章都是只写了大致的步骤,忽略了很多细节,为了让新手们少走弯路,同时也是加强自己的理解,把自己一步一步的操作记录下来. 一.Android studio引入jar 不同于eclipse的配置build path,Android Studio可以通过图形界面Project Structure来配置dependencies

Android Studio 的安装和配置篇(Windows篇)

上一篇介绍完了Android Studio,这一篇就专门来讲讲怎么安装配置的吧. 其实好多人都卡到安装配置这一步,想当初我也是,万恶的XX防火墙,导致下载Android Studio 的gradle异常缓慢,我记得我当时也是慢得想死,最后,无奈挂VPN才搞定... 废话先不多说,去官网下载Android Studio. 下载 官方主页给出的是最新的 0.86 beta 版本,也就是安装版,一路安装就可以.其实我个人建议:使用绿色版,以后升级也方便,当然以后换电脑,就是超级方便,解压完后再打开即用