Android Studio使用新的Gradle構建工具配置NDK環境
從Android Studio 1.3 Beta1開始,就支援了NDK。不過使用的是一個全新的實驗性的gradle構建工具。官方地址 http://tools.android.com/tech-docs/new-build-system/gradle-experimental ,英文好的可以直接看原文。
在進行配置前請先將Android Studio更新至最新版本,目前最新版本是1.4 Bata4
並且使用Android Studio內建的SDK管理器下載NDK。
或者在專案上右鍵開啟Project Structure,切到的SDK Location頁進行安裝
注意這個NDK安裝好後其目錄在SDK目錄下的ndk-bundle目錄下,與以往的不同。
要修改的檔案見下圖
首先需要將根目錄下的gradle修改為實驗性的gradle
classpath 'com.android.tools.build:gradle-experimental:0.2.0'
最終是這樣的
並且需要gradle 2.5的支援,將gradle/gradle-wrapper.properties中的版本修改為2.5
distributionUrl=https/://services.gradle.org/distributions/gradle-2.5-all.zip
最終是這樣的
然後修改原來的app/build.gradle,注意現在各項配置都是有等號的,並且使用的是 com.android.model.application而不再是原來的com.android.application,如果是Library,則 是com.android.model.library。然後android外圍包了一層model。原來在android裡面的buildTypes 移到了外面。等等,看下面內容,注意變化。
apply plugin: 'com.android.model.application' model{ android { compileSdkVersion = 22 buildToolsVersion = "23.0.1" defaultConfig.with { applicationId = "com.kltz88.car.jnidemo" minSdkVersion.apiLevel = 14 targetSdkVersion.apiLevel = 22 versionCode = 1 versionName = "1.0" } tasks.withType(JavaCompile) { //指定編譯JDK版本 sourceCompatibility = JavaVersion.VERSION_1_7 targetCompatibility = JavaVersion.VERSION_1_7 } } android.ndk { moduleName = "test" ldLibs +="log" abiFilters +="armeabi" abiFilters +="armeabi-v7a" abiFilters +="x86" } android.buildTypes { release { minifyEnabled = false proguardFiles += file( 'proguard-rules.pro') } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.2.1' }
在android.ndk中進行ndk的配置,模組名字是必須的。然後使用了log,並且支援armeabi,armeabi-v7a,x86三個平臺。
然後增加jni目錄,在main上右鍵新建jni目錄
在彈出的視窗中你可以修改jni目錄,預設是在main/jni中
新建一個Test的類,載入jni庫,宣告native方法
public class Test { static { System.loadLibrary("test"); } public native void test(); }
這時候你會發現test方法是紅色的
在上面按alt+enter生成c層的方法
修改為下方的程式碼
#include <jni.h> #include "android/log.h" JNIEXPORT void JNICALL Java_com_kltz88_car_jnidemo_Test_test(JNIEnv *env, jobject instance) { __android_log_write(ANDROID_LOG_ERROR,"TAG","TEST"); }
如果你需要生成標頭檔案,使用命令列即可
之後會在jni目錄生成對應的標頭檔案
然後在java層呼叫
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Test t=new Test(); t.test(); } }
便會看到日誌的輸出。
注意如果沒有在gradle中指定java的對應版本,執行時可能會報錯
tasks.withType(JavaCompile) { //指定編譯JDK版本 sourceCompatibility = JavaVersion.VERSION_1_7 targetCompatibility = JavaVersion.VERSION_1_7 }
錯誤資訊如下,遇到該錯誤加上上面的程式碼即可
最後就是除錯的問題了,理論上來說應該是支援除錯的,但是我在windows上並沒有試驗成功。下面貼出步驟。
增加native執行方法
修改為
然後下斷點,理論上是能除錯的,但是我遇到了下面的問題,導致無法繼續,也查過了,查不出問題所在,就這樣吧,改天在linux下試試是不是正常。
你會發現整個流程下來,原來的Android.mk和Application.mk都不再需要了,所有配置在gradle中配置即可。
官方的github示例程式碼
相關文章
- Android Studio NDK開發-環境配置Android
- Android Studio NDK開發:環境配置Android
- Android NDK學習(2)Windows下NDK開發環境配置AndroidWindows開發環境
- Android Studio配置開發環境Android開發環境
- 一定能成功的Android NDK環境配置教程Android
- android studio配置ndk開發Android
- 如何配置gradle環境Gradle
- 使用新 Android Gradle 外掛加速您的應用構建AndroidGradle
- Android-構建不同環境的ApkAndroidAPK
- Android中的Gradle之配置及構建優化AndroidGradle優化
- 【Android】Android Studio啟動配置gradleAndroidGradle
- Android NDK開發(二) 使用ndk-build構建工具進行NDK開發AndroidUI
- Android Studio3.0 NDK配置與開發Android
- Android studio 整合ndk環境,生成so庫,並在其他專案上引用Android
- Android Studio Gradle 常用配置詳解AndroidGradle
- android studio4.0初次gradle配置AndroidGradle
- cuda的 visual studio 環境配置
- 配置軟體原始碼包構建環境原始碼
- Android Studio之gradle的配置與介紹AndroidGradle
- Cocos2d-x 2.2.3 使用NDK配置編譯環境編譯
- Andorid Studio NDK 開發 – NDK 開發利器 gradle-experimentalGradle
- Andorid Studio NDK 開發 - NDK 開發利器 gradle-experimentalGradle
- Android 應用構建速度提升Gradle配置優化AndroidGradle優化
- Eclipse下搭建Android的NDK開發環境EclipseAndroid開發環境
- [Bitnami]Gitlab環境構建後的必會配置Gitlab
- Java專案開發環境構建工具 Gradle 使用筆記(簡單、基本)Java開發環境Gradle筆記
- Android Studio使用離線GradleAndroidGradle
- Android Studio 使用 Gradle 打包 JarAndroidGradleJAR
- Gradle 與 AGP 構建 API: 配置您的構建檔案GradleAPI
- Gradle for Android ( 構建變體 )GradleAndroid
- [Android、Java]加快gradle構建AndroidJavaGradle
- visual studio golang環境配置Golang
- Android Studio--》Gradle Scripts配置說明AndroidGradle
- android studio 3.0 gradle 打包指令碼配置AndroidGradle指令碼
- 使用 Gradle 管理你的 Android Studio 工程GradleAndroid
- 使用Gradle構建Android應用內測版本GradleAndroid
- 用Gradle 構建你的android程式GradleAndroid
- Mac 環境下 Android 使用 Jenkins 構建自動化打包MacAndroidJenkins