技术标签: android
Gradle
依赖:Apache Ant ,Apache Maven ,项目自动化建构工具 ,Groovy, 特定领域语言(DSL),
Gradle =>一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言(DSL)
Apache Ant => 由Apache 提供的自动化软件构建工具 (可以理解为其负责软件的编译) 开始于2000年左右。
Apache Maven => 是由Apache 提供的管理项目的构建,报告和文档的软件项目管理工具 (我将其理解为 通过pom.xml来描述软件依赖关系。并提供一个云端类库) 开始于2001年左右。
项目自动化建构工具 => 抽象项目编译过程 提供一个容易使用的接口的工具
Groovy => 一门编程语言,基于JVM 的面对对象的动态脚本语言
特定领域语言=>为了解决某个特定领域的问题 而编写的语言,一般基于其他语言
Android Studio =>2013年谷歌推出的Android开发环境 使用Gradle 作为编译工具
其中过程依赖:grdle基本知识,编译过程,
Android Studio 使用Gradle做为Android apk的编译工具。
在android studio执行run时,实际上底层调用的是gradle 命令,由gradle再去使用Android SDK中的编译工具。
这主要是因为直接使用sdk的编译工具太麻烦太痛苦,而gradle提供了一个很好的接口,让我们能通过命令行来编译android。
apk grdle基本知识:gradle通过解析build.gradle这个文件来运行build.gradle。gradle配置主要由task和一些配置组成,task之间有相互依赖关系。通过这些依赖关系和配置就能编译项目可以通过 apply plugin 来加入一些默认的task。例如apply plugin: ‘java’,这是java的插件。他加入了许多编译java的task,如果你的目录结构正确,那么通过gradle 运行 task 就能编译java项目。
编译过程,这是一个最简单的显示 hellowrold的 apk的文件结构。
一个android项目实际上在gradle 的编译体系中属于 multi project build。
每个使用gradle编译的android项目都有一个app文件夹,android项目源码就在这个文件夹下。gradle文件中放的是一个jar包
当你的电脑中没有安装gradle,就会通过gradle-wrapper.jar来下载gradle,从而继续编译。build.gradle中的是
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.3'
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
他只是通过
dependencies {
classpath 'com.android.tools.build:gradle:2.1.3'
}
来描述插件的位置。
gradle.properties 中是配置信息,在这里设置jvm的heapsize 什么的。
settings.gradle之前说了每个用gradle 的android 项目是一个multi project build,那么就需要指明有哪些project,这里我们就只有默认的app。
local.properties中配置的是sdk的位置
gradlew.bat 和gradlew 分别是在windows 和linux下的执行gradle 命令的程序。
例如在windows下要编译apk,就执行 .\gradlew assemble
进入到app文件夹
libs文件夹下放项目要用的jar包src下就是正常的android 项目的源码了,build.gradle中是
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "24.0.1"
defaultConfig {
applicationId "com.misakimei.project"
minSdkVersion 19
targetSdkVersion 23
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.4.0'
testCompile 'junit:junit:4.12'
}
apply plugin: 'com.android.application'
使用从之前设定的
dependencies {
classpath 'com.android.tools.build:gradle:2.1.3'
}
得到的plugin,这个plugin导入了许多编译android apk 要用的task。
接着是两个配置项 android 和dependencies。
android中配置的是源码的,编译中的一些设置。例如:sdkversion什么的,详细的在这里。
dependencies中配置的是这个项目中要用的类库。compile fileTree(dir: 'libs', include: ['*.jar'])
表示包括之前在libs文件夹下的所有jar包。compile 'com.android.support:appcompat-v7:23.4.0'
这种表示增加appcompat-v7:23.4.0的依赖,gradle会自动下载配置。
例如如果要用guava 的话直接加一行compile group: 'com.google.guava', name: 'guava', version: '11.0.2'
就好。
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "24.0.1"
defaultConfig {
applicationId "com.misakimei.project"
minSdkVersion 19
targetSdkVersion 23
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.4.0'
compile group: 'com.google.guava', name: 'guava', version: '11.0.2'
testCompile 'junit:junit:4.12'
}
dependencies 的详细配置在 这里gradle +特定的插件,使得编译时只要在意配置,无须再手敲 aapt javac gcc 什么的。
apply plugin: 'com.android.application'//说明module的类型,com.android.application为程序,com.android.library为库
android {
compileSdkVersion 22//编译的SDK版本
buildToolsVersion "22.0.1"//编译的Tools版本
defaultConfig {
//默认配置
applicationId "com.nd.famlink"//应用程序的包名
minSdkVersion 8//支持的最低版本
targetSdkVersion 19//支持的目标版本
versionCode 52//版本号
versionName "3.0.1"//版本名
manifestPlaceholders = [ UMENG_CHANNEL_VALUE:"hsq" ]//声明友盟渠道名是可变的
}
sourceSets {
//目录指向配置
main {
manifest.srcFile 'AndroidManifest.xml'//指定AndroidManifest文件
java.srcDirs = ['src']//指定source目录
resources.srcDirs = ['src']//指定source目录
aidl.srcDirs = ['src']//指定source目录
renderscript.srcDirs = ['src']//指定source目录
res.srcDirs = ['res']//指定资源目录
assets.srcDirs = ['assets']//指定assets目录
jniLibs.srcDirs = ['libs']//指定lib库目录
}
debug.setRoot('build-types/debug')//指定debug模式的路径
release.setRoot('build-types/release')//指定release模式的路径
}
signingConfigs {
//签名配置
release {
//发布版签名配置
storeFile file("fk.keystore")//密钥文件路径
storePassword "123"//密钥文件密码
keyAlias "fk"//key别名
keyPassword "123"//key密码
}
debug {
//debug版签名配置
storeFile file("fk.keystore")
storePassword "123"
keyAlias "fk"
keyPassword "123"
}
}
buildTypes {
//build类型
release {
//发布
minifyEnabled true//混淆开启
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'//指定混淆规则文件
signingConfig signingConfigs.release//设置签名信息
}
debug {
//调试
signingConfig signingConfigs.release
}
}
packagingOptions {
exclude 'META-INF/ASL2.0'
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
exclude 'META-INF/MANIFEST.MF'
}
lintOptions {
abortOnError false//lint时候终止错误上报,防止编译的时候莫名的失败
}
//打包-渠道
productFlavors {
hsq{
}
hsq_dx{
}
hsq_wx{
}
baidu{
}
yingyongbao{
}
ppzhushou{
}
anzhi{
}
zhushou360{
}
huawei{
}
lenovomm{
}
wandoujia{
}
mumayi{
}
meizu{
}
youyi{
}
sougou{
}
}
//打包-防渠道代码重复处理
productFlavors.all {
flavor ->
flavor.manifestPlaceholders = [ UMENG_CHANNEL_VALUE:name ]
}
}
dependencies {
//依赖
compile fileTree(dir: 'libs', exclude: ['android-support*.jar'], include: ['*.jar']) //编译lib目录下的.jar文件
compile project(':Easylink')//编译附加的项目
compile project(':ImageLibrary')
compile project(':ImageResLibrary')
compile project(':Ofdmtransport')
compile project(':PullToRefreshLibrary')
compile project(':RecorderLibrary')
compile project(':WebSocket')
compile project(':WidgetLibrary')
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3'//编译来自Jcenter的第三方开源库
文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib
文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang
文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些
文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器
文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距
文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器
文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn
文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios
文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql
文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...
文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120
文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数