当前位置: 首页 > news >正文

网站功能模块表格网页设计与制作首页

网站功能模块表格,网页设计与制作首页,线上平台建设计划书怎么写,树形菜单网站Android 有不同的应用市场#xff0c;也就是不同的渠道#xff0c;需要为每个应用市场打一个安装包#xff0c;但主要的代码是一样的#xff0c;可能部分资源不一样#xff0c;部分代码不一样#xff0c;如果每个渠道都需要修改#xff0c;然后打包#xff0c;非常耗时…Android 有不同的应用市场也就是不同的渠道需要为每个应用市场打一个安装包但主要的代码是一样的可能部分资源不一样部分代码不一样如果每个渠道都需要修改然后打包非常耗时。所以 AS 是提供了多渠道打包的。 可能遇到的需求 不同渠道 applicationId 不一样不同渠道配置参数不一样不同渠道签名文件不一样不同渠道资源文件不一样不同渠道部分代码不一样不同渠道依赖不一样 这里会先说一下初级版配置再说升级版配置—— Grovvy 进行自动化构建。 初级版多渠道配置 productFlavors 不同产品口味就是AS自带的不同渠道打包关键字。可以进行多渠道配置有两种方式。 1、在 app 模块下的 build.gradle 配置 // 读取不同的签名文件 def getSignProperties(filename){File signConfigFile file(${rootProject.rootDir}/app/keystore/${filename}.properties)Properties signProperties new Properties()signProperties.load(new FileInputStream(signConfigFile))return signProperties }android {compileSdk 32defaultConfig {applicationId com.XXXminSdk 21targetSdk 32versionCode 5versionName 3.0testInstrumentationRunner androidx.test.runner.AndroidJUnitRunner}// 不同渠道的签名 signingConfigs {release {def signProperties getSignProperties(signing)storeFile file(signProperties[KEYSTORE_FILE])storePassword signProperties[KEY_PASSWORD]keyAlias signProperties[KEY_ALIAS]keyPassword signProperties[KEY_PASSWORD]}//不同的渠道定义不同的签名文件huawei {def signProperties getSignProperties(signing-huawei)storeFile file(signProperties[KEYSTORE_FILE])storePassword signProperties[KEY_PASSWORD]keyAlias signProperties[KEY_ALIAS]keyPassword signProperties[KEY_PASSWORD]}xiaomi {def signProperties getSignProperties(signing-xiaomi)storeFile file(signProperties[KEYSTORE_FILE])storePassword signProperties[KEY_PASSWORD]keyAlias signProperties[KEY_ALIAS]keyPassword signProperties[KEY_PASSWORD]}}// 配置不同渠道参数productFlavors{huawei{applicationId com.xxx//渠道参数buildConfigField String, token, \XXXX\// manifest 读取的参数,在 manifest 里如何使用见后文manifestPlaceholders[app_name:CCCCC]}// 其他渠道类似} // 配置打包签名buildTypes {debug {minifyEnabled falsedebuggable trueshrinkResources falseproguardFiles getDefaultProguardFile(proguard-android-optimize.txt),proguard-rules.prosigningConfig signingConfigs.release}release {minifyEnabled truedebuggable falseshrinkResources falseproguardFiles getDefaultProguardFile(proguard-android-optimize.txt),proguard-rules.pro//signingConfig signingConfigs.releaseproductFlavors.xiaoxing236.signingConfig signingConfigs.huaweiproductFlavors.xiaoxing238.signingConfig signingConfigs.xiaomi}}// 指定打包输出的路径applicationVariants.all { variant -// 打包完成后输出路径def name variant.flavorName _ variant.buildType.name _ variant.versionName _ new Date().format(yyyyMMddhhmm) .apk//相对路径app/build/outputs/apk/huawei/release/def path ../../../../../apk/ //相当于路径 app/apk/variant.outputs.each { output -def outputFile output.outputFileif (outputFile ! null outputFile.name.endsWith(.apk) outputFile.name.contains(release)) {//指定路径输出output.outputFileName new File(path, name)}}}//不同渠道不同资源文件// sourceSets{ } 源文件目录设置sourceSets {// 公共代码及资源main {jniLibs.srcDirs [libs]}// 不同资源huawei.res.srcDirs src/huawei/resxiaomi.res.srcDirs src/xiaomi/res// 其他渠道类似以下不再重复//不同代码huawei.java.srcDirs src/huawei/javaxiaomi.java.srcDirs src/xiaomi/java// 不同渠道 manifest 文件huawei.manifest.srcFile src/huawei/AndroidManifest.xmlxiaomi.manifest.srcFile src/xiaomi/AndroidManifest.xml}}// 不同渠道的依赖 dependencies {// 公共的依赖implementation ccccc// 不同渠道依赖xiaomiApi(xxxxxxx)huaweiImplementation(xxxxxxxx) }不同渠道配置的参数需要在 manifest 里使用 applicationandroid:name${applicationId}.GlobalApplicationandroid:allowBackuptrueandroid:iconmipmap/ic_launcherandroid:label${app_name}android:roundIconmipmap/ic_launcherandroid:supportsRtltrue /application在代码里使用 buildconfig 参数 private final String TOKEN BuildConfig.token;2、可以把以上不同渠道的配置单独放在一个 flavor.gradle 文件里该文件与 setting.gradle 目录同级。 然后在 app 模块的 build.gradle 引用 flavor.gradle 文件即可。 apply from: (${rootProject.rootDir}/flavor.gradle)升级版渠道配置 按照以上配置方式每增加一个渠道就得每个渠道重新写一遍 huawei.manifest.srcFile 等这种操作会让 build.gradle 显得非常臃肿。可以通过固定规则写脚本解决以上问题。 1、在项目中创建出打包脚本文件夹 buildSrc在此文件夹下创建 src/resource/**META-INF/gradle-plugins 路径及文件夹名固定。** 2、定义自动构建插件路径在 src/resource/**META-INF/gradle-plugins 路径下创建一个 xxx.properties 文件文件内定义构建脚本路径。** // 路径是写脚本的文件路径 implementation-classcom.xxx.plugin.PackagePlugin3、在 build.gradle 里引入相关仓库 //依赖 groovy 插件这个是 Gradle 内置的插件 plugins {kotlin-dsljava-gradle-plugingroovy }val androidGradlePlugin com.android.tools.build:gradle:4.2.2 val kotlin_version 1.6.10//引入相关的仓库 dependencies {// 导入androidGradlePlugin这样buildSrc可以使用gradle相关apiimplementation(androidGradlePlugin)// Depend on the kotlin plugin, since we want to access it in our pluginimplementation(org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlin_version})// Depend on the default Gradle API since we want to build a custom pluginimplementation(gradleApi())implementation(localGroovy()) }4、在主模块app模块的 build.gradle 中引入插件。 // plugin 的名字是第 2 步创建 properties 的名字 apply plugin: PackPlugin5、在 PackagePlugin 中开始编写自动构建脚本 编写脚本用的是 groovy 语法可以参考这篇文章Gradle插件从入门到进阶 class PackagePlugin : PluginProject {// plugin 必须实现的方法override fun apply(target: Project) {// 获取 android extensionvar appExtension target.extensions.getByName(android) as AppExtension// 多渠道构建appExtension.productFlavors {var channelList getChannelList()channelList.forEach { channelModel -register(channelModel.channelName) {// 每个渠道的需要配置的参数可以根据自己的规则订applicationId channelModel.packageNameversionCode channelModel.versionCodeversionName ${channelModel.versionCode}.0// manifest 需要配置的参数manifestPlaceholders[ads_id] channelModel.adsIdmanifestPlaceholders[app_name] channelModel.appName// 代码里需要使用的不同渠道配置参数buildConfigField(String, XXX, \${channelModel.定义的属性名}\)buildConfigField(String, XXX, \${channelModel.定义的属性名}\)}}}// 签名文件appExtension.signingConfigs {var channelList getChannelList()channelList.forEach { channelModel -var channelName channelModel.channelNameregister(channelName) {// 可以单独处理不一样的包storeFile(getKeyStoreFile(channelName, target))storePassword(channelName)keyAlias(channelName)keyPassword(channelName)}}}// 不同渠道配置不同的签名文件签名文件的名字、别名、密码可以自行定义appExtension.signingConfigs.forEach { signingConfig -println(PackagePlugin signing:${signingConfig.keyAlias.toString()})appExtension.productFlavors.getByName(signingConfig.keyAlias.toString()).signingConfig signingConfig}// 不同渠道的不同代码、资源、和 manifestappExtension.sourceSets {var channelList getChannelList()channelList.forEach { channelModel -var channelName channelModel.channelNamegetByName(channelName) {res.srcDirs(src/${channelName}/res)java.srcDirs(src/${channelName}/java)manifest.srcFile(src/${channelName}/AndroidManifest.xml)}}}}}
http://www.w-s-a.com/news/773174/

