Android 在java.class中使用gradle定义的变量&使用gradle替换manifest的${xx}

Unity 2022安卓打包报错全解析:从Gradle原理到实战解决 在移动应用开发中,构建系统是连接代码与可执行应用的关键桥梁。Gradle作为现代Android项目的标准构建工具,通过声明式脚本管理依赖、编译和打包流程,其核心原理在于依赖解析、任务图执行和增量构建。掌握Gradle对于保障构建稳定性、提升开发效率至关重要,尤其在游戏开发领域,Unity引擎与Android平台的集成高度依赖Gradle构建管线。当项目升级到Unity 2022版本时,其构建系统全面转向标准化Gradle,这带来了更灵活的定制能力,但也引入了版本兼容性、依赖冲突等新挑战。本文聚焦Unity 阅读详情

参考了:http://blog.youkuaiyun.com/nwsuafer/article/details/42006157

场景:

开发时需要用到测试环境URL,而打包时需要改回正式环境URL,来回的注释总有会弄错的时候,但是如果在gradle构建时定义则不需要每次都去检查自己定义的URL是否是测试或正式,而且代码也整洁好多

 

1.在gradle文件中定义变量:

buildTypes {
    debug {
        minifyEnabled false  //混淆关闭
        signingConfig signingConfigs.release
        buildConfigField "String", "HTTP_API", "\"http://test.xxxx.com/\""
        manifestPlaceholders = [
                app_name: "@string/app_name_debug",
        ]
    }
    release {
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'prguard-rules.pro'//指定混淆规则文件
        signingConfig signingConfigs.release  //设置签名信息
        buildConfigField "String", "HTTP_API", "\"http://xxxx.com/\""
    }
}

定义后要SYNC重新刷新gradle文件,要不然会调用不到

P:上面的buildConfigField就是定义变量的关键字,buildConfigField "String", "HTTP_API", "\"http://xxxx.com/\""的意思是定义一个String类型的变量名为HTTP_API的且值为"http://xxxx.com\"的变量。manifestPlaceholder=[app_name: "@string/app_name_debug"]意思是把manifest文件中${app_name}占位符替换为@string/app_name_debug的值

2.在java.class文件中的调用

public final class HttpApi {

   public final static String HTTP_API = BuildConfig.HTTP_API;

// public final static String HTTP_API = "http://test.xxxx.com/";//测试环境地址

// public final static String HTTP_API = "http://xxxx.com";//正式环境地址

}

直接使用BuildConfig.HTTP_API就可以调用到gradle中定义的buildConfigField变量了

---------------------------------------------------------------------------------------------------------------------------------------------------------------

gradle中使用manifestPlaceholders替换app_name、app_id,app_icon

1.先在manifest.xml中定义占位符

<application
    android:allowBackup="true"
    android:exported="true"
    android:icon="${icon}"
    android:label="${app_name}"
    android:theme="@style/Theme.sty"
    tools:replace="icon, label,theme">
</application>

2.在各个渠道配置中使用这个manifestPlaceholders进行区别不同渠道APP,如:

productFlavors {
    360{
        applicationId "com.xxx.xxx"
        manifestPlaceholders = [app_name:"xxxx" ,icon: "@drawable/icon"]
        //在java代码中具体的使用方式为:context.getResources().getString(R.string.strKey);
        resValue("string" , "strKey","xx")
    }
}

也可以在buildTypes的debug或release中定义,但是会覆盖productFlavors中360中定义的变量

Android Gradle插件开发实战:从原理到自动化构建实践 Gradle作为现代Java和Android项目的核心构建工具,其插件机制是实现构建流程自动化的关键技术。通过理解Gradle构建生命周期的初始化、配置和执行三阶段,开发者可以掌握插件如何介入构建过程。自定义Gradle插件能够将重复性任务固化为可复用的工具,显著提升团队工程效率。在Android开发场景中,插件通过与Android Gradle Plugin(AGP)协同工作,实现对资源处理、代码生成等构建环节的定制化扩展。本文聚焦于Android Gradle插件开发,详细拆解了Project、Task 阅读详情

相关推荐

Unity Android构建失败终极指南:Gradle与AGP版本兼容性深度解析

在Android应用开发中,构建系统是连接源代码与可执行应用的关键桥梁。Gradle作为主流的自动化构建工具,通过其灵活的插件机制管理项目依赖、编译和打包流程。Android Gradle Plugin(AGP)则是专为Android平台定制的Gradle插件,负责处理资源编译、APK生成等Android特有任务。其技术价值在于实现了跨平台、可复用的构建逻辑,大幅提升了开发效率。然而,Gradle与AGP版本之间存在严格的对应关系,版本不匹配会导致构建链断裂,这在Unity引擎的Android构建场景中尤为

