【Android Studio安装部署系列】十七、Android studio引用第三方库、jar、so、arr文件
版权声明:本文为HaiyuKing原创文章,转载请注明出处!
概述
在Android开发过程,经常需要用到第三方库以及jar、so、arr文件,那么如何引用到项目中呢?下面简单介绍下。
引用第三方库
一般按照第三方库作者提供的引用方式进行引用即可。
比如,以引用okhttp-utils开源库为例:

在module(比如app)的build.gradle文件中添加下面的代码
注意:旧版本Android studio的写法是compile 'com.zhy:okhttputils:2.6.2'
新版本Android Studio的写法略有不同:implementation 'com.zhy:okhttputils:2.6.2'
不过在新版本Android studio中是兼容旧版本的写法的。

然后Sync Now 或者 Sync Project with Gradle Files

引用jar文件
其实当你在新建项目的时候就默认可以编译libs目录下的jar了,因为所有的module的build.gradle文件中含有下面的依赖:

所以只需要将引用的jar文件复制到module(为什么是module,而不是app,因为jar文件不一定是放到app中,可能是任意module中;而且app也是module的一种)的libs目录中即可。
将jar包复制到libs目录下

Sync Project with Gradle Files

引用成功的效果

至此,只能算是将jar成功引用到baselibrary中了,也就是说只能在baselibrary中使用这个jar,而不能在app中使用(app中可是依赖这个baselibrary了)。那么如何实现依赖baselibrary的module中也能使用jar文件的方法呢?
在当前module的build.gradle文件的dependencies{}中添加以下代码【适用依赖当前module的其他module也需要使用这个jar文件的情况】
apply plugin: 'com.android.library'
android {
compileSdkVersion 26
defaultConfig {
minSdkVersion 16
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
postprocessing {
removeUnusedCode false
removeUnusedResources false
obfuscate false
optimizeCode false
proguardFile 'proguard-rules.pro'
}
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
//jsoup 必须compile,否则app那里找不到相关类
compile files('libs/gson-2.2.4.jar')
}
Sync Project with Gradle Files

引用arr包
将arr包复制到module的libs目录下

在build.gradle中添加下面的代码
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.why.project.helloworld"
minSdkVersion 16
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
//在layout文件夹下建立子文件夹
sourceSets {
main{
res.srcDirs = [
'src/main/res/layout/home',
'src/main/res/layout',
'src/main/res'
]
}
}
}
repositories{
flatDir {
dirs 'libs'
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation project(':baselibrary')
compile 'com.zhy:okhttputils:2.6.2'
compile(name: 'ijkplayer', ext: 'aar')
compile(name: 'libp', ext: 'aar')
}
Sync Project with Gradle Files

如果该arr文件是在module中引用的,那么app又依赖了这个module,那么如果不做任何处理的话,编译后会出现failed to resolve的错误提示

比如,我在baselibrary中引用了libnewurl.arr文件。

解决方案,在app(因为app依赖了这个baselibrary)的build.gradle文件中添加以下代码:
repositories{
flatDir {
dirs 'libs'
dirs project(':baselibrary').file('libs')
}
}
上面代码中的baselibrary是module的名字,libs是module依赖的aar库所在的目录。

引用so包
方案一【建议使用这个方案】
在 src/main/ 目录下创建文件夹 jniLibs(如果有就不需要创建了),将so文件复制到这个目录下即可,工程会自动加载src/main/jniLibs目录下的so动态库。



将so文件复制到jniLibs目录中

方案二
在libs目录下放入对应不同CPU架构的so文件,通过在build.gradle文件的android{}中加入代码: jniLibs.srcDir 'libs' 来说明so的路径为该libs路径。
sourceSets {
main {
jniLibs.srcDir 'libs'
}
}

如果想要控制使用的CPU平台,则在build.gradle的defaultConfig下添加
ndk {
abiFilters "armeabi", "armeabi-v7a" //选择要使用的平台 ,"x86", "mips"
}

如果编译不通过,在项目的gradle.properties中添加
android.useDeprecatedNdk=true

参考资料
Android Studio如何引用so、arr、jar包(by 星空武哥)
[Android]依赖了包含aar包的库后出现Failed to resolve库aar包问题的解决办法
【Android Studio安装部署系列】十七、Android studio引用第三方库、jar、so、arr文件的更多相关文章
- 【Android Studio安装部署系列】目录
概述 从刚开始使用Android Studio到现在,下面所有目录下的操作,当时习惯性的把每一个整理成一个文档(其实就是简单文字描述+截图):有些地方当时是一知半解,现在会稍微明白一些.正好赶上现在有 ...
- 【Android Studio安装部署系列】二十五、Android studio使用NDK生成so文件和arr文件
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio使用ndk的简单步骤. NDK环境搭建 下载NDK 下载链接:https://developer.and ...
- 【Android Studio安装部署系列】二十一、Android studio将项目上传到github中
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 两个相关概念:git和github Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.Git ...
- 【Android Studio安装部署系列】二十八、Android Studio查看其它APP的布局结构
概述 日常使用别家的APP过程中,会遇到一些比较好看的布局,这时候我们就想学习一下别人的布局结构,以便参考. (1)手机连接电脑.设置手机为USB调试模式 参考<[Android Studio安 ...
- 【Android Studio安装部署系列】三十三、windows系统中通过SourceTree使用git
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 前期准备 选择代码托管服务器:gitlab.github.开源中国等. 注册账号 创建项目 安装git 参考<[Android ...
- 【Android Studio安装部署系列】三十六、从Android Studio3.1.4升级到Android studio3.2【以及创建android p模拟器(未成功)】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 因为想要使用Android P模拟器,所以需要将Android Studio升级到3.2版本以上. 按照官网的说法:参考<ht ...
- 【Android Studio安装部署系列】三十六、Android studio3.2使用过程中注意事项
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio升级到3.2之后,运行旧项目的时候出现了各种情况,特此记录下. 一.打包选项多了,一般情况下选择APK即 ...
- 【Android Studio安装部署系列】三十、从Android studio2.2.2升级到Android studio3.0之路
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 Android Studio 3.0的新功能 https://mp.weixin.qq.com/s/2XmVG4mKEDX6-bvZ ...
- 【Android Studio安装部署系列】三十七、从Android Studio3.2升级到Android Studio3.4【以及创建Android Q模拟器】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 保持Android Studio开发环境的最新版本. 下载Android Studio3.4 使用Android Studio自带的 ...
随机推荐
- php获取汉字首字母实例
在我们实际开发工作中,有时候需要获取输入汉字的首字母,然后存到库中,方便用户搜索相关信息,下面给出php代码,留做备用: //新添加获取汉子首字,首字字母 function pinyin($zh){ ...
- datalist 分页
Asp.net提供了三个功能强大的列表控件:GridView.DataList和Repeater控件,相对GridView,DataList和Repeater控件具有更高的样式自定义性,很多时候我们喜 ...
- vue组件的生命周期
先来张组件生命周期的示意图: 文档里是这样描述的:你不需要立马弄明白所有的东西,不过以后它会有帮助.传送门. Vue2.0的生命周期钩子一共有10个,同样结合官方文档作出了下表 生命周期钩子 详细 b ...
- Robot Framework和Selenium简介
1.1 RF简介 Robot Framework是一款python编写的功能自动化测试框架.具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行.主要用于 ...
- os模块介绍
一.os模块概述 Python os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.(一语中的) 二.常用方法 1.os.name 输出字符串指示正在使用的平台 ...
- XSS(跨域脚本攻击)应对之道
1.概念 xss一般分为两类,反射型和存储型. 反射型xss指的是客户端的不安全输入而引起的攻击,例如: 在某网站搜索,搜索结果会显示搜索的关键词,搜索时关键词填入<script>aler ...
- 6个常见的php安全攻击
1.SQL注入 SQL注入是一种恶意攻击,用户利用在表单字段输入SQL语句的方式来影响正常的SQL执行.还有一种是通过system()或exec()命令注入的,它具有相同的SQL注入机制,但只针对sh ...
- Linux kernel的中断子系统之(八):softirq
返回目录:<ARM-Linux中断系统>. 总结:中断分为上半部和下半部,上半部关中断:下半部开中断,处理可以延迟的事情.下半部有workqueue/softirq/tasklet三种方式 ...
- 2018 Unite大会——《使用UPA工具优化项目》演讲实录
2018年5月11日至13日,腾讯WeTest与Unity联合打造的移动游戏性能分析工具(Unity Performance Analysis,以下称为UPA)正式亮相2018 Unite大会,为Un ...
- Ubuntu系统下解决“YourUserName不在sudoers文件中。此事将被报告”的问题
本文由荒原之梦原创,原文链接:http://zhaokaifeng.com/?p=624 问题描述: 之前在使用Fedora系统时遇到过在使用 sudo 时提示"YourUserName不在 ...