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

万网的网站建设网络营销模式的建议

万网的网站建设,网络营销模式的建议,凡科做的网站可以优化,网站免费建站pixiv app点击上方“刘望舒”#xff0c;选择“星标”多点在看#xff0c;就是真爱作者: 厘米姑娘(腾讯开发妹子)| 来源 #xff1a;公号 码个蛋https://www.jianshu.com/p/1274c1f1b6a4前言在使用Android Studio过程中没少被Gradle坑过#xff0c;虽然网上有很多简单粗暴的解决方案… 点击上方“刘望舒”选择“星标” 多点在看就是真爱作者: 厘米姑娘(腾讯开发妹子)| 来源 公号 码个蛋https://www.jianshu.com/p/1274c1f1b6a4前言在使用Android Studio过程中没少被Gradle坑过虽然网上有很多简单粗暴的解决方案但极少会说清楚缘由所以一直想看一本叫《Android Gradle权威指南》。不过由于书中实践内容很多更像一本工具书而且Gradle现已发行了好几版因此本篇仅仅是陈列出一些大的要点尤其是那些熟悉又陌生的名词如果想要具体了解细节和操作流程一定要跟着书探索哟~Gradle入门Groovy基础Gradle构建脚本基础Gradle插件Java Gradle插件Android Gradle插件一. Gradle入门1.本书环境JDKOpenJDK 1.8.0GradleGradle 2.14.1 All 版IDEAndroid Studio 2.2.3Android PluginAndroid Gradle 2.2.3AndroidAPI 232.Eclipse和Android Studioa.开发配置区别EclipseADTAntAndroid StudioGradleGradle比Ant更灵活有效提高开发效率b.Eclipse迁移到AndroidStudio两种方式使用AndroidStudio直接导入Eclipse工程      特点使用AS默认推荐目录结构使用Eclipse导出Android Gradle配置文件并转换成Gradle工程再使用Android Studio把它作为Gradle工程导入      特点保留原项目结构3.Gradle的ZIP解压后目录docsAPI、 DSL、指南等文档init.dgradle初始化脚本目录lib相关库media一些icon资源samples示例src源文件getting-started.html入门链接LICENSENOTICE4.引例Gradle版Hello World//build.gradle task hello{//定义一个任务Task名为hello doLast{//添加一个动作Action表示在Task执行完毕后回调doLast闭包中的代码printlnHello World//输出字符串单双号均可 } }//终端 gradle hello//执行build.gradle中名为Hello的任务//输出 Hello World5.Gradle Wrappera.含义对Gradle一层包装便于使用统一Gradle构建b.目录结构|--gradle| |--wrapper|  |--gradle-wrapper.jar|  |--gradle-wrapper.properties|--gradlew|--gradlew.batgradle-wrapper.jar具体业务逻辑实现的jar包gradle-wrapper.properties配置文件包含篇配置信息如下图gradlewLinux下可执行脚本gradlew.batWindows下可执行脚本c.常用命令生成gradle wrapper由Wrapper Task生成配置参数        - gradle wrapper --gradle-version XXX用于指定使用的Gradle版本        - gradle wrapper --distribution-url XXX用于指定下载Gradle发行版的url地址自定义task wrapper(type:Wrapper){ //配置信息 }6.Gradle日志a.日志级别b.日志输出代码使用print方法属于quiet级别日志println XXX使用内置loggerc.日志输出控制例如输出QUIET级别及其之上的日志信息gradle -q tasks7.Gradle命令行查看所有可执行tasks./gradlew tasks强制刷新依赖./gradlew --refresh-dependencies assemble多任务调用./gradlew clean jar查看帮助./gradlew -?或./gradlew -h或./gradlew -help二.Groovy基础一句话表明Groovy的地位Groovy于Gradle好比Java于Android1.特性Groovy是个灵活的动态脚本语言语法和Java很相似又兼容Java且在此基础上增加了很多动态类型和灵活的特性如支持闭包和DSL2.语法分号不必需字符串单引号和双引号均可定义一个字符串常量区别在于单引号不能对字符串表达式做运算而双引号可以task printStringVar {def name 张三” println 单引号的变量计算:${name} println 双引号的变量计算:${name}}运行./gradlew printStringVar输出结果单引号的变量计算:${name}双引号的变量计算:张三集合以List和Map为例介绍如何定义集合和访问集合元素//Listtask printList def numList [1,2,3,4,5,6];//定义一个Listprintln numList[1]//输出第二个元素println numList[-1]//输出最后一个元素println numList[1..3]//输出第二个到第四个元素 numList.each{println it//输出每个元素 }}//Maptask printlnMap def map1 [width:1024,height:768]//定义一个Mapprintln mapl[width]//输出width的值println mapl.height//输出height的值 map1.each{println Key:${it.key},Value:${it.value}//输出所有键值对 }}方法方法调用传参的括号可省略return不必需无return时会将最后一行代码作为其返回值允许将代码块(闭包)作为参数传递//以集合的each方法为例接受的参数就是一个闭包numList.each({println it})//省略传参的括号并调整格式有以下常见形式numList.each{println it}不是一定要定义成员变量才能作为类属性被访问用get/set方法也能当作类属性task helloJavaBean Person p new Person() p.name 张三 println 名字是: ${p.name}//输出类属性name为张三 println 年龄是: ${p.age}//输出类属性age为12}class Person{private String namepublic int getAge(){//省略return12 }}闭包当闭包有一个参数时默认为it多个参数时需要一一罗列//单个参数task helloClosure customEach{ println it }}def customEach(closure){ for(int i in 1..10){ closure(i) }}//多个参数task helloClosure eachMap{k,v- println ${k} is ${v} }}def eachMap(closure){ def map1 [name:张三,age:18] map1.each{ closure(it.key,it.value) }}三.Gradle构建脚本基础1.Settings文件作用初始化、设置工程树文件名settings.gradle放在Project下常用方法include方法指定能被Gradle识别的Module//添加:app和:common这两个module参与构建include :appproject(:app).projectDir new File(存放目录)include:commonproject(:common).projectDir new File(存放目录)2.Build文件Project的build.gradle整个Project的共有属性包括配置版本、插件、依赖库等信息Module的build.gradle各个module私有的配置文件3.Gradle任务a.含义指原子性操作b.关系一个Gradle可包含多个Project一个 Project可包含多个Task即每个Project是由多个Task组成的Task是Project的属性属性名就是任务名c.创建以任务名创建接受一个name参数def task myTask task(myTask)myTask.doLast{ println 第一种创建Task方法原型为Task task(String name) throws InvalidUserDataException}以任务名Map创建Map参数用于对创建的task进行配置可用配置如下图def task myTask task(myTask,group:BasePlugin.BUILD_GROUP)myTask.doLast{ println 第二种创建Task方法原型为Task task(String name,Map args) throws InvalidUserDataException}以任务名闭包创建常见形式task myTask{ doLast{   println 第三种创建Task方法原型为Task task(String name,Closure configureClosure) }}以上创建方式实际上最终都会调用TaskContainter#create()方法使用./gradlew myTask命令执行任务d.访问通过任务名访问名称.方法通过TaskContainter访问tasks[名称].方法通过路径访问参数可以为路径或名称   get方式tasks.getByPath(路径/名称)若不存在会抛出UnknownTaskException异常      find方式tasks.findByPath(路径/名称)若不存在返回null通过名称访问参数只能为名称  get方式tasks.getByName(名称)若不存在会抛出UnknownTaskException异常      find方式tasks.findByName(名称)若不存在返回null可见任务名称是唯一的这是因为TaskContainer的父类 NamedDomainObjectCopllection是个具有唯一不变名字的域对象的集合e.依赖在创建任务时通过dependsOn指定其依赖的任务可以控制任务的执行顺序task task1 println hello}task task2 println world}//依赖单个任务task task3(dependsOn:task1){ doLast{println one }}//依赖多个任务task task4{ dependsOn task1,task2 doLast{println two }}当执行task4时会发现task1、task2会先执行再执行task4注操作符 用在Task定义上相当于doLastf.排序除了通过强依赖来控制任务的执行顺序还可以通过 shouldRunAfter 和 mustRunAfter 实现taskB.shouldRunAfter(taskA) //表示taskB应该在taskA执行之后执行有可能不会按预设执行taskB.mustRunAfter(taskA) //表示taskB必须在taskA执行之后执行g.分组 描述分组是对任务的分类便于归类整理描述是说明任务的作用建议两个一起配置便于快速了解任务的分类和用途def task myTask task(myTask)myTask .group BasePlugin.BUILD_GROUPmyTask .description 这是一个构建的引导任务h.启用 禁用enable属性可以启动和禁用任务执行被禁用的任务输出提示该任务被跳过def task myTask task(myTask)myTask.enable false //禁用任务i.执行分析执行Task的时候实际上是执行其拥有的actions List它是Task对象实例的成员变量在创建任务时Gradle会解析其中被TaskAction注解的方法作为其Task执行的action并添加到 actions List其中doFirst和doList会被添加到action List第一位和最后一位4.自定义属性Project、Task和SourceSet都允许用户添加额外的自定义属性、并对自定义属性进行读取和设置方式通过ext属性添加多个通过ext代码块优点相比局部变量有广泛的作用域可以跨Project、跨Task访问只要能访问这些属性所属的对象即可//给Project添加自定义属性ext.age 18ext{ phone 13888888888 address Beijing}//给Task添加自定义属性task customProperty { ext.inner innnnnner doLast{ println project.hasProperty(customProperty) //true println project.hasProperty(age) //true println project.hasProperty(inner)//返回fasle println ${age} println ${phone} println ${inner} }}四.Gradle插件1.作用可以添加任务到项目比如测试、编译、打包等可以添加依赖配置到项目帮助配置项目构建过程中需要的依赖比如第三方库等可以向项目中现有的对象类型添加新的扩展属性和方法等帮助配置和优化构建可以对项目进行一些约定比如约定源代码存放位置等Gradle本身内置许多常用的插件如若需要还可以扩展现有插件或者自定义插件如Android Gradle插件就是基于内置的Java插件实现的2.扩展现有插件a.插件种类二进制插件实现org.gradle.api.Plugin接口的插件可以有plugin id脚本插件严格上只是一个脚本可以来自本地或网路b.应用插件通过Project#apply()方法有三种用法Map参数void apply (Map options)如下二进制插件idapply plugin:java类型apply plugin:org.gradle.api.plugins.JavaPlugin简写apply plugin:JavaPlugin脚本插件apply from:version.gradle第三方发布插件apply plugin:com.android.application注意应用第三方发布的作为jar的二进制插件时必须先在buildscript{}配置其classpath才能使用否则会提示找不到该插件//buildscript为项目进行前提准备和初始化相关配置依赖buildscript { repositories { jcenter () } dependencies { classpath com.android.tools.build:gradle:1.5.0 }}apply plugin:com.android.application二闭包void apply (Closure closure)apply { plugin:java}三Actionvoid apply (Action super ObjectConfigurationActicn action)3.自定义插件实现Plugin接口、重写apply()方法五.Java Gradle插件1.项目结构使用Java插件要先应用进来apply plugin:java此时会添加许多默认设置和约定比如有以下默认项目结构|-example| |-build.gradle| |-src|  |-main|   |-java 源代码存放目录|   |-resources 打包文件存放目录| |-test|  |-java 单元测试用例存放目录|  |-resources 单元测试中使用的文件2.源集(SourceSet)作用用于描述和管理源代码(java)及其资源(resources)如访问源代码目录、设置源集属性、更改Java原代码目录等方式通过sourceSets属性(是一个SourceSetsContainer)和sourceSets{}闭包常用属性比如在上述Java插件默认项目结构中的main和test就是内置的两个源集现在更改main源集的Java源文件的存放目录到src/java下apply plugin:javasourceSets{ main{  java{   srcDir src/java  } }}定义新源集通过sourceSets{}闭包添加apply plugin:javasourceSets{ vip{ }}此时会新建两个目录src/vip/java和src/vip/resources补充除了SourceSetJava插件里常用的其他属性3.配置第三方依赖a.依赖方式外部依赖依赖外部仓库如Maven、Ivy等项目依赖依赖项目依赖后可以使用该项目的Java类文件依赖如依赖Jar包出于安全考虑不发布到Maven而是放在项目的libs文件夹下b.具体方法对于外部依赖需要先在repositories{}闭包里声明依赖库的位置在dependencies{}闭包添加依赖        - 外部依赖说明依赖库的group:name:version        - 项目依赖project(项目名称)        - 文件依赖files(文件名称)多个文件逗号分开或者fileTree(dir:文件名称,include:*.扩展名称)依赖指定文件夹下指定扩展名文件几种依赖类型举例apply plugin:javarepositories {//外部依赖 依赖Maven中心库 maveCentral() }dependencies { //外部依赖 完整写法 compile group:com.squareup.okhttp3,name:okhttp, version:3.0.1  //外部依赖 简单写法 compile com.squareup.okhttp3:okhttp:3.0.1  //外部依赖 指定main源集依赖 mainCompile com.squareup.okhttp3:okhttp:3.0.1  //项目依赖 compile project(:example)  //文件依赖 依赖libs下两个Jar包 compile files(libs/example01.jar, libs/example02.jar)  //文件依赖 指定依赖libs下所有Jar包 compile fileTree(dir: libs,include: *.jar)}4.内置任务常用几种任务build任务构建项目clean任务删除build目录及构建生成的文件assemble任务不执行单元测试只编译和打包check任务只执行单元测试javadoc任务生成Java格式的doc api文档还有些通用任务、对源集适用的任务5.多项目构建含义多个Gradle项目一起构建方式通过settings.gradle配置管理多项目在每个项目都有一个build.gradle采用项目依赖就能实现多项目协作//settings.gradleinclude :appproject(:app).projectDir new File(存放目录)include :baseproject(:base).projectDir new File(存放目录)//app/build.gradleapply plugin:javadependencies { compile project(:base) }6.发布构件构件Gradle构建的产物如Jar包、Zip包等意义发布构建给其他工程使用可以发布到本地目录、Maven、Ivy等方式明确构件类型并通过artifacts{}闭包配置需要发布的构建在uploadArchives{}上传发布构件//以发布jar构件为例apply plugin:java task publishJar(type:Jar)artifacts{ archives publishJar}uploadArchives{ repositories{//发布到本地目录 flatDir{ name libs dirs $projectDir/libs }//发布到本地Maven库 mavenLocal() }}篇幅有限更多请阅读作者妹子的博文:https://www.jianshu.com/p/1274c1f1b6a4---------  END  ----------推荐阅读Android系统服务(一)解析ActivityManagerService(AMS)Android PMS的创建过程美团跨平台框架Picasso开启大前端的未来彻底理解cookie、session、token你好我是刘望舒十年经验的资深架构师著有两本业界知名的技术畅销书。如果你喜欢我的文章就给公众号加个星标吧方便阅读。推荐一个可以让你技术快速提升的神奇地方有兴趣的同学可以点击底部的 阅读原文   在看也是一种认可
http://www.huolong8.cn/news/394661/

