1. 程式人生 > >Android AS平臺jni環境配置

Android AS平臺jni環境配置

廢話不多說!

<1> : 新建一個DurianAsJni的android工程.

<2> : 新建一個jni的java介面類:

package org.durian.durianasjni;

/**
 * Project name : DurianAsJni
 * Created by zhibao.liu on 2016/3/28.
 * Time : 19:33
 * Email [email protected]
 * Action : durian
 */
public class aslib {

    public native float getDurianLibVersion();

    static{
        System.loadLibrary("aslib");
    }
}

<3> : 然後在src目錄下新建一個jni目錄,在jni目錄下新增Android.mk和Application.mk.

<4> : 由於這裡使用的是onload的方式,所以新建jni_onload.h,jni_onload.cpp

jni_onload.h

#include<jni.h>
#ifndef _ON_LOAD_HEADER_H__
#define _ON_LOAD_HEADER_H__
#ifdef __cplusplus
extern "C" {
#endif

JNIEnv* getJNIEnv();
int jniThrowException(JNIEnv *env,const char* className,const char* msg);
int jniRegisterNativeMethods(JNIEnv* env,const char* className,const JNINativeMethod* gMethod,int numMethods);

#ifdef __cplusplus
}
#endif
#endif

jni_onload.cpp

#include "jni_onload.h"
#include "durian_opencv.h"

extern int register_android_jni_durian_android(JNIEnv *env);
/*
extern int register_android_jni_durian_android_1(JNIEnv *env);
...
extern int register_android_jni_durian_android_n(JNIEnv *env);
*/

static JavaVM *sEnv;

int jniThrowException(JNIEnv *env, const char* className, const char* msg) {

    jclass exceptionClass = env->FindClass(className);

    if (exceptionClass == NULL) {
        return -1;
    }

    if (env->ThrowNew(exceptionClass, msg) != JNI_OK) {

    }

    return 0;

}

JNIEnv* getJNIEnv() {

    JNIEnv* env = NULL;

    if (sEnv->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
        return NULL;
    }

    return env;

}

int jniRegisterNativeMethods(JNIEnv* env, const char* className,
        const JNINativeMethod* gMethods, int numMethods) {
    jclass clazz;

    clazz = env->FindClass(className);

    if (clazz == NULL) {
        return -1;
    }

    if (env->RegisterNatives(clazz, gMethods, numMethods) < 0) {
        return -1;
    }

    return 0;

}

jint JNI_OnLoad(JavaVM* vm, void* reserved) {

    JNIEnv* env = NULL;
    jint result = JNI_ERR;
    sEnv = vm;

    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
        return result;
    }

    LOGI("JNI_OnLoad...");
    /*ready to register all methods
    */

    if (register_android_jni_durian_android(env) != JNI_OK) {
        goto end;
    }

    //following could do it as the previous the way of register

    /*if (register_android_jni_durian_android_1(env) != JNI_OK) {
            goto end;
        }
    ...
    if (register_android_jni_durian_android_n(env) != JNI_OK) {
            goto end;
        }*/


    return JNI_VERSION_1_4;

    end: return result;

}

這兩個檔案都被我弄成標配檔案了.

<5> : 功能原始碼,在jni目錄下新建durian_opencv.h和durian_opencv.cpp,程式碼如下:

durian_opencv.h

//
// Created by $zhibao.liu on 2016/3/28.
//

#ifndef DURIANASJNI_DURIAN_OPENCV_H
#define DURIANASJNI_DURIAN_OPENCV_H
#include<string.h>
#include<stdlib.h>
#include <android/log.h>
#include "jni_onload.h"

#define LOG_TAG "durian"
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN,LOG_TAG,__VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
#define LOGF(...) __android_log_print(ANDROID_LOG_FATAL,LOG_TAG,__VA_ARGS__)


#endif //DURIANASJNI_DURIAN_OPENCV_H

對應的durian_opencv.cpp

