色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > AS(Android Studio)中使用NDK

AS(Android Studio)中使用NDK 時間:2018-09-25      來源:未知

在AS中要想使用NDK,方法很簡單,只要在工程gradle.properties中添加:

android.useDeprecatedNdk=true

在對應的module的build.gradle文件中的defaultConfig下添加:

ndk{

moduleName "庫名"

}

這兩段代碼指令就可以和在Eclipse中一樣使用NDK了。

但是這里和Eclipse中不同的地方是,每次Build之后,可能需要去將生成的動態庫文件移動到和app\文件夾下的libs目錄中,這個是AS默認的庫文件訪問地址。

這里還有一個問題,就是當我們在Android.mk文件中-llog或者-lm的時候會出現無法找到對應庫的問題。

這個問題的解決方法,其實就是放棄gradle為我們自動編譯,那么會不會很復雜呢,其實也不會,因為現在新版的ndk已經很智能了。

同樣在build.gradle文件中的Android下添加:

sourceSets.main {

jni.srcDirs = []

jniLibs.srcDir 'src/main/libs'

}

這樣我們就將src/main/libs這個目錄設置成了工程默認的jni庫的存放目錄了。

接下來,我們首先來明確一下我們的庫名,這個名字是可以任意起的,比如我們叫它“MyNdk”。那么我們生成的庫文件的名字就是“libMyNdk.so”。

根據上面的說明,我們修改gradle.properties和build.gradle。

第二步,新建一個工程,這里推薦是為native方法專門建立一個工程,聲明的時候可以直接將native方法都聲明成static的即可。比如這里新建了一個NdkMethod.java文件,代碼如下:

public class NdkMethod {

public static native int add(int a, int b);

}

接下來,通過這個.java文件生成我們.c文件需要使用的.h文件。具體的方法是,在main文件夾下新建一個叫jni的目錄,然后在AS的控制臺中將目錄切換到main下,輸入以下命令:

javah -d jni -cp java\ com.farsight.ji.myndk.NdkMethod

其中-d代表將文件放在什么位置,和-o重命名不能同時使用,-cp就是-classpath是我們java工程的目錄,后邊跟的就是我們的java類。

生成了.h文件之后,就需要去寫一個Android.mk了。

很多人可能對.mk文件不是很熟悉,沒關系,jni使用的時候.mk使用簡單的就可以了,這里在jni目錄下,寫Android.mk,如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_LDLIBS := -lm -llog

LOCAL_MODULE := myndk

LOCAL_SRC_FILES := myndk.c

include $(BUILD_SHARED_LIBRARY)

其中LOCAL_PATH就是告訴編譯器我們要編譯哪里的東西,第二條忽略,LOCAL_LDLIBS通過字面我們也知道是鏈接庫,-lm是math庫,-llog是,LOCAL_MODULE是我們的庫名,要保持一致,LOCAL_SRC_FILES,后邊就是跟我們要編譯的所有.c文件,后一句(BUILD_SHARED_LIBRARY)就是指生成動態共享庫,其實還可以生成可執行文件,這里大家自己摸索吧,更簡單。

好了,下邊就是.c文件了,myndk.c文件如下:

#define LOGTAG "NDKTEST"

#include

#include "jni.h"

#include "stdio.h"

#include

#include "string.h"

#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOGTAG, __VA_ARGS__)

#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOGTAG, __VA_ARGS__)

#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOGTAG, __VA_ARGS__)

JNIEXPORT jint JNICALL Java_com_farsight_ji_myndk_NdkMethod_add

(JNIEnv *env, jclass thiz, jint frist, jint second){

return frist + second;

}

可以自由發揮,后,編譯生成.so庫吧,同樣在AS的控制臺,進入jni目錄:

ndk-build

然后cd .. 就可以看到一個libs目錄了,在該目錄下,就可以找到armeabi或者其他的文件夾,下邊就有我們的.so庫了。

當然,我們做了這么多工作就是想讓JAVA代碼來調用C/C++代碼,很簡單,在我們想要調用的.java文件中聲明加載動態庫:

static {

System.loadLibrary("myndk");

}

然后就可以使用了:

Log.d("MYNDKTEST", "" + NdkMethod.add(1, 2));

AS中做NDK開發還是比較簡單的。

上一篇:Android多線程編程

下一篇:DS18B20時序分析

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5,京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 久久精品aⅴ无码中文字字幕不卡 | 四虎影院永久在线观看 | 色猫咪AV在线网址 | 少妇厨房愉情理伦片视频在线观看 | 夜夜揉揉日日人人 | 国产内射大片99 | www.黄色国产 | 欧美日韩精品一区二区视频 | 性色AV极品无码专区亚洲 | 好男人社区神马WWW在线影视 | 亚洲狼人伊人中文字幕 | 中文字幕丝袜第1页 | 欧美日韩精品视频一区二区 | 久久久久人妻一区精品性色AV | 亚洲人成网站色ww | 国产极品白嫩精品 | 夂久亚州精华国产精华华液 | 欧洲美女粗暴牲交 | 大波大乳video | 亚洲春色在线视频 | 无码成人aⅴ免费中文字幕 国产无遮挡又黄又爽高潮 免费久久精品国产片 | 日韩在线不卡免费视频一区 | 爱爱视频免费网站 | 成本人h无码播放私人影院 在线精品自偷自拍无码 | 亚洲国产欧美日韩精品一区二区三区 | 日本不卡不码高清视频 | 亚洲av无码一区二区三区四区 | 亚洲精品无码久久久久久 | 国产极品美女高潮抽搐免费网站 | 中文字幕不卡一区 | 天堂中文www | 国产AV无码专区亚洲AV毛片搜 | 肉大捧一进一出好爽mba | 日本熟妇xxxx乱 | 双乳奶水饱满少妇视频 | 成人444kkkk在线观看 | 四虎院影亚洲永久 | 97人妻人人做人碰人人添 | 亚洲av无码精品色午夜蛋壳 | 在线视频观看一区二区 | av在线天堂av无码舔b |