文章目录 一、AndroidManifest.xml 清单文件切换设置 1、可运行模块 AndroidManifest.xml 清单文件 2、依赖库模块 AndroidManifest.xml 清单文件...二、在 Gradle 构建脚本中实现 AndroidManifest.xml 清单文件切换设置 在上一篇博客 【Android Gradle 插件】组件化中的 Gradle 构建脚本实现 ① ( 组件化简介...构建脚本 切换设置 , 切换 应用 / 依赖库 ; AndroidManifest.xml 清单文件 切换设置 , 设置 启动 Activity 项 ; 在 【Android Gradle 插件】组件化中的...一、AndroidManifest.xml 清单文件切换设置 ---- 在应用中 , 每个应用 只能有一个 启动 Activity , 如果有多个肯定会报错 ; 在组件化中 : 模块化模式 : 正常的模式...构建脚本中实现 AndroidManifest.xml 清单文件切换设置 ---- 在 模块下 的 build.gradle 构建脚本 中的 " android#sourceSets#main " 层级下
文章目录 一、ProductFlavor#manifestPlaceholders 清单文件占位符配置 Android Plugin DSL Reference 参考文档 : 文档主页 : https...ProductFlavor#manifestPlaceholders 配置 , 用于配置 manifest 的占位符 , 该配置项是 Map 类型的 ; 在 build.gradle...的 ProductFlavor defaultConfig 配置项中 , 设置清单文件占位符属性 , 为其设置一个 Map 类型的属性 ; 代码示例 : android...: 在下面的 meta-data 标签中 , 使用了 {name} 引用了 build.gradle 中定义的 manifestPlaceholders = [name: 'Tom'] , 在合并清单文件时...> 将 AndroidManifest.xml 清单文件 切换到 Merged Manifest 模式 , 可以看到合并后的 清单文件 ,
: 设置样式的方法有两种: 如果是对单个视图应用样式,请为布局 XML 中的 View 元素添加 style 属性。...然后在清单文件修改: 运行效果: 样式:一般作用在控件上(button,textview)等,作用范围比较小 主题:一般作用于activity或Application结点下,作用范围比较大 共同点是定义的方式是一样的...如图: 标记不应翻译的信息部分 有时候字符串中包含不应被翻译为其他语言的文本。常见的示例包括代码、某个值的占位符、特殊符号或名称。...在准备翻译字符串时,请查找并标记应该保留原样而不用翻译的文本,这样翻译人员就不会更改这些内容。 要标记不应翻译的文本,请使用 占位符标记。...days>%1$suntil holiday 在声明占位符标记时,请务必添加说明此占位符用途的 ID 属性。
占位符,其实是一个可以被替换的临时标记,比如${name},我们就可以使用真实的name变量的值替换这个占位符,达到可以动态的修改这个占位符的目的。...留意我们的使用方式,他们的Key都是一样的,是UMENG_CHANNEL,这个key就是我们在AndroidManifest文件中的占位符变量,在构建的时候,它会把AndroidManifest文件文件中所有占位符变量为...其中${UMENG_CHANNEL}就是一个占位符,它的变量名是UMENG_CHANNEL。构建的时候${UMENG_CHANNEL}将会被替换为google或者baidu。 现在我们运行....假如我们的友盟的渠道名和我们在Android Gradle中配置的ProductFlavor一样的话就简单了,我们可以通过迭代productFlavors批量的方式进行修改。...Android Gradle为我们提供的manifestPlaceholders占位符的方式,让我们可以替换AndroidManifest文件中任何${Var}格式的占位符,所以它的使用场景不限于渠道名这一个
() onDetach() 就像Activity一样,在以下的状态中,可以使用Bundle对象保存一个fragment的对象。...的layout.xml布局文件中静态添加 在Activity的.java文件中动态添加 方法1:在Activity的layout.xml布局文件中静态添加 Activity的布局文件 fragment_layout_test.xml...方法2:在Activity的.java文件中动态添加 步骤1:在Activity的布局文件定义1占位符(FrameLayout) 这样做的好处是:可动态在Activity中添加不同的 Fragment...设置Fragment的布局文件 example_fragment.xml android="http://schemas.android.com/apk/res/...添加到Activity布局文件中定义的占位符中(FrameLayout) fragmentTransaction.add(R.id.about_fragment_container, fragment
/ 步骤7:动态添加fragment // 即将创建的fragment添加到Activity布局文件中定义的占位符中(FrameLayout) fragmentTransaction.add...接口回调 回顾 把实现了某一接口的类所创建的对象的引用 赋给 该接口声明的变量,通过该接口变量 调用 该实现类对象的实现的接口方法。...该实现类对象(Com1)的实现的接口方法(carson()) com.carson(); 具体Demo 步骤1:在Activity的布局文件定义1占位符(FrameLayout) activity_main.xml...android:layout_height="500dp"/> 步骤2:设置Fragment的布局文件 fragment.xml 中定义的占位符中(FrameLayout) fragmentTransaction.add(R.id.fragment_container, fragment
resValue我们可以修改变量的值,这个值会生成在string.xml中,比如上面我们定义了一个tip变量,需要注意的是,这个变量不能出现在string.xml中,否则会提示资源重复。...如果要定义在配置文件中使用的值,则需要使用 manifestPlaceholders 我们分别修改app_name的值,在配置文件中使用占位符${} 使用,如下: android:label="${app_name...如何使用不同的app图标 那么如何修改不同渠道的app图标呢,当然我们可以在manifestPlaceholders中添加图标资源的占位符,但是我们这里使用另一种方法, 有时候我们不仅要替换图标,可能要替换...gradle中添加: publishNonDefault true 变量的使用和上面app的使用方式一样,在这里就不展示了。...,搜狗渠道的页面背景设置蓝色,在app添加按钮并添加监听事件,打开module中的主页面。
9.3.2 分模块的方式 既然最原始的方式,修改不方便,那么我们可以不可以把版本号的配置单独的抽取出来的,放在单独的文件里,供build引用,就像我们在Android里,单独新建一个存放常量的Java类一样...ext{}块表明我们要为当前project创建扩展属性,以供其他脚本引用,他就像我们java里的变量一样。创建好之后,我们在build.gradle中引用它。...留意我们的使用方式,他们的Key都是一样的,是UMENG_CHANNEL,这个key就是我们在AndroidManifest文件中的占位符变量,在构建的时候,它会把AndroidManifest文件文件中所有占位符变量为...我们看AndroidManifest文件中具体的使用: 看到以上示例中的meta-data标签了吗?其中{UMENG_CHANNEL}就是一个占位符,它的变量名是UMENG_CHANNEL。...Android Gradle为我们提供的manifestPlaceholders占位符的方式,让我们可以替换AndroidManifest文件中任何${Var}格式的占位符,所以它的使用场景不限于渠道名这一个
Dimensions 1.1 版本中,当控件的尺寸设置为了 MATCH_CONSTRAINT 时( 0dp),在设置尺寸上又多了二个新的修饰属性: layout_constrainWidth_percent...Margins and chains 在 1.1.0-beta4 版本中(已知),为链中的控件设置 marginRight/End 是无效的(个人感觉这应该是个 Bug)。...而在 1.1 稳定版中,无论设置右边距还是左边距都是有效果的,会累计计算。并且在计算剩余空间时,会将边距一起考虑。...Placeholder Placeholder(占位符)是一个虚拟对象,作用和它的名字一样,就是占位。...除此之外,还可以通过 setEmptyVisibility() 方法设置当视图不存在时占位符的可见性。 下面的例子演示了占位符的使用,当点击顶部头像时,顶部头像会消失并在占位符处显示: <?
中加载 Activity 信息 , 如果修改了该信息 , 将要跳转的 Activity 信息修改为插件包中的 Activity , 原来的 Activity 只用于占位 , 用于欺骗 Android...是通过正规流程 , 由 AMS 进行创建并加载的 , 但是 该 Activity 并没有在 AndroidManifest.xml 清单文件中注册 , 这里需要一个已经在清单文件注册的 Activity...信息 * 如果修改了该信息 , 将要跳转的 Activity 信息修改为插件包中的 Activity * 原来的 Activity 只用于占位 , 用于欺骗 Android...AMS 进行创建并加载的 * 但是该 Activity 并没有在 AndroidManifest.xml 清单文件中注册 * 这里需要一个已经在清单文件注册的 Activity...* 使用插件包中的 Activity 替换占位的 Activity */ public class PluginManager { /** * 上下文 */
PropertyPlaceholderConfigurer3个功能: 将配置中${property-name}格式的占位符换为加载的*.properties文件中的内容。...将配置中${property-name}格式的占位符替换为环境变量systemProperties(System.getProperty(key))中的内容。...除了会用*.properties文件中的参数去替换占位符的内容,还会使用环境变量(System.getProperty(key))中的参数去替换。...如果一个参数在配置文件中和系统环境变量中都存在,那么默认会使用*.properties中的参数来替换配置中的占位符。...他可以让你不必在XML文件写占位符而直接注入数据。
再比如可以通过 mergedFlavor 来拿到 manifest 文件中的一些数据,向占位符输入数据啊等等。...那么在 build.gradle 中就可以结合这个方法,然后在服务器上配置一个特定的环境变量,当检查到当前打包环境在服务器上时,就可以去触发这些本地开发过程中较耗时的构建工作了,尤其打包服务器还可以将这些...6.3 动态配置 AndroidManifest.xml 文件 先在 AndroidManifext.xml 中设置占位符: android:value="${CHANNEL}"...android:name="CHANNEL" /> 然后在 build.gradle 中的 productFlavors 中通过 manifestPlaceholders 来改变 manifest 里的占位符...Android Studio 图形界面操作方式:在 AS 右侧的 Gradle 面板里找到脚本中的 task,点击即可运行,这种方式最好给 task 设置 group 属性,这样可以非常方便寻找。
} 列出类和类的成员-keep选项的清单,标准输出到给定的文件 -printseeds {filename} 压缩 不压缩输入的类文件 -dontshrink -printusage {filename...{class_specification} 优化时允许访问并修改有修饰符的类和类的成员 -allowaccessmodification 混淆 不混淆输入的类文件 -dontobfuscate 使用给定文件中的关键字作为要混淆方法的名称...设置源文件中给定的字符串常量 -renamesourcefileattribute {string} ?|*后面的文件名,类名,或者包名等可以使用占位符代替 ?...在android中在android Manifest文件中的activity,service,provider, receviter,等都不能进行混淆。...一些在xml中配置的view也不能进行混淆,android提供的默认配置中都有。
说起Android中的Fragment,在使用的时候稍加注意,就会发现存在以下两种: v4包中的兼容Fragment,android.support.v4.app.Fragment 普通的Fragment...,android.app.Fragment 这两种Fragment在使用过程中千万不要来回串,否则会出现莫名其妙的错误 一、不同版本的使用规则 1、3.0以上:xml中可以直接引用的标签,使用其他layout作为容器,然后在程序动态生成。 注意: 这两个方法都是为了得到FragmentManager,名字一样但是包名不一样。...所以必须要在某处定义它,有两种方式: 直接在xml布局文件中定义; 在xml布局文件中定义一个占位符,然后动态地在Activity中操作Fragment。..." android:layout_width="match_parent" android:layout_height="20dp"/> 2、如果在XML中用占位符的话
博客资源 上一篇博客 【Android 组件化】使用 Gradle 实现组件化 ( Gradle 变量定义与使用 ) 中 , 在顶层的 build.gradle 中定义了相关参数变量 ; 在顶层的 build.gradle...中定义全局的变量 , 用于统一管理各个 Module 的编译相关版本号 ; 全局变量可以定义在 ext 扩展 中 , 也可以定义在 gradle.properties 属性 中 ; 组件化的本质就是可以实时切换依赖库...因此在 组件模式 下 , 需要指定一个新的 AndroidManifest.xml 清单文件 ; 这里在 main 目录下创建 component 目录 , 组件化 相关文件 , 都放在该目录中 ;...下图中 , 蓝色矩形框中是默认的清单文件 , 在 集成模式 下的 Library Module 中使用 ; 红色矩形框中是 组件模式 下使用的清单文件 , 在 Application Module 中使用...} } 四、组件模式 与 集成模式 切换示例 ---- 将 component.gradle 中的 isModuleMode 变量设置为 true , 当前的模式就是默认的模块化模式 ; 编译后效果如下
就是最终存放 Dex 字节码数据的内存变量 , 最终将 " 插件包 " 中读取的 dexElements 合并到 " 宿主 " 应用的 dexElements 中 ; ---- 一、通过反射获取 “插件包...信息 * 如果修改了该信息 , 将要跳转的 Activity 信息修改为插件包中的 Activity * 原来的 Activity 只用于占位 , 用于欺骗 Android...AMS 进行创建并加载的 * 但是该 Activity 并没有在 AndroidManifest.xml 清单文件中注册 * 这里需要一个已经在清单文件注册的 Activity...* 使用插件包中的 Activity 替换占位的 Activity */ public class PluginManager { /** * 上下文 */...中的 private Element[] dexElements 成员变量的 Field 字段对象 // ⑥ 反射获取 DexPathList 对象中的 private Element
Android版内置有Admob接口,可以不必配置XML直接硬编码Admob广告信息。...该引擎除了基本的音效、图形、物理、精灵等常用组件以外,也内置有Ioc、xml、http等常用Java组件的封装,代价是jar体积较为庞大,PC版 已突破1.2MB,Android版有所简化也在500KB...此外,该引擎还内置有按照1:1实现的J2ME精灵类及相关组件,可以将绝大多数 J2ME游戏平移到Android或PC版中。...在PC环境中,jPCT甚至可以运行在JVM1.1环境之中,因为jPCT内部提供的图形渲染接口完全符合所有的Java 1.1规范(就连已经消失的Microsoft VM乃至更古老的Netscape4 VM...该引擎在易用性和运行性能上皆有出色的表现,支持常见的游戏开发功能,诸如精灵动画,音频处理和视频播放等。 最低运行环境要求为Android 1.6。
三、Quick Settings Tile API “快速设置”通常用于直接从通知栏显示关键设置和操作,非常简单。在 Android N中,已扩展“快速设置”的范围,使其更加有用更方便。...有鉴于此,应避免依赖在清单文件中声明的接收器来侦听隐式广播或删除此依赖关系,以及避免或删除对后台服务的依赖关系。 Android 框架提供多种解决方案来降低这些隐式广播或后台服务的必要性。...就像 OpenGL™ ES 一样,Vulkan是 3D 图形和渲染的一项开放标准,由Khronos Group 维护。...变量选择符能够呈现一些彩色或黑白的表情符号。在移动设备上,应用应呈现彩色的表情符号,而不是黑白的。但是,如果应用显示嵌入在文本中的表情符号,那应使用黑白变量。...若要确定表情符号是否有变量,使用变量选择符。如需有关支持变量的字符的完整清单,请参阅变量的 Unicode 文档中的表情符号变量序列部分。 ● 检查表情符号是否支持肤色。
,自动在R.java文件中为res目录下的资源创建索引,程序可直接通过R资源清单类进行访问。...可通过R资源清单文件访问的资源,保存在res目录下。 Android要求在res目录下用不同的子目录来保存不同的应用资源。表8-1-1列举了Android不同资源在res目录下的存储方式。...与res/raw目录一样,在该目录中的资源也会被封装在apk文件中、不会被编译,但不同的是该目录中的资源文件都不会生成资源ID。...还可以使用占位符获得动态的字符串资源,示例代码如下: 大家好,今天是:%1 上面格式化字符串有两个占位符:%1s和%2d,其中%1和%2表示参数的位置索引(...,然后在每一个需要设置这些属性的组件中引用这些样式。
领取专属 10元无门槛券
手把手带您无忧上云