Android studio使用ndk-build进行编译
2017-08-17 13:40
447 查看
在studio2.3 中创建一个ndk工程,该工程默认是通过cmake进行编译,我们修改为使用熟悉的ndk-build来编译, 这样可以编写自己的makefile。
2 在jni目录编写Android.mk 和 Application.mk
3 编辑 app/build.gradle
该方法Application.mk不再使用,需要把内容对应到 build.gradle:
更详细内容参考Google官方文档:
https://sites.google.com/a/android.com/tools/tech-docs/external-c-builds#TOC-Release-History
2 在jni目录编写Android.mk 和 Application.mk
3 编辑 app/build.gradle.
修改后的build.gradle:
方法1: (Android.mk & Gradle)
1 在studio中创建jni目录 app/src/main/jniapp->右键->new->Folder->Jni Folder 选择 change folder location , 对应src/main/jni
2 在jni目录编写Android.mk 和 Application.mk
3 编辑 app/build.gradle
android{ externalNativeBuild { ndkBuild { path'src/main/jni/Android.mk' } } sourceSets { main { jni.srcDirs = ['src/main/jni', 'src/main/jni/'] } } }
该方法Application.mk不再使用,需要把内容对应到 build.gradle:
defaultConfig { externalNativeBuild { ndkBuild { ... abiFilters "armeabi-v7a", "armeabi" } } }
更详细内容参考Google官方文档:
https://sites.google.com/a/android.com/tools/tech-docs/external-c-builds#TOC-Release-History
方法2 :(Android.mk & Application.mk)
1 手动创建jni目录 app/src/main/jni2 在jni目录编写Android.mk 和 Application.mk
3 编辑 app/build.gradle.
1). 删除ndk section
ndk{}
2). 增加import org.apache.tools.ant.taskdefs.condition.Os
import org.apache.tools.ant.taskdefs.condition.Os apply plugin: 'com.android.application' android { compileSdkVersion 21 buildToolsVersion "21.1.2" defaultConfig { applicationId "com.packtpub.store" minSdkVersion 14 targetSdkVersion 21 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
3) 增加sourceSets.main section
sourceSets.main { jniLibs.srcDir 'src/main/libs' jni.srcDirs = [] }
jniLibs.srcDir, 定义gradle去什么的地方找产生的库文件 jni.srcDirs, 定义静止gradle编译 native code 4) 最后创建新的Gradle 任务 ndkbuild,定义src/main 为编译路径
task ndkBuild(type: Exec) { if (Os.isFamily(Os.FAMILY_WINDOWS)) { commandLine 'ndk-build.cmd', '-C', file('src/main').absolutePath } else { commandLine 'ndk-build', '-C', file('src/main').absolutePath } } tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn ndkBuild }
修改后的build.gradle:
import org.apache.tools.ant.taskdefs.condition.Os
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
buildToolsVersion "26.0.1"
defaultConfig {
applicationId "com.example.hello"
minSdkVersion 14
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile
('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets.main { jniLibs.srcDir 'src/main/libs' jni.srcDirs = [] }
task ndkBuild(type: Exec) { if (Os.isFamily(Os.FAMILY_WINDOWS)) { commandLine 'ndk-build.cmd', '-C', file('src/main').absolutePath } else { commandLine 'ndk-build', '-C', file('src/main').absolutePath } } tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn ndkBuild }
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:
espresso-core:2.2.2', {
exclude group: 'com.android.support', module:
'support-annotations'
})
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
}
相关文章推荐
- 使用Android Studio2.2进行NDK编程下载NDK和编译工具
- 使用Android Studio 1.3 版本进行NDK开发 编译运行hello-jni项目及分析
- Android studio 中调用ndk-build 进行编译native 层直接编译
- 使用Android Studio2.2进行NDK编程创建示例
- android studio 使用ndk编译.C文件生成so文件
- 使用ndk-build编译 android调用的so库
- Android Studio 使用gradle进行编译(附)
- linux 下使用ndk-build编译android使用的c++静态库
- Android Studio使用JNI和NDK进行开发
- 使用go build 进行条件编译
- 使用Android studio 2.3.3进行NDK开发
- android studio 2.2 使用cmake编译NDK
- 使用Android Studio和Gradle编译NDK项目之Experimental Plugin User Guide
- 【Android Native Code开发系列】七 使用NDK进行交叉编译 & 编译ACE for android
- AndroidStudio 使用ndk-build命令编译不同CPU架构的so库
- 使用android studio进行ndk开发时如何定位crash错误
- 使用Android Studio进行NDK开发和调试(gradle-experimental的使用)
- 使用Android Studio进行NDK开发和调试(gradle-experimental之官方文档的翻译说明)
- (OK) 交叉编译hello.c for android (--sysroot),不使用Android.mk和ndk-build
- 解决使用NDK进行编译时出现undefined reference to function的问题