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
Android中JNI使用詳解(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當前路徑