首页 > 其他分享 >Gradle学习之Jar,So文件管理

Gradle学习之Jar,So文件管理

时间:2022-10-23 14:32:48浏览次数:50  
标签:类库 架构 -- 代码 Jar Gradle compileClasspath So ARM

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 中
  1. 编译时 --> 大家熟悉吗,不熟悉的这里我说下。什么是编译时,就是我们写完远程依赖,AS 把代码下来来,我们写代码时能代用到类库时、我们自己写代码时,代码还在编写阶段,只要没编译成 .class 都叫 编译时
  2. 运行时 --> 大家熟悉吗,不熟悉的这里我说下。什么是运行时,代码我们写完了,也编译成 .class 了,在机器上安装完,跑起来,这个时候叫运行时
  3. compileClasspath --> 中包含的代码、类库,是我们在编写代码时能使用到的类库。这个 path 里要是没有我们想要调的类库,即便我们把远程依赖代码下下来也没用
  4. runtimeClasspath --> 中包含的代码、类库,是 app 跑起来之后能找到的类库。即便我们把远程依赖代码下下来并写到 compileClasspath 里了,我们写代码时可以调用对应的类库,但只要没写到 runtimeClasspath 里面去,app 跑起来一样还是会找不到类库,会 crash 的
  5. implementation --> 这些只是对于依赖库不同的管理方式,核心逻辑就是决定远程拉下来的代码是放在 compileClasspath 里还是 compileClasspath 里,还是2个都放,还是只放一个,另一个不放

上传aar的时候会把依赖的类库整理生成一个POM文件,这个文件中定义了compile和runtimeclasspath。从而实现aar导入的依赖管理

标签:类库,架构,--,代码,Jar,Gradle,compileClasspath,So,ARM
From: https://blog.51cto.com/u_14689064/5787333

相关文章

  • Gradle学习之依赖冲突解决
    强制依赖版本默认情况下依赖冲突Gradle会使用高版本的依赖但是很多时候不兼容,因此出现了强制依赖版本的几个关键字1)isFoceisFoce标记会强制使用该标记版本的依赖depe......
  • 【json报错】java json expect ':' at 0, actual = 报错解决方法【java json】【一
         解决方法:  ......
  • postman发送json参数
    请求方式选择POST,设置Headers,key为Content-Type,value为application/json。 设置Body:类型选择RAW,请求报文为json字符串。  以上即是postman发送json报文的......
  • 按照tensorflow jupyer
    anaconda 安装包 链接:https://pan.baidu.com/s/1wh6mYu1uMLlPM5Ai5ONCXQ提取码:3rlo 两个库pipinstalltensorflow==2.8.0keras==2.8-ihttps://pypi.douban.co......
  • java项目导入commons-io-2.11.0.jar包
    1.下载commons-io-2.11.0.jar   2.在项目目录上创建lib文件夹并拷贝commons-io-2.11.0.jar粘贴 3.在commons-io-2.11.0.jar右键选择“BuildPath”->“AddtoLi......
  • PHP array_multisort 多维数组排序的理解
    array_multisort(array1,sortingorder,sortingtype,array2,array3...) 1.数组从前往后,依次排序;前一组数中值相同时,才考虑后一个数组中的值排序;2.任一数组排序变......
  • sonarqube 简介
    简介sonarqube作为一款测试工具,可以为开发的代码保驾护航,一般的公司都会配置一个代码扫描,防止线上代码太拉跨参考链接1H左右就可以看完https://www.bilibili.com/vid......
  • Tensorflow解析tfrecord
    1、序列化#coding:utf-8from__future__importabsolute_importfrom__future__importdivisionfrom__future__importprint_functionimportnumpyasnpimpor......
  • 通过Linux的socket套接字实现客户端与服务器端的通信
    具体案例:使用树莓派ds18b20温度传感器实现温度上报首先需要获得传感器文件中保存的温度信息:温度信息通常保存在路径为“/sys/bus/w1/devices/28-xxxxxxxxxxxx/w1......
  • win11+cuda11.2+cudnn+Tensorflow-GPU 环境配置
    名词解释CUDA即英伟达的显卡并行计算框架,nvidia-smi可以查看tensorflow-gpu的运行需要它的底层支持,它是一个计算框架,抽象层次比驱动高,每个版本的CUDA都是基于一定版......