gradle是否可以编译c语言,build.gradle按条件编译与cmake配置

在build.gradle里面通过productFlavors就可以方便的实现不同的编译方案。

flavorDimensions定义维度

flavorDimensions 从单词字面理解知道是 “风味维度”,是需要结合 “产品风味(即productFlavors)” 来一起使用的。flavorDimensions 的使用会定义出维度,供接下来的 productFlavors 使用。

android {

// 省略其他参数

flavorDimensions('abi', 'version')

}

使用上面代码,则会定义出两个维度:version 和 abi。一个参数一个维度。

productFlavors的意义

productFlavors 从字面了解是“产品风味”。他需要和一个风味维度对接,否则会报错。

android{

// ...

flavorDimensions('abi', 'version')

// 创建产品风味

productFlavors {

v1 {

// 关联纬度

dimension 'version'

}

v2 {

dimension 'version'

}

x86 {

dimension 'abi'

}

armV7 {

dimension 'abi'

}

}

}

在 abi 维度上关联了两个产品,即 “armV7” 和 “x86”,在 version 的维度上关联了两个个产品,而这些维度的交织就会形成最终的风味,即我们上面所标出来的 “armV7V1”、“armV7V2”、“x86V1”、“x86V2”。

我们可以根据不同的风味,打出不同的apk包,便可以实现一套核心代码打出多个有些差异的包。

我的flavorDimensions & productFlavors

我的项目对abi不区分,只需要区分高通和mtk,所以维度就只定义了platform,cmake部分针对qcom和mtk分别定义了不同的宏,还可以指定其他native的参数。

flavorDimensions "platform"

productFlavors {

// Qualcomm platform

qcom {

dimension "platform"

externalNativeBuild {

cmake {

cppFlags "-std=c++11"

arguments "-DCMAKE_BUILD_TYPE=Release",

"-DUSE_QCOM=TRUE"

}

}

}

// mtk platform

mtk {

dimension "platform"

externalNativeBuild {

cmake {

cppFlags "-std=c++11"

arguments "-DCMAKE_BUILD_TYPE=Release",

"-DUSE_MTK=TRUE",

"-DCMAKE_ANDROID_NDK=\$(System.getenv('ANDROID_NDK_HOME'))"

}

}

}

}

实验证明上面的"-DCMAKE_ANDROID_NDK=$(System.getenv('ANDROID_NDK_HOME'))"不生效的。换成"-DANDROID_NDK=/home/tools/android-ndk/android-ndk-r19c"这样的绝对路径也不行。

只有通过修改local.properties才可以,可以通过编译脚本修改ndk.dir。

#!/usr/bin/env bash

#set build ndk to android-ndk-r19c

ndkdir=${ANDROID_NDK}

echo "ndk.dir=${ndkdir}" >> local.properties

# clean

./gradlew clean

# build qcom

./gradlew assembleqcomRelease

# build mtk

./gradlew assemblemtkRelease

参考:

https://blog.csdn.net/weixin_37625173/article/details/100867037

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502755.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

post请求改成body_post请求body格式

在PostMan中用Post方式,Body有form-data,x-www-form-urlencoded,raw,binary四种。其中raw又分以下7种。现在来区分一下:form-data是http请求中的multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。…

windows多用户 文件夹不共享_手把手教你如何使用Tekla多用户

Tekla有多用户模式,对于大模型需要多人合作很有用,可以多人同时建模互不干扰,下面简单说下多用户建立过程。 首先需要参与模型的计算机处于同一局域网内,一般来说公司都有局域网,或者办公室内就是一个小局域网&#xf…

roads 用户体验标准_世界智能大会与ROAD用户体验报告

近期由国家发展和改革委员会、科学技术部、工业和信息化部、国家互联网信息办公室等共同举办的2020年第四届世界智能大会在天津云上展开,超过百余位智能科技领域的知名专家和企业家参与了大会过程,其中车联网领域专家关于5G车联网”推进中国特色的车路协…

android 组件路由框架,XRouter:组件化路由框架