相关文章:

  • 网站推广方法主要有莱芜金点子广告手机版
  • 合肥网站关键词推广本地建站教程
  • 任务平台网站建设网页访问禁止怎么恢复
  • 网站创建价格广州新际网络科技有限公司
  • wordpress的翻译文件seo网站关键词优化软件
  • 网站开发一个多少钱那个网站可以学做西餐
  • 查找网站后台入口微网站微商城建设
  • 莞城区网站建设公司开发一个打车软件需要多少钱
  • 足球门户网站建设做淘宝客网站必须备案吗
  • 公司网站建设需求天眼查官网在线查询
  • 樟木头镇仿做网站境外注册网站
  • 网络营销是一种什么样的营销网站seo分析工具
  • 网站如何做好seowordpress邮件发文章
  • 网站团队介绍专业网页制作技术
  • 搬瓦工如何搭建做网站编辑网站
  • 怎吗做网站挣钱重型机械网站开发模版
  • 做外贸的专业网站网站的三大标签
  • 怎么做网站建设赚钱网站建设的实训体会
  • 网站个人备案需要什么献县建设局网站
  • 专门做饮食加盟的网站wordpress无法设置中文
  • 镇江网站建设费用厦门seo关键词排名
  • 建俄语网站哪个公司最好织梦网站301跳转怎么做
  • 北京企业建网站公司新变更营业执照注册号查了发现之前有备案过网站了
  • 开发网站建设的问卷调查滨州哪里做网站
  • WordPress怎么更改主题名称天津关键词优化平台
  • 网站商城建设方式wordpress word图表
  • 网站前端建设响应式商城网站
  • 中国电力建设股份有限公司官方网站seo推广专员工作内容
  • 网站策划的最终体现是撰写网站策划书东莞保安公司排名前十
  • 建站手机网站wordpress clickjack