//
// Created by $zhibao.liu on 2016/3/28.
//
#include "durian_opencv.h"
const static char *classpath="org/durian/durianasjni/aslib";
namespace android{

    float getDurianLibVersion(JNIEnv *env, jobject thiz){
        return 0.5;
    }

}

using namespace android;

static JNINativeMethod mMethods[] = {

        { "getDurianLibVersion", "()F",(void *) getDurianLibVersion },

};

int register_android_jni_durian_android(JNIEnv* env) {

    return jniRegisterNativeMethods(env, classpath, mMethods,sizeof(mMethods) / sizeof(mMethods[0]));

}



寫完c原始碼後,修改Android.mk檔案:

LOCAL_PATH $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := aslib
LOCAL_SRC_INCLUDE=jni_onload.cpp durian_opencv.cpp
LOCAL_LDLIBS := -llog

include $(BUILD_SHARED_LIBRARY)


<6> : NDK環境配置:

gradle.properties檔案最後一行新增:

android.useDeprecatedNdk=true

local.properties檔案最後一行新增NDK包的路徑:

ndk.dir=D\:\\liuzhibao\\Android\\android-ndk-r10

最後再build.gradle檔案中新增ndk編譯:

ndk{
            moduleName "aslib"
            ldLibs "log", "z", "m"
            abiFilters "armeabi", "armeabi-v7a", "x86"
        }

就差不多了

<7> : 在android java主程式中新增測試程式:

package org.durian.durianasjni;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private aslib mlib;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mlib=new aslib();
        float ver=mlib.getDurianLibVersion();
        Toast.makeText(MainActivity.this,"lib version : "+ver,Toast.LENGTH_SHORT).show();

    }


}


執行,就可以獲得版本號了.easy...

相關推薦

Android AS平臺jni環境配置

