摘要:開(kāi)發(fā)最佳入門實(shí)踐網(wǎng)上一些介紹入門的教程,感覺(jué)都不是很完整和全面,也沒(méi)有告訴初學(xué)的同學(xué)們一些需要注意的地方。本文所介紹的是在上搭建最佳的開(kāi)發(fā)環(huán)境,給使用的開(kāi)發(fā)人員最大的方便。開(kāi)發(fā)最佳入門實(shí)踐最后在程序中添加上加載庫(kù)文件的代碼。
AndroidStudio NDK開(kāi)發(fā)最佳入門實(shí)踐
網(wǎng)上一些介紹AndroidStudio NDK入門的教程,感覺(jué)都不是很完整和全面,也沒(méi)有告訴初學(xué)AndroidStudio NDK的同學(xué)們一些需要注意的地方。網(wǎng)上的方法大多需要使用javah命令,使用本文的方法將不再使用該命令了,是不是方便了很多。
本文所介紹的是在AndroidStudio上搭建最佳的NDK開(kāi)發(fā)環(huán)境,給使用NDK的開(kāi)發(fā)人員最大的方便。
本人AndroidStudio版本2.0。
本人Gradle版本2.10。
要進(jìn)行Android NDK開(kāi)發(fā),首先要下載Android NDK開(kāi)發(fā)工具。可以在AndroidStudio上面的下載,也可以自己下載好了,然后將NDK的路徑設(shè)置為自己下載的Android NDK開(kāi)發(fā)工具的路徑。Android NDK開(kāi)發(fā)工具下載地址:http://wear.techbrood.com/tools/sdk/ndk/ 。
gradle插件不支持NDK(當(dāng)然用它也可以進(jìn)行NDK開(kāi)發(fā),就是非常不方便),我們需要使用gradle-experimental插件。gradle-experimental插件使用的時(shí)候與gradle插件稍微有點(diǎn)區(qū)別。
1. 我們來(lái)配置Project的build.gradle配置Project的build.gradle很簡(jiǎn)單就是將dependencies中classpath的值改為對(duì)應(yīng)的gradle-experimental插件。
dependencies { classpath "com.android.tools.build:gradle-experimental:0.7.0" }2. 我們來(lái)配置Module的build.gradle
先給出一個(gè)我配置的范例,然后說(shuō)明那些需要注意的。
apply plugin: "com.android.model.application" model { android { compileSdkVersion = 23 buildToolsVersion = "23.0.2" defaultConfig { applicationId "com.lavor.ndklearning" minSdkVersion.apiLevel 15 targetSdkVersion.apiLevel 23 versionCode 4 versionName "1.0.1" } } android.ndk { moduleName "lavor" ldLibs.addAll(["log"]) cppFlags.add("-std=c++11") cppFlags.add("-fexceptions") platformVersion 15 stl "gnustl_shared" } android.buildTypes { release { minifyEnabled = false proguardFiles.add(file("proguard-rules.txt")) } } } dependencies { compile fileTree(dir: "libs", include: ["*.jar"]) compile "com.android.support:appcompat-v7:23.1.1" compile "com.android.support:recyclerview-v7:23.1.1" compile "com.android.support:design:23.1.1" }
首先在apply的時(shí)候我們引入的插件名稱由"com.android.application"變成了"com.android.model.application"。
其次,在原來(lái)android的外層加入了一個(gè)model層次。
再次,原來(lái)在android的里面的塊,除了defaultConfig外,全部移除android塊放入model塊中與android并列,并且前面的名字加上android.。
然后,compileSdkVersion 23與 buildToolsVersion "23.0.2"改成 compileSdkVersion = 23和buildToolsVersion = "23.0.2",中間加上了=。
其次,添加上android.ndk塊,塊中的moduleName表示C/C++代碼打包成so文件的名字。
再次,android.buildTypes塊中的proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"改成proguardFiles.add(file("proguard-rules.txt"))。
最后,注意dependencies塊依然在最外層,它不在model塊中。
3. 開(kāi)始NDK之旅首先,在Android程序中添加一個(gè)native方法:public native String getString();。
其次,我們注意到添加的native方法的方法名是紅色的,將鼠標(biāo)移動(dòng)到方法名上(注意不能是括號(hào)里面或者后面),然后按下Alt+Enter快捷鍵,彈出一些解決的方法建議,點(diǎn)擊第一個(gè)Create Function...。
再次,此時(shí)會(huì)自動(dòng)建立一個(gè)與java目錄同級(jí)的jni目錄,在jni目錄自動(dòng)建立一個(gè)c文件,在c文件中實(shí)現(xiàn)剛才的native方法。
然后,稍稍修改一下c文件中實(shí)現(xiàn)的native方法。
JNIEXPORT jstring JNICALL Java_com_lavor_ndklearning_MainActivity_getString(JNIEnv *env, jobject instance) { // TODO return (*env)->NewStringUTF(env, "AndroidStudio NDK開(kāi)發(fā)最佳入門實(shí)踐"); }
最后在Android程序中添加上加載so庫(kù)文件的代碼。
static { System.loadLibrary("lavor"); }
運(yùn)行程序后界面如下:
AndroidStudio NDK開(kāi)發(fā)入門介紹完畢。程序源代碼下載地址:https://github.com/lavor-zl/NDKLearning
注意:gradle的版本不能太低,不然會(huì)出錯(cuò),AndroidStudio版本也不能太低不然可能沒(méi)有集成C/C++編譯器,某些1.7的JDK可能會(huì)出錯(cuò),重新下載一個(gè)JDK就好了,并設(shè)置JDK的路徑。
歡迎關(guān)注我的微信公眾號(hào):Android技術(shù)漫談
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/65961.html
摘要:前言我在上篇文章中介紹了的官方快速組件化方案當(dāng)時(shí)一直強(qiáng)調(diào)是快速的組件化方案但是在文章中只提供了一個(gè)近萬(wàn)字的官方文檔卻沒(méi)展現(xiàn)出這個(gè)組件化方案的快速之處看到近萬(wàn)字的文檔后新手已經(jīng)開(kāi)始瑟瑟發(fā)抖了覺(jué)得入門成本太高想放棄寫這篇文章的意義就是為了展現(xiàn)快 showImg(https://segmentfault.com/img/remote/1460000015444818); 前言 我在 上篇文章...
閱讀 1411·2021-11-25 09:43
閱讀 2268·2021-09-27 13:36
閱讀 1121·2021-09-04 16:40
閱讀 1963·2019-08-30 11:12
閱讀 3318·2019-08-29 14:14
閱讀 572·2019-08-28 17:56
閱讀 1330·2019-08-26 13:50
閱讀 1252·2019-08-26 13:29