石家庄做网站的公司书店网站模板下载

pingmian/2026/1/23 20:48:48/文章来源:
石家庄做网站的公司,书店网站模板下载,网站设计模板代码,唐山做网站优化查看原文#xff1a;http://blog.csdn.net/u0108184... Gradle实战系列文章#xff1a;《Gradle基本知识点与常用配置》《Gradle实战#xff1a;Android多渠道打包方案汇总》《Gradle实战#xff1a;不同编译类型的包同设备共存》《Gradle实战#xff1a;执行sql操作hive… 查看原文http://blog.csdn.net/u0108184... Gradle实战系列文章 《Gradle基本知识点与常用配置》《Gradle实战Android多渠道打包方案汇总》《Gradle实战不同编译类型的包同设备共存》《Gradle实战执行sql操作hive数据库》 aar简介 aar文件是Google为Android开发所设计的一种library格式全名为Android Archive Library与Java Jar Library不同的是aar除了java code之外还包含资源文件即xml文件、图片、文字等。本文着重介绍发布过程和遇到的一些坑及其解决方案文中的maven仓库是指公司搭建的maven仓库如果要发布到jCenter或maven central可以参考文章最后的“深入学习“。 1. 准备工作 开发工具Android Studio复习《Gradle基本知识点与常用配置》本文会用到gradle中全局属性设置、文件读取、shell指令执行等相关知识点 工程必须是lib工程即该工程对应的build.gradle文件中要引用 apply plugin: com.android.library 在根目录的build.gradle文件中添加 allprojects { apply plugin: idea apply plugin: mavenconfigurations {deployerJars } } configurations.all { resolutionStrategy.cacheChangingModulesFor 0, seconds//不使用缓存使用仓库中最新的包 } subprojects { //表示除主工程外所有子模块 dependencies {deployerJars org.apache.maven.wagon:wagon-http:2.2 } } ext { //仓库选择标记 repoType remote //发布到远程仓库下文中会用到 // repoType local //发布到本地仓库方便调试避免调试期间频繁上传到maven仓库下文中会用到} 在gradle.properties文件中添加 releaseRepositoryUrlxxx //正式包仓库地址下文中会用到snapshotRepositoryUrlxxx //测试包仓库地址下文中会用到repositoryGroupcom.company.appname // 定义要上传的aar所在仓库的Group可自定义但后续引用处要与此一致 在工程根目录下新建一个名为“mavenAccount.properties”文件并将该文件加入到ignore 中该文件用于存放访问maven仓库的账户和密码以及本地仓库地址只有该模块的开发者才有权发布该aar包。 repositoryUserNamexxxrepositoryPasswordxxxlocalRepositoryUrlfile:///Users/admin/Documents/Android/repo/ 2. 编写上传脚本 生成aar包 在工程根目录下新建一个名为“release-as-aar.gradle”的文件其中脚本如下uploadArchives() { repositories {mavenDeployer {configuration configurations.deployerJarsprintln repoType : rootProject.ext.repoTypeif ((rootProject.ext.repoType).equals(remote)) { //发布到远程仓库snapshotRepository(url: snapshotRepositoryUrl) { // 测试包//从本地文件读取仓库账号和密码def File propFile new File(../mavenAccount.properties)if (propFile.canRead()) {def Properties props new Properties()props.load(new FileInputStream(propFile))if (props ! null props.containsKey(repositoryUserName) props.containsKey(repositoryPassword)) {def repositoryUserName props[repositoryUserName]def repositoryPassword props[repositoryPassword]authentication(userName: repositoryUserName, password: repositoryPassword)println 上传到远程仓库} else {println 没有发布权限}} else {println 没有发布权限}}repository(url: releaseRepositoryUrl) { // 正式包def File propFile new File(../mavenAccount.properties)if (propFile.canRead()) {def Properties props new Properties()props.load(new FileInputStream(propFile))if (props ! null props.containsKey(repositoryUserName) props.containsKey(repositoryPassword)) {def repositoryUserName props[repositoryUserName]def repositoryPassword props[repositoryPassword]authentication(userName: repositoryUserName, password: repositoryPassword)println 上传到远程仓库} else {println 没有发布权限}} else {println 没有发布权限}}} else { // 发布到本地仓库def localRepositoryUrldef File propFile new File(../mavenAccount.properties)if (propFile.canRead()) {def Properties props new Properties()props.load(new FileInputStream(propFile))if (props ! null props.containsKey(localRepositoryUrl)) {localRepositoryUrl props[localRepositoryUrl]snapshotRepository(url: localRepositoryUrl)repository(url: localRepositoryUrl)println 上传到本地仓库} else {println 没有发布权限}} else {println 没有发布权限}}} } } 生成jar包 在工程根目录下新建一个名为“release-as-jar.gradle”的文件其中脚本如下task androidJavadocs(type: Javadoc) { failOnError false source android.sourceSets.main.java.srcDirs ext.androidJar ${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar classpath files(ext.androidJar) } task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) { classifier javadoc from androidJavadocs.destinationDir } task androidSourcesJar(type: Jar) { classifier sources from android.sourceSets.main.java.srcDirs } uploadArchives { repositories {mavenDeployer {configuration configurations.deployerJarsprintln repoType : rootProject.ext.repoTypeif ((rootProject.ext.repoType).equals(remote)) { //发布到远程仓库snapshotRepository(url: snapshotRepositoryUrl) {def File propFile new File(../mavenAccount.properties)if (propFile.canRead()) {def Properties props new Properties()props.load(new FileInputStream(propFile))if (props ! null props.containsKey(repositoryUserName) props.containsKey(repositoryPassword)) {def repositoryUserName props[repositoryUserName]def repositoryPassword props[repositoryPassword]authentication(userName: repositoryUserName, password: repositoryPassword)println 上传到远程仓库} else {println sorry你没有上传aar包的权限}} else {println sorry你没有上传aar包的权限}}repository(url: releaseRepositoryUrl) {def File propFile new File(../mavenAccount.properties)if (propFile.canRead()) {def Properties props new Properties()props.load(new FileInputStream(propFile))if (props ! null props.containsKey(repositoryUserName) props.containsKey(repositoryPassword)) {def repositoryUserName props[repositoryUserName]def repositoryPassword props[repositoryPassword]authentication(userName: repositoryUserName, password: repositoryPassword)println 上传到远程仓库} else {println sorry你没有上传aar包的权限}} else {println sorry你没有上传aar包的权限}}} else {//发布到本地仓库def localRepositoryUrldef File propFile new File(../mavenAccount.properties)if (propFile.canRead()) {def Properties props new Properties()props.load(new FileInputStream(propFile))if (props ! null props.containsKey(localRepositoryUrl)) {localRepositoryUrl props[localRepositoryUrl]snapshotRepository(url: localRepositoryUrl)repository(url: localRepositoryUrl)println 上传到本地仓库} else {println sorry本地仓库路径不存在}} else {println sorry本地仓库路径不存在}}} } } artifacts { archives androidSourcesJar archives androidJavadocsJar } 3. 子模块中相关配置 在子模块的build.gradle文件中添加 group repositoryGroup//version 0.0.1version 0.0.1-SNAPSHOT //表示测试版正式发版时去掉“-SNAPSHOT” //打成aar格式apply from: ../release-as-aar.gradle //引用上传插件 //打成jar格式//apply from: ../release-as-jar.gradle 4. 打包上传 编译通过后打开android studio自带的终端进入相应的module目录下输入gradle uploadArchives5. 使用aar 在需要引用aar包的工程中根目录的build.gradle文件中进行如下配置 allprojects { repositories { // jcenter(); //注释jcenter表示不直接从jcenter仓库获取而是通过公司私服仓库去获取 maven {name xxx //key与value之间有空格url xxx //key与value之间有空格}mavenLocal(); } } 在子模块的build.gradle文件中进行如下引用 dependencies { compile group: repositoryGroup, name: xxx, version: 0.0.1, ext: aar, changing: true } 6. 踩到的坑 问题一上传时找不到服务器上传时需关闭android studio的翻墙代理设置且注释settings.gradle中自动生成的代理服务器相关配置否则上传时会报找不到仓库服务器的错误。 问题二aar包无法更新 有时上传了最新的snapshot包引用的地方也sync、clean了但引用的还是旧的包此时需要删除“~/.gradle”中的相关记录。为方便执行我们可以在应用工程根目录的build.gradle文件中采用shell命令删除该命令会在你执行clean操作时先执行 task deleteDescriptors(type: Exec) { //执行shell命令executable shargs -c, rm -rf ~/.gradle/caches/modules-2/metadata-2.16/descriptors/com.company.appname //此处的“com.company.appname“就是之前定义的“repositoryGroup“。}task clean(type: Delete, dependsOn: deleteDescriptors) { //clean工程时顺带执行上述任务delete rootProject.buildDir} 此时再clean一下引用的就是最新的aar包了。 问题三无法设置debug编译类型 在lib工程中无论怎么设置编译类型最后生成的aar包中始终都是release版本该问题见google反馈。既然不可设置编译类型我们可以在aar包代码中通过反射来获取应用的编译类型 private Object getBuildConfigValue(Context context, String fieldName) {try {Class? clazz Class.forName(context.getPackageName() .BuildConfig);Field field clazz.getField(fieldName);return field.get(null);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (NoSuchFieldException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}return null;}//使用String buildType getBuildConfigValue(ctx,BUILD_TYPE).toString();if (!TextUtils.isEmpty(buildType) buildType.equals(debug)) { // debug...} else { // release...} 但是这里面还有一个坑系统版本在4.4以下的设备中该方法无法获得包名会抛空指针错误。以下我们给出完整的解决方案 public class BuildConfigProvider {private static Context sContext;private static String packageName;public static String getBuildType() {String buildType (String) getBuildConfigValue(BUILD_TYPE);if (debug.equals(buildType)) {buildType debug;}if (release.equals(buildType)) {buildType release;}return buildType;}public static final boolean isDebug() {return BuildConfig.DEBUG;}/*** 通过反射获取ApplicationContext** return*/private static Context getContext() {if (sContext null) {try {final Class? activityThreadClass Class.forName(android.app.ActivityThread);final Method currentActivityThread activityThreadClass.getDeclaredMethod(currentActivityThread);final Object activityThread currentActivityThread.invoke(null);final Method getApplication activityThreadClass.getDeclaredMethod(getApplication);final Application application (Application) getApplication.invoke(activityThread);sContext application.getApplicationContext();} catch (Exception e) {e.printStackTrace();}}return sContext;}/*** 通过反射获取包名** return*/private static String getPackageName() {if (packageName null) {try {final Class? activityThreadClass Class.forName(android.app.ActivityThread);final Method currentPackageName activityThreadClass.getDeclaredMethod(currentPackageName);packageName (String) currentPackageName.invoke(null);} catch (Exception e) {packageName getContext().getPackageName();}}return packageName;}public static Object getBuildConfigValue(String fieldName) {try {Class? clazz Class.forName(packageName .BuildConfig);Field field clazz.getField(fieldName);return field.get(null);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (NoSuchFieldException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (IndexOutOfBoundsException e) {e.printStackTrace();}return ;}} 当然有人可能会说既然可以通过反射得到ApplicationContext就没必要再去反射获得包名了这里只是提供不同的解决方案以作参考。 问题四多包共存模式下获得编译类型为空 在上一篇博客《 Gradle实际应用二同名包共存》中我们可以在一个设备中安装同一个应用不同编译类型的包。但是非release包中我们获得的包名是带有编译类型后缀的如“com.company.appname.debug“而编译类型我们是通过反射获取“BuildConfig“所在的包名还是原始的、不加后缀的包名如“com.company.appname“此时我们拿到的编译类型为空那么我们可以在获取包名后做一个检查 private static String checkPackageName(String packageName) {String[] temp packageName.split(\\.);String sub temp[temp.length - 1];//如果多包共存模式剔除包名中的后缀if (sub.equals(debug)) {StringBuilder sb new StringBuilder();for (int i 0; i temp.length - 1; i) {sb.append(temp[i]);if (i ! temp.length - 2) {sb.append(.);}}packageName sb.toString();}return packageName;}深入学习 同步aar到jCenter与maven centralAndroid Studio使用Gradle上传AAR至Mavenaar无法设置debug问题解决参考查看原文http://blog.csdn.net/u0108184...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/86422.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