廢話不多說! <1> : 新建一個DurianAsJni的android工程. <2> : 新建一個jni的java介面類: package org.durian.durianasjni; /** * Project name : DurianA

AndroidJNI使用詳解(2)---Android Studio中NDK環境配置

Android Studio中的NDK環境配置 1、下載NKD 在Android Studio中選擇File----Settings----Appearance&Behavior---System Settings----Andr

React-Native 學習筆記-Android開發平臺-開發環境搭建

環境變量 最新版 下載 and 系統 系統環境變量 新版本 開發環境 studio 詳細步驟請查看官網對應文檔,BUT,有些註意事項請註意! 1,優先安裝Node.js,因為後面可以使用npm安裝軟件, 2,註意不要使用CNPM!!!!!!!!! 3,Android

android studio入門之環境配置

版本 log 127.0.0.1 jar 連接 .exe 目錄 jre 文件 JDK環境搭建 添加環境變量:JAVA_HOME:->JDK安裝路徑 CLASSPATH:->.;%JAVA_HOM

雲計算運維平臺ubuntu環境配置

enum min -s 輸入 nmap dir openpyxl djang grant python環境安裝 首先在項目目錄下面生成python虛擬環境,使用pip工具下載安裝virtualenv,命令如下: pip install virtualenv cd

Android安裝後的環境配置

安裝Android的步驟比較繁瑣,在新安裝了android如何確定自己是否安裝成功呢?可以以下操作: 按win+R,輸入控制命令符cmd,在顯示的介面輸入android,如果回車後提示:“android”不是內部或外部命令,也不是可執行的程式或批處理檔案,說明

jeeweb敏捷開發平臺環境配置詳解

這裡講解eclipse非Maven版本的搭建 前期準備: jdk7.0以上,這裡我用jdk8eclipseTomcat 8.0Mysql 5.5或者5.6(建議使用Navicat資料庫管理軟體)軟體

Android軟體下載及環境配置(SDK無需代理翻牆,離線更新)

本人初學安卓,聽聞現今用AS比較多,遂上網搜尋安裝地址、方法,以及SDK、JDK的安裝配置,現記錄自己操作的步驟如下。 主要是在SDK的更新那兒卡住了= =,原因應該都懂,試過用代理(現在不靈了。。翻牆又沒找到穩定的。。),都不靠譜。之後找到了離線的方法,才算

ubuntu下Qt for Android的安裝及環境配置

版本:ubuntu12.04 TS 32bits           Qt for Android 5.4.0 32bits 1.下載Qt5.4版本安裝包:qt-opensource-linux-x8

android studio NDK開發環境配置

在studio還未出來之前,eclipse開發jni除了需要下載ndk之外還要下載編譯工具,studio已經集成了ndk編譯外掛,因此只需要下載ndk後稍微設定下就可以進行jni開發了,以下是本人配置的詳細過程,供大家參考,歡迎拍磚。 首先下載NDK連結:http://we

Android+NDK+OpenGLES開發環境配置

1、資源下載 (1)、Android的eclipse的開發環境 我用的是adt-bundle-windows-x86,官方主頁就可以下載,這是打包的版本,直接執行eclipse.exe即可啟動 (2)、NDK 下載NDK(大家網上下載一下) (3)、cygwin64 用於模

android studio安裝之環境配置——windows版

雖然本人選擇的是windows系統的JDK環境配置,但實際無論在msOS還是Linux都與之大同小異。話不多說,我們直接進入正題。1、下載JDK這裡博主選擇下載的最新的JDK8,且推薦下載JDK版本8u171,因為據官方解釋:奇數版本為BUG修正並全部通過檢驗的版本,偶數版本

Mac 下android studio 中ndk 環境配置

1.下載NDK gradle.properties 中配置 android.useDeprecatedNdk=true build.gradle 中 defaultConfig { applicatio

Android MTK平臺原始碼環境下預置APK方法

[DESCRIPTION] 1, 如何將帶原始碼的 APK 預置進系統? 2, 如何將無原始碼的APK預置進系統? 3, 如何預置APK使得使用者可以解除安裝,恢復出廠設定時不能恢復? 4,

Kotlin在Android studio上的環境配置和運用(一)

前倆天Google的IO大會把Kotlin列為Android的開發語言之一,Android開發者有必要學習一下。 Kotlin是基於JVM的程式語言, 由JetBrains公司開發, 目前已經開源. IntelliJ IDEA, PyCharm, Andro

arcgis for android 100.1 sdk環境配置

首先,arcgis for android 有對應的sdk,下載下來的sdk 是aar格式的,也就說要配置的就是把aar包匯入到as裡面,aar包可以直接放到libs資料夾下面,也可以放到創庫maven裡面; aar包匯入:在model裡面的build裡面新增程式碼: re

Android Studio 3.0 Jni 開發環境配置 ndk cmake編譯 多個C/C++檔案新增配置

為什麼要用cmake?我先說一下cmake的優點: 1.配置簡單,只需要一個text檔案幾句程式碼即可完成Jni環境配置 2.請看下圖: 第一張圖是在幹什麼?debug C/C++程式碼啊!驚不驚險刺不刺激?! 都能夠直接debug了,新增檔案新

Android JNI開發之NDK環境配置(eclipse)

最近開發一個小專案,需要用到native方法,於是需要配置NDK環境。首先肯定是網上找,網上比較多,但是都不全,有的已經過時了。所以,我綜合大家之長,寫了如下配置流程,供大家使用,有什麼不對的請大家指正。 總共分為5步: 1、下載NDK。這個我不說了。

[Android]NDK開發環境配置JNI開發

本文的目標是實現NDK開發環境的配置以及學習JNI開發流程。 1.環境配置 本文的開發環境為win10 64位+Eclipse+Android ADT+NDK+CDT。 2.安裝: 這裡只介紹NDK和CDT的安裝。 2.2配置系統的環境變數

JDK環境配置: javac is not recognized as an internal or external command, operable program or batch file

並不是 spa too ots javac mman 變量 系統設置 log 相信大家在配置TestNG的時候,首先都會去確認JDK的安裝是否正確,兩個命令缺一不可。 打開‘cmd’ --> 1. 輸入‘java -version‘, 返回java home當前路徑