一,新建项目
如果有JNI的应用,可以直接在新建时选择支持C++;如下图:
按照android studio的项目管理方式,项目可以分成多个module的方式;新建的项目已经包含了APP module,项目可以根据需要新建module,或导入module;也可以导入(import)module;用得比较多了是增加lib和jar包;
新建项目或新建module后都会在对应的目录下生成build.gradle(相当于android.mk)编译构建文件;和setings.gradle文件,setings.gradle文件会包含项目所有的build.gradle的信息,gradle\wrapper\gradle-wrapper.properties 为gradle的版本和依赖文件,导入项目时经常会因为意思文件的编译的tool版本对应不上而需要手动修改;
二,导入第三方jar包
在项目目录下建libs文件夹,然后把依赖的库拷贝进去,项目右键选择open module seting->dependecles增加;app module中的 build.gradle中就如有加入库的依赖信息
dependencies {
compile files('libs/android-support-v13.jar')
compile files('libs/odata4j-0.7.0-clientbundle.jar')
}
当然,也可以手动加入;三,导入或增加 module
导入或增加module时需要手动修改相关依赖模块的grandle文件,这里以
为例,在setings.gradle中加入增加module的build.gradle的目录名信息':dir(':lib')
在使用库的app的build.gradle加入依赖编译信息
依赖本地包:
dependencies {
compile files('libs/foo.jar')
}
或者在open module seting->dependecles->module dependencles
四,怎样引入第三方.SO文件
引入第三方so文件,比较繁琐,需要在APP的build.gradle增加转换方法
task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs") {
destinationDir file("$projectDir/libs")
baseName "Native_Libs2"
extension "jar"
from fileTree(dir: "libs", include: "**/*.so")
into "lib"
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn(nativeLibsToJar)
}
/************************************/
apply plugin:
'com.android.library'
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
}
/** 导入so文件 */
task nativeLibsToJar(type: Zip, description:
"create a jar archive of the native libs"
) {
destinationDir file(
"$projectDir/libs"
)
baseName
"Native_Libs2"
extension
"jar"
from fileTree(dir:
"libs"
, include:
"**/*.so"
)
into
"lib"
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn(nativeLibsToJar)
}
}
dependencies {
provided fileTree(dir:
'libs'
, include: [
'*.jar'
])
}
或者
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
compile files('libs/××××.jar')
××××为转换前的.so文件名;
另外一种传说的引入方法:
引用jar文件
1.将jar文件复制、粘贴到app的libs目录中;
2.右键点击jar文件,并点击弹出菜单中的“Add As Library”,将jar文件作为类库添加到项目中;
3.选择指定的类库。
注:如果不执行2、3步,jar文件将不起作用,并且不能使用import语句引用。
引用so文件
方法1
网上有很多引用so文件的方法,多数都很麻烦,在KYLE THIELK的博客中找到了一种简单的方法。
1.在“src/main”目录中新建名为“jniLibs”的目录;
2.将so文件复制、粘贴到“jniLibs”目录内。
方法2,最简单的app 的引用模块中的buid.gradle增加
android{
sourceSets.main.jniLibs.srcDirs = [
'libs'
]
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
}
......}
方法3:
通过插件将so文件依赖到jniLibs文件夹。
参考资料:http://www.jcodecraeer.com/a/anzhuokaifa/Android_Studio/2015/0804/3256.html
插件/开源项目 :https://github.com/nhachicha/android-native-dependencies
五,eclipse项目导入android studio
不想更改目录结构,需要在build.gradle增加
sourceSets {
main {
manifest.srcFile
'AndroidManifest.xml'
java.srcDirs = [
'src'
]
resources.srcDirs = [
'src'
]
aidl.srcDirs = [
'src'
]
renderscript.srcDirs = [
'src'
]
res.srcDirs = [
'res'
]
assets.srcDirs = [
'assets'
]
// 关键是这句
jniLibs.srcDirs = [
'jniLibs'
]
}
debug.setRoot(
'build-types/debug'
)
release.setRoot(
'build-types/release'
)
}