成都网站创建厂房装修东莞网站建设

项目背景 原有的启动平台公共组件库comm-util的浏览器工具类BrowserUtils是基于UserAgentUtils的,但是该项目最后一个版本发布于 2018/01/24,之至今日23年底,已有5年没有维护更新,会造成最新版本的部分浏览器不能正确获取到浏览器…

福建省建建设行业信用评分网站网页建设方案怎么写

一、准备工作 kali和靶机都选择NAT模式(kali与靶机同网段) 1.靶场环境 下载链接:https://download.vulnhub.com/dc/DC-7.zip 2.kali的ip 命令:ifconfig 3.靶机的ip 扫描靶机ip sudo arp-scan -l 二、信息收集 1.nmap的信息收集 (1&…

网站建设 项目书 框架中铁建设门户网站

01 卡片 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 小蓝有很多数字卡片,每张卡片上都是数字 0 到 9。 小蓝准备用这些卡片来拼一些数,他想从 1 开始拼出正整数,每拼一个&a…

html5 微网站 源码简历模板电子版

"数据二十条"即中共中央、国务院关于构建数据基础制度更好发挥数据要素作用的意见,全文共分为五章二十条。 一、发布 2022年6月22日召开了中央全面深化改革委员会第二十六次会议。审议通过《关于构建数据基础制度更好发挥数据要素作用的意见》。 2022…

