android 编译时copy so文件

2023-11-12

因为项目只支持armeabi,而有些第三方库不支持armeabi,所以在编译时将v7、v8 so文件copy到armeabi。

直接上代码build.gradle中添加如下代码

afterEvaluate { project ->
    android.applicationVariants.each { variant ->
        opyV7Lib(variant, project)
    }
}

// 将armeabi-v7a xx.so 拷贝到 armeabi
def copyV7Lib(variant, project) {
    println("variant name=${variant.name}, buildType=${variant.buildType.name}")

    //取出变体名,将第一个字符变为大写,用于拼接task名称,例如debug->Debug,task名称 merge+Debug+NativeLibs
    def buildVariantName = variant.name.substring(0, 1).toUpperCase() + variant.name.substring(1)
    def taskName = "copyNativeLib" + buildVariantName
    println("taskName = ${taskName}, taskVariantName = ${buildVariantName}")

    def nativeLibDir = project.buildDir.getAbsolutePath() + "/intermediates/merged_native_libs/${variant.name}/out/lib"
    def armeabiV7Dir = nativeLibDir + "/armeabi-v7a"
    def armeabiDir = nativeLibDir + "/armeabi";

    println("armeabiV7Dir = ${armeabiV7Dir}")
    project.task(taskName) {
        doLast {
            println("copy from:" + armeabiV7Dir)
            println("copy into:" + armeabiDir)
            copy {
                from(armeabiV7Dir) {
                    //将v7 目录下的so copy到 armeabi
                    include("xx.so")
                }
                into armeabiDir
            }
        }
    }

    //gradle版本命令不同,5.6.x 版本测试有效
    def mergeLibsTask = "merge${buildVariantName}NativeLibs"
    project.tasks[taskName].dependsOn(project.tasks[mergeLibsTask])
    project.tasks["strip${buildVariantName}DebugSymbols"].dependsOn(taskName)
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android 编译时copy so文件 的相关文章

  • Sqlite 查询检查 - 小于和大于

    return mDb query DATABASE TABLE new String KEY ROWID KEY LEVEL KEY LEVEL gt 3 lt 5 null null null null 我究竟做错了什么 它返回的值全部高
  • ActionBarCompat 支持库 android:selectableItemBackground 不起作用

    我正在使用新的 ActionBarCompat 支持库 操作栏中的操作按钮在按下时应更改其背景 它适用于 Android 4 3 但不适用于 Gingerbread 在姜饼中 如果我按下按钮 它不会改变背景 我什至改变了选择器 它再次适用于
  • android - 过度绘制布局允许通过 LinearLayout 进行触摸

    在下面的 UI 中 我将下面的 drabable 覆盖了整个屏幕 LinearLayout 是透明的 并允许其下方的控件可单击或可触摸 基本上我可以滚动此 LinearLayout 下面的列表以及单击控件 我如何禁用它 See attach
  • 相当于Android中的javax.swing.Timer

    有没有类似的东西javax swing Timer在安卓上 我知道如何创建自己的线程 但是有类似摆动计时器的东西吗 您可能正在寻找课程android os CountDownTimer http developer android com
  • 不使用 CookieManager 的 Android 会话 cookie

    我的应用程序进行多次网络调用以获得身份验证 我需要将此会话存储在 cookie 中 我想使用 Cookie Manager 但经过一些研究后 我发现它仅适用于 API 9 及更高版本 并且我的应用程序需要向后兼容 我使用 HTTPURLCo
  • Android 上的硬币识别

    我目前正在开发一个 Android 应用程序 它能够拍摄硬币的现有图像 或者使用内置摄像头扫描单个硬币 非常像 Google Goggles 我正在使用 Android 版 OpenCV 我的问题如下 什么方法最适合使用 OpenCV 在
  • 无法运行应用程序,gradle 给出错误:No Such Field 错误

    我正在使用 Amazon Face Rekognition API 并在从相机捕获图像后将图像发送到 aws 时收到此错误 java lang NoSuchFieldError 没有类型的静态字段实例 Lorg apache http co
  • Android接收通知打开和取消事件

    我从 webService 接收数据以生成自定义通知 我想追踪Intent要知道open 点击 或cancel 滑动 通知上的事件 以报告服务器进行分析 有没有听众onIntentStart or onIntentCanceled 也许是通
  • 如何从debug.keystore文件获取MD5?

    我使用一些命令来获取 MD5 私钥debug keystore文件 但实际上我得到的是 SHA1 私钥而不是 MD5 我不知道如何获得MD5 这是我使用的命令 keytool list alias androiddebugkey keyst
  • 将搜索结果更新为 Android 中的 Lazy Adapter

    我有项目列表 想为其实现搜索功能 因此 我有一个带有 addTextChangedListener 的文本框 搜索结果运行良好 但当我尝试将结果设置为 ListView 时 新结果将附加到旧结果中 我正在使用惰性适配器 如何清除适配器中的旧
  • 在Android的activity中调用onResume

    在活动的过程中通过调用 this OnResume 强制 onResume 事件可以吗 或者我应该实现另一个由 OnResume 和第一个成员调用的过程 实现在您的重写中调用的另一个过程onResume 后者不打算由您调用 它是一种方便的方
  • 如果联系人与电话通讯录中的应用程序关联,则显示应用程序图标

    我正在尝试显示与该应用程序关联的电话号码的应用程序图标 我试着跟随this http www c99 org 2010 01 23 writing an android sync provider part 1 链接但是太难了 有没有任何库
  • onTouch 给出奇怪的触摸点 Android

    我正在做的事情非常简单 我以前做过 但现在它没有按我的预期运行 无论如何 让我简要解释一下我正在尝试做什么以及我得到了什么 设想 我有一个RelativeLayout其中一个ImageView已放置 现在我设置touchlistener像这
  • 我可以在主线程上读取一个小 txt 文件,还是应该始终避免那里的 I/O?

    我正在读取一个小的 json 文件 其中有几行 它存储在用户设备的内部应用程序文件夹中 我所做的就是这样 JSONObject jsonObject new JSONObject MyUtils inputStreamToString My
  • 在 Android SDK 中通过单击按钮更改背景颜色不起作用

    我有一个简单的程序 可以在单击按钮后更改背景颜色 但它不起作用 public class ChangeBackgroundActivity extends Activity Called when the activity is first
  • Android 视图和视图组

    在安卓中ViewGroup继承自View A ViewGroup是一个容器 里面装有Views ViewGroup LinearLayout View TextView 为什么 Android 的人们将这种关系定义为Inheritance而
  • 在 TextView onTextChanged 上设置文本

    我有一个定义为类属性的文本视图 以便我可以在整个类中访问它 在 onCreate 方法中我执行以下操作 chars TextView findViewById R id chars chars setText 300 之后 public v
  • 在Android中提取视频帧

    我想知道是否可以从 Android 中正在运行的视频中提取帧 我需要定期提取帧并将其发送以进行进一步处理 有人能为我找到答案吗 Thanks Abhi 您可以使用媒体元数据检索器 http developer android com ref
  • Java中如何限制文件大小

    我正在我的应用程序中创建一个文件 并继续向该文件中写入一些内容 但是当我的文件达到一定大小 比如说 100 行 后 我想删除第一行并将新行写入底部 要求是我的文件应该受到限制 但它应该保留我写入文件的最新内容 请告诉我在Java中是否可行
  • android-如何在谷歌地图上将标记的位置显示为地址

    我已经尝试过 commonsware googlemapsv2 教程 特别是在地图上拖动标记 但现在另一个问题困扰着我 问题是如何将标记的当前位置显示为地图下方或上方的地址 字符串 这是我使用的代码 public class MainAct

随机推荐

  • micropython移植教程_Micropython移植篇——从点亮一个灯开始

    收到论坛申请的 MicroPython入门指南 已经两天了 看到了第四章 没有再往下看了 感觉应该先找个硬件移植 然后再往下看 跟着学习 这样才有意义 好了 先说下移植的过程吧 硬件采用的是STM32F429DISC 具体步骤 第一步 下载
  • Matlab 学习笔记 (部分内容系转载)

    由于要参加数学建模比赛的原因 我需要在不到一周的时间内初步地学习Matlab 因此 我希望把我在学习过程中阅读的资料记录下来 方便跟我一样需要在较短时间内速成Matlab的同学 基本上我记录的东西都是从网上的资料总结而来 所以这篇文章更偏向
  • MySQL读写分离实战

    1 MySQL读写分离概念 MYSQL读写分离的原理其实就是让Master数据库处理事务性增加 删除 修改 更新操作 create insert update delete 而让Slave数据库处理查询 select 操作 MySQL读写分
  • Java基础--------集合框架

    参考http blog csdn net zhongkelee article details 46801449 点击打开链接 以此为模板 自己做了整理 修改 目录 一 概念 二 集合框架的体系 2 1 Collection接口 2 1 1
  • 三维人脸重建(二)——Python生成ply文件

    目录 引言 一 ply格式模型介绍 二 代码 注 引言 本文主要以做坐标点为例 我们知道python对数据的处理主要是以numpy的形式 一般三维空间坐标的矩阵在python中为 x1 y1 z1 x2 y2 z2 xn yn zn 然后可
  • Java中的栈区和堆区问题(关于数组)

    Java中创建的局部变量等是存放在栈区的 而数组是存放在堆区的 那些new出来的对象也大多存放于堆区 栈区的空间往往不大 而堆区空间就会大很多 这里我们创建一个数组 如果在idea中打印a 会得到一串符号 这个是数组在堆区首元素的地址 代表
  • 数据结构 图 part2

    文章目录 图的遍历 深度优先遍历 DFS 遍历步骤 邻接矩阵的存储 邻接表的存储 广度优先遍历 BFS 遍历步骤 非连通图的遍历 连通分量 如何遍历 生成树 图的遍历 深度优先遍历 DFS 遍历步骤 在访问图中某一起始顶点v后 由v出发 访
  • 测试开发——用例篇(如何设计一个测试用例,设计测试用例的一些具体方法)

    目录 一 测试用例的基本要素 二 设计测试用例的万能公式 在没有需求文档的情况下 1 水杯的测试用例 2 一个网站的登录测试用例 三 基于需求进行测试用例的设计 四 测试用例的具体设计方法 根据需求 1 等价类 2 边界问题 3 判定表 因
  • 阿里云云解析DNS各种概念深度剖析

    摘要 本文所设计概念有 主机记录 www 记录类型 A记录 CNAME记录 TXT记录 解析路线 isp 网络服务提供商 记录值 TTL time to live 缓存生存时间 地方DNS DNSPod 场景描述 域名解析有一个 记录数 和
  • KEIL5中点击build会全编译的解决方法

    今天在笔记本上调试STM32时 发现每次点击build 总是会对工程内所有文件进行编译 相当于是rebuild的功能 开始以为是keil5版本的问题 经过网上查找并亲自测试 现得出解决办法 在Option中C C 一栏内 添加路径包含工程内
  • 联想rd540服务器怎么装系统,联想RD540加显卡BIOS设置

    开机按F1进入BIOS设置界面 然后进入CONFIG子界面 找到Display这个子项 然后回车进入 这个是设置显示输入和显卡的地方 里面有三个项目 Boot Display Device 启动时使用的显示装置 1 保持默认Thinkpad
  • RabbitMQ修改数据目录MNESIA数据目录

    RabbitMQ修改数据目录MNESIA数据目录 一 什么情况要调整数据目录 1 1 磁盘空间不足 1 2 磁盘性能瓶颈 1 3 迁移集群的备份还原 1 4 数据分离 二 MNESIA简介 三 操作步骤 四 其他问题 4 1 重启失败 一
  • Python习题答案

    1 多选题 程序设计语言包括 和 执行两种方式 正确答案 AB A 编译 B 解释 C 脚本 D 编写 2 单选题 机器语言是一种 语言 正确答案 A A 二进制 B 八进制 C 十进制 D 十六进制 3 单选题 是将源代码转换成目标代码的
  • sqli靶场通关之less9

    sqli less9 时间盲注 结合burpsuite 1 不返回报错信息页面 无法进行基于报错信息的盲注 2 页面不存在true和false两种不同的页面 无法进行对比也就无法进行布尔盲注 一般来说 在页面没有任何回显和错误信息提示的时候
  • 【Python基础】面向对象基础和特性

    Python面向对象 面向对象基础 定义类 创建对象 添加和获取对象属性 魔法方法 对象的生命周期 私有属性和私有方法 面向对象特性 封装 封装案例演练 继承 继承的传递性 方法的重写 父类的私有属性和私有方法 多继承 新式类与经典类 多态
  • 平摊分析(Amortized analysis)

    今天我们主要讨论所谓的平摊分析 amortized analysis 它是用来分析一系列操作的平均所需要的代价 可能有人会问它利用概率论的知识 通过概率来求平均情况 答案是否定的 它并不涉及概率 在一些情况下平摊分析能够很好的帮助我们分析我
  • 三进制数位和

    1 问题描述 问题描述 给定L和R 你需要对于每一个6位三进制数 允许前导零 计算其每一个数位上的数字和 设其在十进制下为S 一个三进制数被判断为合法 当且仅当S为质数 或者S属于区间 L R 你的任务是给出合法三进制数的个数 输入格式 一
  • eclipse下创建webService服务

    本博客是记录在eclipse开发环境中将一个方法开放出去 提供一个webService接口 可以通过浏览器访问 开发环境 eclipse 下载地址 http www eclipse org downloads eclipse package
  • Linux高级专题篇详解--Mysql大全(数据库详细介绍,mysql类型,编译安装,yum安装,增删改查,权限管理,日志备份恢复,主从复制,mycat读写分离)

    Day01 一 数据库介绍 1 什么是数据库 数据库就是一个存放计算机数据的仓库 这个仓库是按照一定的数据结构 数据结构是指数据的组织形式或数据之间的联系 来对数据进行组织和存储的 可以通过数据库提供的多种方法来管理其中的数据 2 数据库的
  • android 编译时copy so文件

    因为项目只支持armeabi 而有些第三方库不支持armeabi 所以在编译时将v7 v8 so文件copy到armeabi 直接上代码build gradle中添加如下代码 afterEvaluate project gt android