weixin_34232744的博客 460

Unity Android打包:Manifest合并机制与AAR集成避坑指南

AndroidManifest.xml是Android应用的配置核心,定义了应用组件、权限等关键信息。其工作原理在于构建时通过Gradle的Manifest Merger工具,将主应用与所有依赖库的清单文件合并为单一文件。这一机制确保了模块化开发中配置的统一性,其技术价值在于支撑复杂的应用架构与第三方SDK集成。在Unity开发中,当需要集成包含Manifest的第三方AAR库(如广告、支付SDK)时,开发者常会遇到**Manifest合并冲突**与**编译失败**问题。理解合并优先级规则,并掌握使用`to

weixin_30797199的博客 689

Unity安卓打包JAVA_TOOL_OPTIONS编码冲突:5分钟排查与根治方案

在Java应用开发与构建过程中,环境变量配置是影响工具链稳定性的关键因素。JAVA_TOOL_OPTIONS作为JVM全局参数设置变量,其不当配置会引发编码冲突等隐蔽问题。其技术价值在于统一管理JVM运行时参数,但错误的值(如强制GBK编码)会破坏构建工具与现代化开发环境(默认UTF-8)的兼容性。在Android应用开发场景下,使用Unity引擎进行APK打包时,Gradle构建工具作为基于Java的进程,会继承此变量,导致构建脚本解析乱码、资源处理异常与进程通信失败,从而致使构建失败。本文聚焦于Unit

weixin_33766168的博客 310

gradle 替换java类_Gradle字符串替换

在Gralde中我们可以很方便的替换Manifest中的字符串:manifestPlaceholders = [UMENG_CHANNEL_VALUE: "myapp"]但是,这种方式不适用于其他文件。举个栗子,首先要有个测试文件,Test.java:public class Test {public static final String Str = "${TEST_KEY}";}然后build...

weixin_33441139的博客 818

Android Instant Run类加载问题解析与解决方案

类加载机制是Java和Android开发中的核心概念,它决定了应用程序如何动态加载和执行代码。在Android开发中,Instant Run技术通过动态替换类文件实现快速迭代,但其底层依赖BootstrapApplication代理加载机制。当出现类加载顺序冲突或构建缓存不一致时,典型表现为'Unable to instantiate application com.android.tools.fd.runtime.BootstrapApplication'错误。这类问题常见于MultiDex启用、自定义A

weixin_33894640的博客 517

Unity升级后Android构建错误:迁移res资源到AAR的完整指南

在Android开发中,资源管理是构建流程的核心环节,它直接关系到应用的稳定性和性能。传统的资源直接引用方式虽然简单,但容易引发命名冲突和依赖管理混乱。随着构建工具链的演进,Gradle和AAR(Android Archive)机制成为标准解决方案,它们通过命名空间隔离和依赖解析,从根本上解决了资源冲突问题。这一技术升级在工程实践中的价值在于提升了项目的可维护性和构建可靠性,尤其适用于大型项目或需要集成多个第三方SDK的场景。当Unity引擎升级到较新版本时,其Android构建管线也遵循了这一现代化规范,

weixin_34228387的博客 453

android 多个全局类,Android中的全局变量与局部变量使用小结

全局变量顾名思义就是在整个的类中或者可在多个函数中调用的变量。也称为外部变量。局部变量则是特定过程或函数中可以访问的变量。声明一个变量是很 容易的,但是讲到使用的时候,却不是想象的那样简单。至于本人则是经常定义全局变量使用,但也就是因为这样,定义的是全局变量。也饶了不少的弯子。在使用Adapter即适配器的时候,通常适配器总是与listView使用,因为一个listView 基本上都会有一个lis...

weixin_42398386的博客 399

自然二进制数与格雷码的相互转换

自然二进制数与格雷码两者优势: 自然二进制数的编码方式简单明了,容易理解,在加减运算中能够直接进行,同时十分方便进行一些位运算操作(如移位、取反等)。 格雷码计数时只有一位变化,可有效减少计数器状态的冗余转换,同时在传输数据时能够减小传输错误的概率,此外带权重编码处理更加方便。 在一定程度上自然二进制数与格雷码优缺点基本相反,综上所述,自然二进制数和格雷码各有优劣之处,需要根据具体应用场景选择合适的编码方式。简单来说,在计数器和编码器中,倾向于使用格雷码;而在进行加减运算时,则倾向于使用自然二进制数。

Loudrs的博客 7494

android manifest和gradle配置的部分详解

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="xin.futureark"> <!-- manifest层: package:应用的包名, 当使用setComponent打开另一个app的界面或组件时,需要填写的;

Arman的博客 3871

遥感目标检测数据集汇总

文章目录1. 光学数据集1.1 DIOR1.2 LEVIR1.3 DOTA1.4 RSOD1.5 NWPU VHR-101.6 VEDAI1.7 COWC1.8 ITCVD1.9 DIUx xView 20181.10 HRSC20161.11 TAS1.12 SZTAKI‐INRIA1.13 UCAS AOD1.14 DLR 3K Vehicle2. SAR2.1 SSDD2.2 SSDD+2....

quanwei的博客 6万+

Simulink中Simscape—Fluids模块(原Simhydraulics)学习记录

学习来源:http://cn.mathworks.com/help/physmod/hydro/getting-started-with-simhydraulics.html 主要学习内容如下图: 详细内容: 1、组件来源 SIMULINK浏览器中的模块:Simscape_Foundation 和 Simscape_Fluids。 2、Simscape下包括多个子

1万+

【Android】【配置文件】gradle和manifest的使用(三):gradle引用properties变量

在gradle.properties里面定义变量 APP_NAME=&amp;quot;HelloWorld&amp;quot; DB_VERSION=101 在build.gradle里面引用变量 buildTypes { release { buildConfigField &amp;quot;String&amp;quot;, &amp;quot;APP_NAME&amp;quot;, &amp;quot;${APP_NAME}&amp;quot;

天天向上 Up Up Up (*^▽^*) 2606

【GD32F407】i2c主机发送,从机中断接收

前言 现在手里负责的一个项目需要用i2c和主芯片进行通信主动发送,中断接收,这就需要支持i2c主机模式和从机模式,先查看原理图 这里我们用到了两条i2c总线进行数据的交替传输,避免在使用一条总线是发送数据和接收数据冲突 初始化i2c控制器 s32_k i2cDevInit(u8 byBusId, TI2cBus *pTI2cBus) { //PCLK = 36000000 BOOL retFlg = FALSE; int I2xSCL = pTI2cBus-&gt;byFastMode ?

Enosji的博客 6246

Android 中需要了解的 Gradle 语法

Android 开发过程中需要用到的 gradle 知识

Alpinist Wang 1788

Android存储空间不足下,APP出现奔溃等情况

版权声明:本文为博主原创文章,未经博主允许不得转载。 1. 问题起因     实时录制视频,使用getExternalCacheDir()函数返回的路径作为文件缓存区 2. 问题产生     系统在空间不足的情况下第一清除getExternalCacheDir和getCache文件下的缓存,导致正在录制的视频出现Error。 3. 解决方案     第一

OverseasAndroid的博客 4160

OpenClaw 源代码深度分析报告 &如何把企业自有的MCP server 工具集成到OpenClaw里? 怎样通过OpenAI 风格SDK 解析出来OpenClaw的全部的流式输出内容?

项目属性详情名称OpenClaw版本2026.3.2许可证MIT语言最低运行时包管理器pnpm主要仓库},// 注册工具// 工具实现},});// 注册命令" }),});},方面评价模块化设计⭐⭐⭐⭐⭐ 插件架构清晰,扩展性强协议设计⭐⭐⭐⭐⭐ WebSocket 协议完善,支持多种客户端多渠道支持⭐⭐⭐⭐⭐ 20+ 消息通道,覆盖主流平台安全机制⭐⭐⭐⭐ 配对认证、设备签名、权限控制完善本地优先⭐⭐⭐⭐⭐ 数据本地存储,用户完全控制项目属性详情名称OpenClaw版本。

AI天才研究院 940

Unity 2022.3集成IronSource SDK:安卓打包依赖冲突与Gradle配置实战

在移动应用开发中,依赖管理是构建稳定项目的基石,其核心原理在于协调不同库之间的版本兼容性。Gradle作为Android的主流构建工具,通过依赖解析机制管理项目所需的外部库,但当多个SDK引入相同库的不同版本时,就会触发依赖冲突,导致构建失败。这种冲突在集成广告变现等第三方SDK时尤为常见,直接影响项目的构建效率和最终产出。以Unity引擎开发为例,在接入IronSource广告SDK进行安卓打包时,开发者常会遇到“Duplicate class”或“Gradle build failed”等典型错误。这些

weixin_30561177的博客 366

【图像分类】卷积神经网络之VGGNet网络模型实现花卉图像识别(附代码和数据集,PyTorch框架)

卷积神经网络之VGGNet网络模型实现花卉图像识别(附代码和数据集,PyTorch框架)

学无止境、积少成多、厚积薄发 2431

【Android面试】Gradle专题

Grradle面试专题

studyForMokey的博客 686

Cesium 实战 28 - 三维视频融合(视频投影)

Cesium 实战 27 - 三维视频融合(视频投影)。

非科班Java出身GISer的博客 3369

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Unity打包Android:内部构建与导出Gradle工程的深度对比与实战指南

在移动应用开发中,构建系统是连接代码与最终可执行产物的核心桥梁。其原理在于将源代码、资源与依赖库,通过编译、链接、打包等步骤,转化为特定平台(如Android的APK/AAB)可安装的文件。Gradle作为Android生态的主流构建工具,提供了高度的灵活性和自动化能力,其技术价值在于支持依赖管理、多渠道构建、代码混淆优化等复杂工程需求,广泛应用于需要深度定制CI/CD流程或集成原生SDK的场景。对于使用Unity引擎的开发者而言,面对Android平台打包时,常需在便捷的“内部构建”与高度可控的“导出Gr

优快云头条 830

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Android Gradle插件开发实战:从入门到APK重命名插件实现

Gradle作为现代Java和Android项目的核心构建工具,其基于Groovy/Kotlin的DSL和任务驱动模型构成了自动化构建的基石。通过将重复的构建逻辑封装成可复用的插件,开发者能够实现构建流程的标准化与工程化,显著提升团队协作效率。自定义Gradle插件技术允许在AGP(Android Gradle Plugin)构建生命周期中插入定制化任务,例如自动代码检查、资源优化或版本管理,从而应对多模块配置统一、构建过程自动化等工程实践需求。本文以Android开发中常见的APK文件重命名场景为例,详解

weixin_30675247的博客 379

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Android Studio导入项目全解析:从Gradle同步到环境配置避坑指南

在Android开发中,Gradle作为核心构建工具,负责管理项目的依赖、编译和打包流程。其工作原理是通过解析构建脚本,协调本地开发环境与项目要求,实现自动化构建。掌握Gradle同步机制对于提升开发效率至关重要,它能确保团队协作时环境一致,避免依赖冲突。在实际工程实践中,开发者常需导入他人项目或开源代码,这时环境适配成为关键挑战,涉及JDK版本、Gradle插件及SDK配置的匹配。本文聚焦Android Studio导入项目的完整流程,深入解析Gradle同步背后的原理,并提供针对网络超时、依赖冲突等常见

weixin_34007886的博客 401

Unity项目AndroidX迁移全攻略:解决Gradle构建冲突与配置实战

在Android应用开发中,依赖管理是构建稳定项目的基石。随着Android生态演进,Google推出了AndroidX库以取代传统的Android Support库,其核心原理在于提供了更清晰的包结构和更好的向后兼容性。这一升级的技术价值在于确保应用能兼容最新的系统API并满足第三方服务(如Firebase、AdMob)的集成要求。在实际工程实践中,尤其是在Unity引擎与多插件集成的复杂场景下,新旧库并存极易引发Gradle构建时的“Duplicate class”冲突。本文聚焦于通过系统性的环境配置与

weixin_30565199的博客 348

Trae:Android开发工作流的语义化重构引擎

在移动开发领域,'Android构建系统'与'IDE智能辅助'长期存在割裂——Gradle配置晦涩、Manifest合规难控、ProGuard崩溃难溯。Trae并非传统AI插件,而是基于Android工程语义建模的底层工具链,通过Builder模式实现DSL级配置推导与跨文件结构验证,结合本地化轻量LLM驱动的Chat模式完成上下文感知的即时故障翻译。其技术价值在于将隐性平台规则(如android:exported强制声明、AGP-Gradle版本契约)转化为可执行、可验证、可回滚的构建策略,广泛应用于SD

weixin_33951761的博客 401

安卓开发入门实战:从环境搭建到首个完整应用开发指南

移动应用开发是现代软件开发的核心领域之一,其核心在于构建能在移动设备上运行的用户界面与业务逻辑。其原理涉及操作系统交互、UI渲染、数据持久化与网络通信等多个层面。掌握移动开发技术对于构建触达亿万用户的应用程序具有重要价值,广泛应用于社交、电商、工具及企业服务等场景。在安卓生态中,Kotlin凭借其空安全特性和简洁语法,已成为官方推荐的首选开发语言,能有效提升开发效率并减少运行时崩溃。同时,Gradle作为项目构建工具,负责管理依赖、编译打包,是项目配置的核心。本文将以一个待办清单应用为例,系统讲解从环境搭建

weixin_30299709的博客 364
上一篇: android 圆形进度View
下一篇: 配置Gradle环境
珊珊333333
博客等级 码龄17年 83粉丝 1375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值