网站开发程序用什么好电商开发系统

1.1 1代精彩面板仅支持使用PPI电缆(RS232-PPI和USB-PPI)下载程序,操作步骤如下:使用PPI下载方式,组态电脑需要使用RS232/PPI电缆或USB/PPI电缆与面板相连。订货号分别如下:RS232/PPI电缆:6ES7901-3CB30-0XA0USB/PPI电缆…

可以做链接的网站关于网站项目建设的申请

个人主页:点我进入主页 专栏分类:C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 数据结构初阶 欢迎大家点赞,评论,收藏。 一起努力 目录 1.前言 2.堆排序 2.1降序排序 2.2时间复杂…

建设高端网站公司的目的网站的推广是怎么做的

代码随想录二刷 | 字符串 |重复的子字符串 题目描述解题思路 & 代码实现移动匹配KMP算法 题目描述 459.重复的子字符串 给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。 示例 1: 输入: s “abab” 输出: tru…

公司做网站要花多少钱平顺网站建设

错误的原因是:缺少servlet-api.jar这个包,将这个包导入项目里面就可以了。1. 我们可以到tomcat的lib目录下面找到这个包,然后在eclipse中,右击项目,2. 选择Java Build Path>Libraries>Add ExternalJARS,找到你计…

做购彩网站是怎么盈利的工作人员回应游客扔免费午餐

