在Android Studio中利用gradle來自動編譯jni


轉載自:http://coolerfall.com/tools/use-ndk-in-android-studio

 

在最近的Android開發中,項目逐漸從Eclipse遷移到Android Studio中來,google官方現在並未在Android Studio中支持ndk的開發,但是我們可以利用gradle自動編譯jni。

步驟

1.在新建項目中找到local.properties,在里面加入ndk的路徑(ndk必須是r9以上):

ndk.dir=E\:\\Android\\ndk-r10d

2.在app\src\main中新建jni文件夾,在這里面存放要編譯的c/c++文件以及Android.mk

3.在app中的build.gradle中加入兩個task:ndkBuild和copyJniLibs,第一個task為ndk執行編譯,第二個task將編譯好的so庫copy至jniLibs目錄,這樣才Android Studio最后打包的時候才會將so庫打包進去:

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"
    defaultConfig {
        applicationId "com.xxx.yyy"
        versionCode 1
        versionName '1.0'
        minSdkVersion 10
        targetSdkVersion 21
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles ('proguard-android.txt')
        }
    }

    tasks.withType(JavaCompile) {
        compileTask -> compileTask.dependsOn 'ndkBuild', 'copyJniLibs'
    }

    sourceSets {
        main {
            jni.srcDirs = []
            jniLibs.srcDirs = ['src/main/jniLibs']
        }
    }
}

task ndkBuild(type: Exec) {
    def ndkDir = project.plugins.findPlugin('com.android.application').sdkHandler.getNdkFolder()
    commandLine "$ndkDir/ndk-build.cmd", '-C', 'src/main/jni',
            "NDK_OUT=$buildDir/ndk/obj",
            "NDK_APP_DST_DIR=$buildDir/ndk/libs/\$(TARGET_ARCH_ABI)"
}

task copyJniLibs(type: Copy) {
    from fileTree(dir: file(buildDir.absolutePath + '/ndk/libs'), include: '**/*.so')
    into file('src/main/jniLibs')
}

 

這兩個task不要放在android{}中,放在android{}外即可,否則無法編譯。其中NDK_APP_DST_DIR為編譯后的庫存放的文件夾,根據需求自己設定,我在這里是設置為的buildDir下的nkd文件夾

4.最后編譯,Android Studo會自動執行ndkBuild和copyJniLibs這兩個task

ps:也可以使用命令行的方式來執行這兩個task


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM