Jar文件
将jar包放到Libs文件中,使用一下方式将jar添加到依赖路径中
implementation files('hibernate.jar', 'libs/spring.jar')
implementation fileTree(dir: 'libs', include: ['*.jar'])
jar包会被AGP看成是本地代码资源,和依赖一个项目Project是一样的。
So文件
手动设置so文件路径
// 设置 .so 资源路径
android{
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
}
使用Android插件默认存放路径存放so文件
需要注意的是,so 文件需要放到具体的 ABI 目录下,不能直接放 libs 目录下,一般都是这样的
每个文件夹都对应的是一个CPU架构指令集,在defaultConfig中设置使用的ABI
android{
defaultConfig {
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
}
}
}
Android 平台 CPU 有三大类:ARM、x86、MIPS,其中 x86、MIPS 已经被彻底淘汰了,大家集成 .so 只要考虑 ARM 平台架构就行了.
ARM 平台架构主要有3种,下面说的代对应的是架构:
- armeabi: 第5代、第6代 ARM 处理器,早期 android 手机用,A5/7/8/9 核心用的都是这个架构
- armeabiv-v7a: 第7代、32位 ARM 处理器架构,带浮点数计算能力。A15/17 核心用的都是这个架构,一般现在也少见了,也都淘汰了
- arm64-v8a: 第8代、64位 ARM 处理器架构,A32/35/53/57/72/73 核心用的都是这个架构,一般现在的 ARM 处理器都在这个范围内
Google要求之后使用的so文件必须似乎64位的
依赖
Gradle 管理依赖是依靠2个 Classpath:compileClasspath、runtimeClasspath
- compileClasspath --> 编译时能使用的代码、类。当一个组件参与编译时,Gradle 就会将其放在 compileClasspath 中
- runtimeClasspath --> 运行时能使用的代码、类。当一个组件参与打包时,Gradle 就会将其放在 runtimeClasspath 中
- 编译时 --> 大家熟悉吗,不熟悉的这里我说下。什么是编译时,就是我们写完远程依赖,AS 把代码下来来,我们写代码时能代用到类库时、我们自己写代码时,代码还在编写阶段,只要没编译成 .class 都叫 编译时
- 运行时 --> 大家熟悉吗,不熟悉的这里我说下。什么是运行时,代码我们写完了,也编译成 .class 了,在机器上安装完,跑起来,这个时候叫运行时
- compileClasspath --> 中包含的代码、类库,是我们在编写代码时能使用到的类库。这个 path 里要是没有我们想要调的类库,即便我们把远程依赖代码下下来也没用
- runtimeClasspath --> 中包含的代码、类库,是 app 跑起来之后能找到的类库。即便我们把远程依赖代码下下来并写到 compileClasspath 里了,我们写代码时可以调用对应的类库,但只要没写到 runtimeClasspath 里面去,app 跑起来一样还是会找不到类库,会 crash 的
- implementation --> 这些只是对于依赖库不同的管理方式,核心逻辑就是决定远程拉下来的代码是放在 compileClasspath 里还是 compileClasspath 里,还是2个都放,还是只放一个,另一个不放
上传aar的时候会把依赖的类库整理生成一个POM文件,这个文件中定义了compile和runtimeclasspath。从而实现aar导入的依赖管理
标签:类库,架构,--,代码,Jar,Gradle,compileClasspath,So,ARM From: https://blog.51cto.com/u_14689064/5787333