Gradle Build Tools 2.2.0+ - NDK yang paling mendekati disebut 'ajaib'
Dalam upaya menghindari eksperimen dan sejujurnya muak dengan NDK dan semua peretasannya, saya senang karena Gradle Build Tools versi 2.2.x telah keluar dan sekarang berfungsi. Kuncinya adalah argumen jalur externalNativeBuild
dan menunjuk ndkBuild
pada Android.mk
atau ubah ndkBuild
menjadi cmake
dan arahkan argumen jalur pada skrip build CMakeLists.txt
.
android {
compileSdkVersion 19
buildToolsVersion "25.0.2"
defaultConfig {
minSdkVersion 19
targetSdkVersion 19
ndk {
abiFilters 'armeabi', 'armeabi-v7a', 'x86'
}
externalNativeBuild {
cmake {
cppFlags '-std=c++11'
arguments '-DANDROID_TOOLCHAIN=clang',
'-DANDROID_PLATFORM=android-19',
'-DANDROID_STL=gnustl_static',
'-DANDROID_ARM_NEON=TRUE',
'-DANDROID_CPP_FEATURES=exceptions rtti'
}
}
}
externalNativeBuild {
cmake {
path 'src/main/jni/CMakeLists.txt'
}
//ndkBuild {
// path 'src/main/jni/Android.mk'
//}
}
}
Untuk detail lebih lanjut, periksa laman Google tentang menambahkan kode asli.
Setelah ini diatur dengan benar, Anda dapat ./gradlew installDebug
dan berangkat. Anda juga perlu menyadari bahwa NDK akan berubah menjadi dentang karena gcc sekarang tidak digunakan lagi di Android NDK.
Integrasi Bersih dan Bangun Android Studio - TIDAK DIGUNAKAN LAGI
Jawaban lain menunjukkan cara yang benar untuk mencegah pembuatan file Android.mk
secara otomatis, tetapi jawaban tersebut gagal melakukan langkah ekstra untuk mengintegrasikan lebih baik dengan Android Studio. Saya telah menambahkan kemampuan untuk benar-benar membersihkan dan membangun dari sumber tanpa perlu membuka baris perintah. File local.properties
Anda harus memiliki ndk.dir=/path/to/ndk
apply plugin: 'com.android.application'
android {
compileSdkVersion 14
buildToolsVersion "20.0.0"
defaultConfig {
applicationId "com.example.application"
minSdkVersion 14
targetSdkVersion 14
ndk {
moduleName "YourModuleName"
}
}
sourceSets.main {
jni.srcDirs = [] // This prevents the auto generation of Android.mk
jniLibs.srcDir 'src/main/libs' // This is not necessary unless you have precompiled libraries in your project.
}
task buildNative(type: Exec, description: 'Compile JNI source via NDK') {
def ndkDir = android.ndkDirectory
commandLine "$ndkDir/ndk-build",
'-C', file('src/main/jni').absolutePath, // Change src/main/jni the relative path to your jni source
'-j', Runtime.runtime.availableProcessors(),
'all',
'NDK_DEBUG=1'
}
task cleanNative(type: Exec, description: 'Clean JNI object files') {
def ndkDir = android.ndkDirectory
commandLine "$ndkDir/ndk-build",
'-C', file('src/main/jni').absolutePath, // Change src/main/jni the relative path to your jni source
'clean'
}
clean.dependsOn 'cleanNative'
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn buildNative
}
}
dependencies {
compile 'com.android.support:support-v4:20.0.0'
}
Direktori src/main/jni
mengasumsikan tata letak standar proyek. Ini harus menjadi relatif dari lokasi file build.gradle
ini ke direktori jni
.
Gradle - bagi mereka yang mengalami masalah
Periksa juga Jawaban Stack Overflow.
Sangat penting bahwa versi gradle dan pengaturan umum Anda sudah benar. Jika Anda memiliki proyek lama, saya sangat menyarankan untuk membuat proyek baru dengan Android Studio terbaru dan lihat apa yang dianggap Google sebagai proyek standar. Juga, gunakan gradlew
. Ini melindungi pengembang dari ketidakcocokan versi gradle. Terakhir, plugin gradle harus dikonfigurasi dengan benar.
Dan Anda bertanya apa versi terbaru dari plugin gradle? Periksa halaman alat dan edit versi yang sesuai.
Produk akhir - /build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
// Running 'gradle wrapper' will generate gradlew - Getting gradle wrapper working and using it will save you a lot of pain.
task wrapper(type: Wrapper) {
gradleVersion = '2.2'
}
// Look Google doesn't use Maven Central, they use jcenter now.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.2.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
Pastikan gradle wrapper
menghasilkan file gradlew
dan subdirektori gradle/wrapper
. Ini masalah besar.
Direktori ndk
Ini telah muncul beberapa kali, tetapi android.ndkDirectory
adalah cara yang benar untuk mendapatkan folder tersebut setelah 1.1. Memigrasikan Proyek Gradle ke versi 1.0.0. Jika Anda menggunakan plugin versi eksperimental atau kuno, jarak tempuh Anda mungkin berbeda.
person
Cameron Lowell Palmer
schedule
01.11.2014