首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Gradle系列-运用篇

    新建项目时,默认有一个release配置,但我们实际开发中可能需要多个不同的配置,例如debug模式,为了方法调试,一般都不需要对其进行代码混淆、压缩等处理。...我们新增一个api维度,构建不同的minSkdVerison版本的apk 1 flavorDimensions "mode", "api" 2 productFlavors { 3...在gradle为每个构建变体或对应apk命名时,属于较高优先级风格维度的产品风格首先显示,之后是较低优先级维度的产品风格,再之后是构建类型。...] 对应apk:app-[dev, prod]-[minApi16, minApi21]-[debug, outer, release].apk 构建变体有这么多,但有时我们并不全部需要,例如你不需要mode...{ 4 outputFileName = "analysis-release-${defaultConfig.versionName}.apk" 5

    90610

    Flutter完整开发实战详解(三、 打包与填坑篇)

    项目 IOS Android GSYGithubAppFlutter flutter-ipa flutter-apk GSYGithubAppRN rn-ipa rn-apk 从上表我们可以看到: Fluuter...的 apk 会比 ipa 更小一些,这其中的一部分原因是 Flutter 使用的 Skia 在Android 上是自带的。...这里又有一个细节,rn 的 ipa 包体积小很多,这其实是因为 javascriptcore 在 ios上 是内置的原因。 对上述内容有兴趣的可以看看《移动端跨平台开发的深度解析》。...但由于笔者项目中使用了第三方的插件包如 shared_preferences 等,在执行 Archive 的过程却一直出现如下问题: 在 `Archive` 时提示找不到 #import 不设置时一般是 Drawer 的图标或者返回按钮。 flexibleSpace :位于 bottom 和 leading 之间。

    2K10

    【Android 组件化】使用 ARoute 实现组件化 ( 完整组件化项目框架 )

    // 要与compiler匹配使用,均使用最新版可以保证兼容 api 'com.alibaba:arouter-api:1.5.1' annotationProcessor '...集成模式 true ( 默认模式 , 模块化 ) 组件模式 false ( 组件化 ) androidConfig 用于统一管理各个 Module 中的版本号 , 如编译版本号 , 最小版本号 , 目标版本号...// 要与compiler匹配使用,均使用最新版可以保证兼容 api 'com.alibaba:arouter-api:1.5.1' annotationProcessor '...// 要与compiler匹配使用,均使用最新版可以保证兼容 api 'com.alibaba:arouter-api:1.5.1' annotationProcessor '...// 要与compiler匹配使用,均使用最新版可以保证兼容 api 'com.alibaba:arouter-api:1.5.1' annotationProcessor '

    2.9K20

    美团 5 大最受欢迎的开源项目,牛批!

    快捷的 webpack 构建机制:自定义构建策略、开发阶段 hotReload 支持使用 npm 外部依赖 使用 Vue.js 命令行工具 vue-cli 快速初始化项目 H5 代码转换编译成小程序目标代码的能力... - App模块名字      packageName - applicationId (App包名packageName)      buildType - buildType (release/debug...等)      channel - channel名称 (对应渠道打包中的渠道名字)      versionName - versionName (显示用的版本号)      versionCode ...- versionCode (内部版本号)      buildTime - buildTime (编译构建日期时间)      fileSHA1 - fileSHA1 (最终APK文件的SHA1哈希值...目前Leaf覆盖了美团点评公司内部金融、餐饮、外卖、酒店旅游、猫眼电影等众多业务线。在4C8G VM基础上,通过公司RPC方式调用,QPS压测结果近5w/s,TP999 1ms。

    1.2K40

    Android Gradle知识梳理

    它定义了一系列的诸如doLast, doFirst等抽象方法,具体可以看gradle api里org.gradle.api.Task的文档。...最重要的是,很容易忘记,最终导致app module之间的差异不统一,也不可控。 强大的gradle插件在1.1.0支持全局变量设定,一举解决了这个问题。...rootProject.ext.versionCode versionName rootProject.ext.versionName } } 然后每次修改project级别的...自定义导出的APK名称 默认android studio生成的apk名称为app-debug.apk或者app-release.apk,当有多个渠道的时候,需要同时编出50个渠道包的时候,就麻烦了,不知道谁是谁了...".toLowerCase()) } } } 当apk太多时,如果能把apk按debug,release,preview分一下类就更好了(事实上,对于我这样经常发版的人,一编往往就要编四五十个版本的人

    96620

    章鱼抓娃娃添加Bugly-Tinker热更新支持

    发包清单 修改gradle配置,如versionName, versionCode等(tinker-support文件切换及tinkerId修改已自动化); walle打包(Tinker支持walle多渠道包热修复...理论上这两步是可以省去的,在你确保改动代码被Tinker支持的情况下。不过,不建议如此,热修复依然存在许多问题,在预发布环境先行测试补丁效果具有必要性。...如何生成补丁 线上补丁与测试补丁生成的差异主要体现在配置上。 生成测试补丁 将代码切回至有问题的线上节点。...保证versionName、versionCode与线上版本一致(以免后续升级有问题)。 执行 buildTinkerPatchRelease 指令生成release补丁。...这样,APK_DATE 即为apk的构建时间(即我们用指令生成该apk或其最新补丁的时间); 在设置页面连击版本号7次,即可观察到相关信息 "生成时:" + BuildConfig.APK_DATE

    1.1K20

    写给Android工程师的 Github CI 快速指北

    当我们每次提一个 PR 或者 push 时,就自动去打测试包,并执行一些我们自定义的一些 check,如 代码检查 、 包大小检查 、自动化测试 等等,并将最后打出的 apk 上传到 fir 或者其他地方...并借助 webhook ,从而实现 飞书、钉钉 等方式通知相关同学; 发布新的 release版本 前,改版本号时,也可以支持自动化版本号。...所以我们也可以利用 CI ,发现有新的 tag 时,则触发工作流执行,从而去自动发布一个 release 版本,并且执行一遍打包,将相关产物上传到我们指定的位置;并根据项目的规则总结出相应的 release...release.yml 在具体的工作流脚本这里,我们的触发时机选择为每次发布新的 release 时,此时就去获取本次 release 对应的 tag_name,并在打包时,通过 Gradle 命令行传参的方式...示例代码如下: 这里使用开源的 action,ncipollo/release-action,从而更简单的实现上述需求,当然也可以选择使用 Github Api。

    1.3K20

    基于Jenkins + Docker 搭建 Android 持续集成平台

    网上对于搭建Jenkins的教程很多,但是基于Docker的很少,同时要考虑服务器上无法访问外国网站,所以自己摸索并填了很多坑,因此记录一下。...设计思路 实现目标:可以根据参数打不同flavor/不同运行环境的包;收集打包成功后的成果(Artifact);把api上传到fir后,在建构列表展示出下载链接。...', API_URL } signingConfigs { release { // Load keystore if(rootProject.file...,mapping文件 (2)上传apk到fir (3)把上传到fir的短链接展示到建构列表中。...它会通过正则表达式匹配建构的输出,匹配到字符串可以用\n获取。比如下面的\1会获取第一个匹配到的字符串 iii.此时在建构列表里它会显示为如下。

    2.1K50

    SVG,Vector,gradle

    VectorDrawable: 从5.0(API等级21)开始,android了支持矢量图,优点:文件比位图要小,可以缩小我们apk体积,并且可以任意放大矢量图形,而不会丢失细节或影响清晰度,在屏幕适配时...,但是为了保证老APK的行为和以前兼容,只要APK的targetSdkVersion不变,那么即使这个APK安装在新的Android系统上,那么行为还是保持老的系统上的行为。...系统在调用某个api或者模块的时候,会先检查调用的APK的targetSdkVersion,来决定执行什么行为。...jar :只包含了class文件与清单文件 ,不包含资源文件,如图片等所有res中的文件。...,并在发生时在桌面上生成图标,但是在release版本上我们并不希望这么做,这时候我们可以这么写: debugCompile 'com.squareup.leakcanary:leakcanary-android

    55610

    【错误记录】NDK 报错 java.lang.UnsatisfiedLinkError 的一种处理方案 ( 主应用与依赖库 Module 的 CPU 架构配置不匹配导致 )

    出现上述错误 , 就是 打包的 so 动态库没有找到 , 有很多问题都会导致该错误 , 如 build.gradle 中没有配置对应的 CPU 架构 , NDK 中调用的外部动态或静态依赖库的 CPU 架构不匹配...; 这里我遇到的问题是 主应用 与 依赖库的 CPU 架构不匹配导致 ; 创建项目时选择如下选项 , 自动生成的 build.gradle 中默认生成 arm64-v8a, armeabi-v7a,...动态库 , 只剩成了 armeabi-v7a 架构的动态库 ; 依赖库中还是生成的 armeabi-v7a 架构的动态库 ; 问题解决 ; 如果非要配置 arm64-v8a 架构 , 但是一旦配置上..., 所有的在 NDK 中使用到的依赖库 如 OpenSSL , FFMPEG , RTMP , FAAC , OpenCV 等 , 都必须一式两份 , 一份 armeabi-v7a 架构的静态/动态 依赖库..., 一份 arm64-v8a 架构的 静态 / 动态 依赖库 ; ( 很麻烦 , APK 编译后也很大 , 不推荐 )

    1.8K00

    使用AndroidStudio编译NDK的方法及错误解决方案

    __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__) //注册native api的类#define JNIREG_CLASS "com...另外还需要注意的是gradle1.9下没有buildTypes标签,需要将debug、release标签直接放在android标签内,在gradle1.10下debug、release需要放在buildTypes...解决方案: 这是NDK在Windows下一个bug,当只编译一个文件时出现,解决方法就是再添加一个空的文件即可。...ó 解决方案: 在使用gradle1.9版本时遇到,使用gradle1.10版本来解决。...ó 无论使用哪个版本都有问题,后来仔细查看了下'AppPlugin'这个错误是出现在‘app’模块上的而非‘hellojni’模块上,于是考虑新建工程项目并且只在该工程下建立一个库模块,不再创建app模块

    2.9K120

    第八章 自定义Android Gradle工程

    就是我们新闻上经常见到的什么‘冰激凌三明治’什么的。这里给出一个列表,让大家一目了然。...public ProductFlavor setVersionCode(Integer versionCode) { this.mVersionCode = versionCode;...类似,也是ProductFlavor一个属性,用于配置Android App的版本名称,比如V1.0.0等等,主要显示用,让用户或者市场知道我们的Android App版本,它和versionCode一个是外部用...模式的时候,Android SDK已经为我们提供了一个默认的debug签名证书,我们可以直接使用,但是发布的时候,release模式构建时,我们要配置使用自己生成的签名证书。...现在我们启用了混淆,但是Android Gradle还不知道按何种规则进行混淆,不知道要保留哪些类不混淆,要做到这些就需要我们的Proguard配置文件了,现在我们为我们的混淆指定配置文件。

    83910

    Jenkins 的 Pipeline 脚本在美团餐饮 SaaS 中的实践

    比如构建的流程大概如下: 克隆代码; 静态代码检查(可选); 单元测试(可选); 编译打包APK或者热补丁; APK分析,获取版本号(VersionCode),包的Hash值(apkhash)等; 加固...整个流程大体上是相同的,但是又存在一些差异。比如有的构建可以没有单元测试,有的构建不用触发自动化测试,而且构建结果通知的负责人也不同。...因此在构建时,可以把构建信息注入到APK之中。 1....//根据TYPE,上传到不同的bucket里面 def bucket = "rn-bundle-prod" if ("${TYPE}" == "dev") { bucket = "rn-bundle-dev...当项目集成了React Native时,配合Pipeline,我们可以把JsBundle的构建产物上传到MSS归档。在构建Native的时候 ,可以动态地下载。

    1.6K20

    实现Android APK瘦身99.99%

    摘要: 如何瘦身是 APK 的重要优化技术。APK 在安装和更新时都需要经过网络下载到设备,APK 越小,用户体验越好。...我们将玩转一个称为“ApkGolf”的 APK,目的是创建一个尽可能具有最少字节数的 App,并可安装在运行 Oreo 的设备上。...如果有攻击者修改了我们 APK 中的代码,签名就会不匹配。这一机制保障了用户能避免执行第三方恶意软件的风险。 在MANIFEST.MF文件中列出了 APK 中的所有文件。...在 gradle 同步时做 50 次上推(push-up)。 优化为 108 Kb(削减 87%) 天哪,我们刚刚实现了近十倍的削减,即从 786Kb 削减到 108Kb。...zipalign -v -p 4 app-release-unsigned.apk app-release-aligned.apk # 5\. 使用 v2 签名运行 apksigner。

    2.3K30
    领券