115.派大星的烦恼 解压下载文件时一个 bmp 文件,用notepad 打开有没有发现什么 ,提示位图什么的 用Stegsolve.jar 打开 发现很多. 和- 第一时间想到了 电报码 但提示不是电报码,除了这个那就是很像二进制了 0,1 什么的,但这个感觉…

关于网站开发所需的知识优化电池充电什么意思

myeclipse的安装就不说了,百度一下都有很多教程 但是发现现在网上很少有介绍这个软件具体如何使用,哪个组件有何用处并没有太多解释 因此讲解一下myeclipse的使用: 1.工作区【workspace】 1.当myeclipse打开后,大多数会…

文山州中小企业网站建设河北住房和城乡建设厅

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 Hello大家好,我是python学习者小杨同学,上次跟大家分享关于python的数值类型和序列类型,…

广州番禺网站制作推广建立企业网站的详细步骤

2分钟搭建企业轻量级负载均衡服务器 文章目录1. 修改配置文件2. tomcat启动参数:3. 统一编码格式1. 修改配置文件 打开IntelliJ IDEA本地安装目录中bin文件夹下的idea.exe.vmoptions和idea64.exe.vmoptions这两个文件 分别在这两个文件内容的末尾添加:…

wordpress toggle 插件给网站做优化怎么做

Spring基础 - SpringMVC请求流程和案例 什么是MVC 用一种业务逻辑、数据、界面显示分离的方法,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理…

江西网站建设价格山西省网站备案

目录 自定义组件的 v-modelv-model简化代码 自定义组件的 v-model 组件上的 v-model 默认会利用名为 value 的 prop 和名为 input 的事件。 <input v-model"parentData"> 等价于&#xff1a; <input :value"parentData"input"parentData …

佛山建设局官方网站漯河网站超市建设

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的…

网站服务器租用合同wordpress中的template

目录 建议有状压基础再食用&#xff1a;本题的状态转移方程是 dp代码片:参考代码 建议有状压基础再食用&#xff1a; n行m列 等价 n列m行 &#xff0c;因为n比较小&#xff0c;int是32位足够了&#xff0c;我们用比特位统计每一行的状态。 本题的状态转移方程是 dp[h][i][j]…

数据表和网站建设的关系著名的设计网站

随着经济的发展&#xff0c;人们对生活的需求也不再局限于温饱层面&#xff0c;越来越多的人们开始追求文化、艺术的高层次需求&#xff0c;旅游也逐渐成为人们日常放松的一种方式。由于我国人口多、易扎堆等特点&#xff0c;景区的运营监管方式也亟需改革。TSINGSEE青犀智能分…

网站开发人员的岗位职责微网站和微信公共平台的区别

目录 GCD&#xff08;最大公约数&#xff09; 1、欧几里得算法 LCM&#xff08;最小公倍数&#xff09; 一、试题 算法训练 抗击虫群 GCD&#xff08;最大公约数&#xff09; 整数 a 和 b 的最大公约数是指能同时整除 a 和 b 的最大整数&#xff0c;记为 gcd(a,b)-a的因子和…

电商网站设计公司皆选亿企邦dux5.0 WordPress

MQ 延迟队列 1. 前言 延迟队列是我们日常开发过程中&#xff0c;经常接触并需要使用到的一种技术方案。前些时间在开发业务需求时&#xff0c;我也遇到了一个需要使用到延迟消息队列的需求场景&#xff0c;因此我也在网上调研了一系列不同的延迟队列的实现方案&#xff0c;在…