我试图在我的NDK项目中使用Experimental Gradle Plugin,但是它没有编译ndk。一切看起来都很好--Android Studio理解我的C代码,可以从Java跳到本机等等,但是当我运行" Build"时,跳过编译ndk的步骤 - 我看不到像#34; compileNdk&#34 ;.
当我按
gradlew tasks
没有类似" compileNdk"也。 "利布斯"文件夹也是空的,所以当我尝试调用本机方法时,应用程序崩溃了" UnsatisfiedLinkError"。
那我错过了什么?如何告诉gradle编译NDK?
我的配置是:
root build.gradle:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle-experimental:0.3.0-alpha5'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
module build.gradle:
apply plugin: 'com.android.model.application'
model
{
android {
compileSdkVersion = 23
buildToolsVersion = "23.0.1"
defaultConfig.with {
applicationId = "com.kaspersky.experimentalcpp"
minSdkVersion.apiLevel = 14
targetSdkVersion.apiLevel = 23
versionCode = 1
versionName = "1.0"
}
}
android.buildTypes {
debug {
ndk.with {
debuggable = true
}
}
release {
minifyEnabled = false
proguardFiles += file('proguard-rules.pro')
}
}
android.sources {
main {
jni {
source {
srcDirs 'src/main/jni'
}
}
}
}
android.ndk {
moduleName = "test_experimental"
stl = "stlport_static"
cppFlags += "-Isrc/main/jni".toString()
ldLibs += ["log"]
ldLibs += ["android"]
}
android.productFlavors {
create("arm") {
ndk.abiFilters += "armeabi"
}
create("arm7") {
ndk.abiFilters += "armeabi-v7a"
}
create("fat")
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.1.0'
}
我在Windows 7上使用Android Studio 1.4.1。ndk.dir指向" ndk-bundle"由AS下载的文件夹 任何帮助表示赞赏!
答案 0 :(得分:0)
所以经过一些研究后我发现我的libs实际上是编译的,他们只是放在" libs"文件夹,但在" build / intermediates / binaries /..."。我转储结果.so并认为我的JNI方法不在那里。原因是我的JNI方法在.h文件中声明。将.h重命名为.cpp后,一切正常(调试除外)。也许它会帮助别人!