使用Android Studio 1.3 版本進行NDK開發

來源:互聯網
上載者:User

標籤: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開發

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.