標籤:studio 開發 android ndk jni
眾所周知Android Studio 1.3 版本新增了NDK支援,能夠很方便的在上面開發C++或者C代碼了,可是預覽版功能不是非常完善,需要很多步驟,還有一些奇怪的BUG,整了半天終於可以使用Android Studio完美進行NDK開發了.先看下:
方法:一.首先將Android Studio更新到1.3版本:
1.檢查Android Studio更新.
有些人可能會遇到問題:自己版本低於1.3檢查更新卻提示已經是最新版本?
那是因為更新渠道不是Beta渠道,需要先將渠道設定為Beta渠道才能更新到1.3:
然後重新檢查更新就可以更新到1.3了.
二.將gradle切換到實驗版本.
根據Google官方提供的方法修改Gradle檔案.(官方說法為測試版本不完善,需要手動修改Gradle檔案以便相容Gradle實驗版,他們會在release版本中實現程式自動修改Gradle)
Google原文連結:http://tools.android.com/tech-docs/new-build-system/gradle-experimental
1.將Gradle更新到2.5版本.
在這裡將GradleVersion改為2.5 點擊OK鍵就會開始自動更新Gradle了.
2.Android NDK r10e ,將NDK更新到這個版本
3.BuildTools版本要求大於19.0.0
4.紅色標註的3個檔案是需要手動修改的檔案.
5.修改gradle-wrapper.properties檔案內容為如下:
distributionBase=GRADLE_USER_HOMEdistributionPath=wrapper/distszipStoreBase=GRADLE_USER_HOMEzipStorePath=wrapper/distsdistributionUrl=https\://services.gradle.org/distributions/gradle-2.5-all.zip
6.修改Project(非Module)下的Gradle檔案,將gradle版本改為實驗版本(紅色標註部分):
(classpath ‘com.android.tools.build:gradle-experimental:0.1.0’)
7.修改Module下的Gradle檔案(新版Gradle文法有了很大的改變,紅色標註為需要修改的部分,注意dependencies在model外面):
在android{}外面要使用model{}來包括了,所有賦值都變為了=號,新增項變為了+=,buildTypes{},productFlavors{}和sources{}挪到了android{}外面.
再上一份我的Module的配置:
apply plugin: ‘com.android.model.application‘model{ android { compileSdkVersion=19 buildToolsVersion="22.0.0" defaultConfig.with { applicationId = "com.example.stronghope.jnitest" minSdkVersion.apiLevel = 9 targetSdkVersion.apiLevel = 19 versionCode = 1 versionName = "1.0" } tasks.withType(JavaCompile) { //指定編譯JDK版本 sourceCompatibility = JavaVersion.VERSION_1_7 targetCompatibility = JavaVersion.VERSION_1_7 } } android.ndk { moduleName="JniTest" ldLibs +="log" ldLibs += "z" ldLibs += "m" abiFilters +="armeabi" abiFilters +="armeabi-v7a" abiFilters +="x86" } android.buildTypes { release {// isMinifyEnabled = false// proguardFiles += file(‘proguard-rules.pro‘) } }}dependencies {}
實驗版Gradle在某些機子上可能會有BUG,如果編譯的時候報了如下錯誤,需要在android{}中添加tasks.withType指定較低的JDK編譯版本(1.6或1.7):
bad class file magic (cafebabe) or version
最後在local.properties檔案中指定NDK目錄即可愉快的進行NDK開發啦:
ndk.dir=”你的NDK目錄”
三.NDK開發
1.配置Gradle中ndk編譯參數(只需要在Gradle中配置,就可以完全脫離書寫Android.mk和Application.mk檔案來編譯啦):
ldLibs項相當於Android.mk中的LOCAL_LDLIBS參數.
abiFilters相當於Application.mk中的APP_ABI參數.
2.在Main檔案夾下建立JNI檔案夾(預設目錄,如需修改可以在Gradle中指定 jni.srcDirs)
3.定義JNI java類:
public class JNI { static{ System.loadLibrary("JniTest"); } public static native void testLog();}
4.使用javah命令產生標頭檔(不產生標頭檔也可,當C++中沒有方法實現時,方法名為紅色,直接在方法上alt+enter 選擇create XXXX 就可以自動在C++檔案中產生方法,很方便啊):
開啟cmd,cd到java目錄下,使用命令:
javah com.example.stronghope.jnitest.JNI
產生標頭檔,將標頭檔剪下到jni目錄下.
自動產生方法:
5.在jni目錄下建立C++檔案:
JniTest.cpp
6.引入標頭檔,編寫C++代碼:
7.運行Android項目,在控制台得到如下輸出:
好啦一個簡單的Jni程式就實現了,使用Android Studio來進行NDK開發真的非常方便!坐等release版本出來o(∩_∩)o
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
使用Android Studio 1.3 版本進行NDK開發