在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

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

  1. 【Android Gradle 插件】工程根目录下 build.gradle 配置文件 ( 远程仓库配置 | 依赖配置 | 所有子模块配置 | task clean 任务 )

    文章目录 一.工程根目录下 build.gradle 配置文件 1.基本作用 2.远程仓库配置 3.依赖配置 3.所有子模块配置 4.task clean 任务 Android Plugin DSL ...

  2. 【Android Gradle 插件】Module 目录下 build.gradle 配置文件 ( android 闭包块配置 | AppExtension 扩展类型参考文档 )

    文章目录 一.Module 目录下 build.gradle 配置文件 1.android 闭包块配置 2.AppExtension 扩展类型参考文档 Android Plugin DSL Refer ...

  3. 【Android Gradle 插件】Module 目录下 build.gradle 配置文件 ( plugins 闭包代码块中引入插件 | PluginAware#apply 方法引入插件 )

    文章目录 一.Module 目录下 build.gradle 配置文件 1.plugins 闭包代码块中引入插件 2.PluginAware#apply 方法引入插件 Android Plugin D ...

  4. android build.gradle在哪里,android中的build.gradle是干什么用的

    在编写程序的时候,有时候我们需要兼容不同系统版本的手机来进行真机测试,所以有时候我们需要修改sdk或者其他的东西的版本号,这时候我们就需要了解build.gradle文件了. 首先,在Android  ...

  5. build.gradle配置

    文章目录 1 build.gradle配置 1.1 project下的build.gradle 1.2 module下的build.gradle 2 Apk版本号的命名规则及配置方法 2.1 命名规则 ...

  6. 配置构建变体build.gradle的配置

    google原文链接 https://developer.android.com/studio/build/build-variants.html#product-flavors 配置构建类型 您可以 ...

  7. Build gradle project info的暴力解决方式

    之前是解决过这种问题的,但是昨天突然又遇到了,忘了解决方式,网上找了大半天没找到之前看的那篇文章-- 在github上下载的开源项目,在打开的时候总是会遇到这种问题.那是因为gradle网站被墙的原因 ...

  8. Android Gradle 学习笔记(四):Gradle 构建脚本

    本节我们从整体的角度来介绍一下Gradle. 一.setting.gradle 在Gradle中,定义了一个设置文件,用于初始化以及工程树的配置.设置文件的默认的名字就是setting.gradle, ...

  9. Gradle介绍1-入门和IDEA整合(Gradle Wrapper)

    1. Gradle 入门 1.1.Gradle 简介 Gradle 是一款Google 推出的基于 JVM. 通用灵活的项目构建工具, 支持 Maven,JCenter 多种第三方仓库;支持传递性依赖 ...

最新文章

  1. DataList在无数据记录时显示类似GridView空模板(EmptyDataTemplate)
  2. 浅谈深度学习(Deep Learning)的基本思想和方法
  3. 网络数据采集技术—Java网络爬虫入门与实战 书稿纠错
  4. 股票型基金和期货有什么区别?
  5. django 文件上传 研究
  6. html5效果案例,10个优秀HTML5网站案例赏析
  7. 服务器系统获取最高权限,webshell+servu获取系统最高权限
  8. semantic ui中文文档_求你别再用swagger了,给你推荐几个在线文档生成神器
  9. 大学生提高计算机应用能力,大学生计算机应用能力的培养策略
  10. 发现内存不能read和written的原因以及解决方法
  11. 从隔壁兄弟那爬点网页数据,整理成word文档
  12. 微信服务器在哪里修改密码,微信怎么修改密码?微信在哪里修改密码?
  13. DSP28335 CAN模块例程
  14. AXP221电源管理芯片使用注意点
  15. CSS3视窗单位vw、vh、vmin、vmax说明
  16. 联想小新padpro12.6 #Q706F 解锁输入TWRP教程
  17. c语言中换行符的ans2码,二级C语言复习
  18. 给大家分享一些IT网课资源的学习网站啦
  19. 在ubuntu 8.10下安装thunderbird中文版
  20. 感情这种事 即便是网恋也不能输!

热门文章

  1. 動態修改SiteMapPath路徑
  2. 遍历矩阵每一行穷举_[LeetCode] 566. 重塑矩阵
  3. dram和nand哪个难生产_仅300名员工,年产7台,订单排到5年后,比光刻机还难买...
  4. mysql8 修改加密方式_mysql8修改密码加密方式
  5. java中如何调出字体对话框_java 字体对话框
  6. 北师大计算机试题五答案,北京师范大学计算机软件及理论2022考研招生分析、参考书、真题等复习指导解析...
  7. java indexof方法_【3-14】Java中集合类list的增删改查
  8. jquery获取html页面参数乱码,JS或Jquery获取浏览器URL的参数值 汉字值乱码 并转码...
  9. Matlab给Ansys助攻
  10. 利用opencv对图像和检测框做任意角度的旋转