AndroidStudio⽣成so⽂件的⼏种⽅式
demo链接在⽂末。
在Android Studio中有3种⽅法⽣成so⽂件。
最初的时候,我曾经使⽤过Visual Studio⽣成so⽂件。经历了从⼊门到放弃的过程。。。。
——————⽂中的⽅法⼆ Android Studio 3.1已经不再⽀持,build的时候会报错(写这篇⽂章的时候版本是Android Studio 2,错误信息如下)。————
Error: Flag android.useDeprecatedNdk is no longer supported and will be removed in the next version of Android Studio. Please switch to a supported build system.
Consider using CMake or ndk-build integration. For more information, go to:
To get started, you can use the sample ndk-build script the Android
plugin generated for you at:
D:\AndroidStudio\others\JNI2\app\build\intermediates\ndk\debug\Android.mk
Alternatively, you can use the experimental plugin:
To continue using the deprecated NDK compile for another 60 days, set
android.deprecatedNdkCompileLease=1526536223345 in gradle.properties
1.通过mk⽂件和gr a dle。
//这种是带m k⽂件的⽅法
让Gradle构建⽀持NDK
⾸先,什么是mk⽂件?gradle是什么?
gradle相关资料:
注意第⼀句:Gradle是⼀个基于Apache Ant和Apache Maven概念的项⽬⾃动化建构⼯具。
注意第⼀句:Gradle
那么什么是⾃动化构建?
⾃动化构建)指⾃动创建软件组建的⼀组进程,包括将计算机源代码编译成⼆进制
构建⾃动化、⾃动化构建
组建⾃动化
组建⾃动化(英语:Build automation,⼜称构建⾃动化
码、将⼆进制码包装成软件包以及运⾏⾃动化测试。
组建⾃动化原先是通过创建makefile来完成的,如今则主要使⽤两⼤类⼯具完成组建[1]:
组建⾃动化⼯具(如Make、Rake、Cake、MS build、Ant、Gradle等)。
MakeFile相关资料:
可以简单看下。总⽽⾔之,⼀开始是使⽤makefile,后⾯就演变成使⽤gradle。
什么是mk⽂件?
⾸先,官⽅⽂档链接如下:
但是我没有看懂。然后到了这篇:
浅析Android下的Android.mk⽂件
开头是这样写的:⼤家都知道在Linux下编辑经常要写⼀个Makefile⽂件, 可以把这个Makefile⽂件理解成⼀个编译配置⽂件,它保存着如何编译的配置信息,即指导编译器如何来编译程序,并决定编译的结果是什么。⽽在Android下的Android.mk⽂件也是类型的功能,顾名思义,从名字上就可以猜测得到,Android.mk⽂件是针对Android的Makefile⽂件.
因此可以看出android下的mk⽂件就是⽤于组件⾃动化的⽂件。
编写Android.mk⽂件需要按照google官⽅⽂档中规范去编写。
这⾥通过m k⽂件和gr a dle协同⼯作去完成组件⾃动化的⼯作。
这⾥通过mk
Gr a dle Andr o id Plugin 中⽂⼿册
Gra
/
/-------------------这个⾮常详细地介绍了gradle----------------------------------
Gradle 完整指南(Android)
//-------------------------------具体demo待补......-----------------
注意,在此之前,需要配置NDK环境。这⾥不作介绍。
所需增加⽂件如下:
Application.mk
Android.mk
具体步骤截图:
新建⼀个⼯程,不⽤勾选include C++ support。
① ⾸先配置gradle。⽂字版在下⾯。
gradle中配置如下:
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
buildToolsVersion "26.0.1"
defaultConfig {
applicationId "com.demo.jnidemo"
minSdkVersion 19
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner  "st.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(''),'proguard-rules.pro'
}
}
sourceSets.main {
jni.srcDirs = []
jniLibs.srcDirs = ['src/main/jniLibs']//设置⽬标的so存放路径
}
task ndkBuild(type:Exec,description:'Compile JNI source via NDK'){
commandLine "C:\\Users\\lei\\AppData\\Local\\Android\\Sdk\\ndk-bundle\\d",            //配置ndk的路径
'NDK_PROJECT_PATH=build/intermediates/ndk',
//ndk默认的⽣成so的⽂件
'NDK_LIBS_OUT=src/main/jniLibs',
//配置的我们想要⽣成的so⽂件所在的位置
'APP_BUILD_SCRIPT=src/main/jni/Android.mk',
//指定项⽬以这个mk的⽅式
'NDK_APPLOCATION_MK=src/main/jni/Application.mk'
//指定项⽬以这个mk的⽅式
}
tasks.withType(JavaCompile){
//使⽤ndkBuild
cmake如何使用
compileTask ->compileTask.dependsOn ndkBuild
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
.......................................................................
}
//这⾥还应该加上⼀个clear部分的代码,暂时未到。
② ⽣成.h头⽂件
⾸先,新建⼀个类JNI。
public class JNI {
static{
System.loadLibrary("jni_demo");
}
public native int getInt();//随便定义⼀个函数。
}
——————————android studio 3中⽣成.h头⽂件分割线——————————
android studio 3中这种⽣成.h头⽂件的⽅式不⾏了,我没有到⽣成的class⽂件的位置,最简单的就是⾃⼰写.h⽂件或者使⽤External Tools ⽣成。