相关文章:

  • 河南国基建设集团--官方网站wordpress qode
  • 做农村电子商务的网站有哪些内容静态网站模板古典
  • 导航网站设计方案个人网站推广方法
  • 网站排名易下拉教程防wordpress花园
  • 计算机网站建设 是什么意思现在网站建站的主流语言是什么
  • php网站跟随导航西安百姓网免费发布信息网
  • 濮阳做公司网站html5 特效网站
  • ppt设计器怎么打开深圳seo网络推广营销
  • 建设银行网站用360浏览器建设信用卡中心网站
  • 创建公司网站 教程广州建设局
  • 详述网站建设的过程简答题ui培训设计怎么样
  • 动易网站官网ppt主题大全素材
  • 怎样用eclipse做网站可以做宣传图的网站
  • 哪里可以做游戏视频网站做网站平台应该注意哪些
  • 网站后期推广是谁来做网页制作步骤作答题
  • 全屋装修设计定制整装成都网站优化多少钱
  • html5购物网站模板一个网站两个数据库
  • 个人网站怎么做微信支付网站建设项目介绍
  • 建网站合同网站适配移动端和PC端
  • 网站建设培训机构哪里好html5开发wap网站
  • 免费自助建站源码学而思网校官网
  • 中国最大的网站制作公司青海省高等级公路建设管局网站
  • 建设网站对服务器有什么要求吗wordpress去除更新提示
  • 找个为公司做网站的手机端原神
  • 邯郸手机建站价格公众号开发者权限哪里添加
  • wordpress模板电子书下载站微信app官方免费下载
  • 从哪些方面进行网站建设如何做网站的实时画面
  • 设计网站公司收费西安小程序开发公司有哪些
  • 如何建网站赚取佣金哪个网站可以做免费宣传
  • 万网手机网站seo方法