添加jitpack仓库allprojects {repositories {...maven { url https://jitpack.io }}}添加依赖:dependencies {//kotlin 使用kapt编译时依赖注解,Java使用annotationProcessorkapt com.github.roger1245.XRouter:xrouter-compiler:1.0.2api com.github.ro…

hystrix原理_面试必问的SpringCloud实现原理图

引言面试中面试官喜欢问组件的实现原理,尤其是常用技术,我们平时使用了SpringCloud还需要了解它的实现原理,这样不仅起到举一反三的作用,还能帮助轻松应对各种问题及有针对的进行扩展。以下是《Java深入微服务原理改造房产销售平台…

android 图片跑马灯动画,ImageView 图片循环跑马灯的效果

不解释了 直接上代码了main.xml布局文件,记住必须用RelativeLayout将ImageView重叠android:orientation"vertical" android:layout_width"fill_parent"android:layout_height"fill_parent" android:id"id/rl">android:…

Rust Trait

Rust 第16节 Trait Trait 告诉编译器 某种类型具有那些并且可以与其他类型共享的功能 它的本质就是 不同类型具有的相同行为 声明一个trait 关键字 trait;只有方法签名,没有方法实现 pub trait Animal {// trait 的声明,一个trait中可以有多个方法fn say(&s…

c++ string类的常用方法_【常用类方法】Object

Object类的知识点总结概述:1. Object类是所有其他类的父类2. Object类只有一个构造方法,这也是为什么所有子类在调用构造方法时都会默认先调用父类的无参构造方法3. Object类没有成员变量方法:1. public int hashCode()2. public final Class…

android 收获地址管理,android UiAutomator添加收货地址的用例

本人在学习UiAutomator的时候,遇到添加收获地址的测试用例,这里的地址的地区是一级一级选择的。所以写了一个随机选择的方法。分享出来,供大家参考。public void addAdress() throws UiObjectNotFoundException {login();waitForResourceIdAn…

python注释以符号什么开始_python注释以什么符号开始

python注释以什么符号开始,注释,中文,代码,批量,符号 python注释以什么符号开始 易采站长站,站长之家为您整理了python注释以什么符号开始的相关内容。 python中的注释有多种,有单行注释,多行注释,批量注释,中文注释也…

verilog 移位运算符 说明_Verilog学习笔记基本语法篇(二)·········运算符...

Verilog HDL的语言的运算符的范围很广&#xff0c;按照其功能大概可以分为以下几类:(1)算术运算符&#xff0c;-&#xff0c;*&#xff0c;/&#xff0c;%优先顺序&#xff01;~* / % -<< >>< < > > ! !&^ ^~|&&||&…

linux 别名,Linux中的别名就这么简单,如何使用和创建永久别名?

原标题&#xff1a;Linux中的别名就这么简单&#xff0c;如何使用和创建永久别名&#xff1f;输入文本和记命令是Linux命令行爱好者的缺点之一。如果你需要输入并记住同样长的命令&#xff0c;这可能会降低终端的工作效率。如果您可以用自己的短名称替换长命令&#xff0c;或者…

华为手机如何固定横屏_华为手机如何录屏?原来方法这么简单,手把手教你学会...

很多人都不知道&#xff0c;华为手机到底如何录屏&#xff0c;下面给大家分享4种方法&#xff0c;非常简单&#xff0c;手把手教你学会。一、通知栏录屏从手机顶端往下滑动打开通知栏&#xff0c;这个面板上有很多快捷功能&#xff0c;其中就有【屏幕录制】功能&#xff0c;点击…

程序发出的广播其他程序收不到_RabbitMQ 如何实现对同一个应用的多个节点进行广播...

1.背景了解过RabbitMQ的Fanout模式&#xff0c;应该知道它原本的Fanout模式就是用来做广播的。但是它的广播有一点区别&#xff0c;来回顾下它的含义&#xff1a;Fanout类型没有路由键的概念&#xff0c;只要队列绑定到了改exchange上面&#xff0c;就会接收到所有的消息。使用…

android listview高级,Android 高级控件笔记-列表视图ListView 基本适配器BaseAdapter

我最近做项目用到了基本适配器BaseAdapter&#xff0c;所以写篇博客总结一下&#xff0c;希望也能对你有所帮助什么时候用BaseAdapter(同一项存在多个控件&#xff0c;复杂的列表时)Android中Adapter类其实就是把数据源绑定到指定的View上&#xff0c;然后再返回该View&#xf…

cnn生成图像显著图_基于CNN与图像前背景分离的显著目标检测

基于CNN与图像前背景分离的显著目标检测东野长磊;万文鑫【期刊名称】《软件导刊》【年(卷),期】2020(019)001【摘要】为了解决计算机视觉模拟人眼的视觉机制,显著性目标检测DSS(DeeplySupervisedSalient)在某个场景中人眼首先观察到的目标.基于卷积神经网络和图像前背景分离算法…

api 创建zookeeper客户端_一文了解 Zookeeper 基本原理与应用场景

Zookeeper 是一个高性能、高可靠的分布式协调系统&#xff0c;是 Google Chubby 的一个开源实现&#xff0c;目前在分布式系统、大数据领域中使用非常广泛。本文将介绍 Zookeeper 集群架构、数据模型、监听机制&#xff0c;以及Zookeeper典型的应用场景等。1. Zookeeper 集群角…

mysql操作json优点和缺点_SQL-mysql操作json

一 前言MySQL 5.7.8 之后 支持 JSON (由rfc7159规定)数据类型&#xff0c;其能在字段中使用json 类型&#xff0c;做到了自动校验是否为json类型数据&#xff0c;否则插入数据会报异常&#xff1b;其次&#xff0c;储存json数据内部做到了优化储存&#xff0c;能够快速读取json…

android多个水波球,android球形水波百分比控件代码

本文主要介绍的是一个球形水波的百分比控件&#xff0c;市面上有各种形形色色的百分比控件&#xff0c;我一直觉得水波是最炫的&#xff0c;UI给了我这个机会&#xff0c;然而网上搜了一大堆&#xff0c;不是太复杂&#xff0c;代码太多(反正我是调不出效果来)&#xff0c;就是…

python数据去重的函数_python pandas dataframe 去重函数的具体使用

今天笔者想对pandas中的行进行去重操作&#xff0c;找了好久&#xff0c;才找到相关的函数 先看一个小例子 from pandas import Series, DataFrame data DataFrame({k: [1, 1, 2, 2]}) print data IsDuplicated data.duplicated() print IsDuplicated print type(IsDuplicate…