您的位置:首页 > 移动开发 > Android开发

androidstudio中各种gradle配置解释说明

2016-10-19 12:55 260 查看

androidstudio中各种gradle配置解释说明

我们知道每一个app就是as里面的一个modle,最进由于工作接触了各种gradle配置眼花缭乱,现在此记录下来,以防止以后忘记,笔记如下:

关于一个app的gradle的配置

关于一个sdk的gradle的配置

如何设置一个只有服务没有mainactivity的应用让其运行并安装无桌面图标

关于一个app的gradle的配置

下面是一个app,它支持编译不同版本的app,配置如下:

import java.text.SimpleDateFormat

apply plugin: 'com.android.application'  //这个代表当前modle是一个app而不是一个library

android {

compileSdkVersion 24   //源码编译使用的api的版本
buildToolsVersion "24.0.1"   //构建工具的版本
defaultConfig {
applicationId "com.zhangsan.lisi.services" //app的唯一标示,上架到市场上就是通过这个区分不同的app,相当于身份证
minSdkVersion 19  //19对应的系统是4.4,也就是说4.4以下版本的系统装不了这个app,此为最小兼容
targetSdkVersion 24 //目标sdk的版本,当遇到7.0系统的手机,这时的app运行效率最好
versionCode 1  //版本code,一般用于升级的时候使用,根据对比code来比大小判断是否该升级
versionName  "1.2." + getBuildTime() //版本名称,起一个显示的作用,常常看到设置里面显示的版本的介绍里面的数字就是这个
//      signingConfig signingConfigs.platformKey  配置默认的签名,指向platformKey ,必须把这句话注释掉的时候才可以打一个没有签名的包
}

//签名的配置,platformKey ,userKey 这个可以随便取名字,只要对上号就行了singningConfigs.userkey,然后就是那几个签名的密码,在新建签名的时候有几个配置,对照一下就知道填啥了
signingConfigs {
platformKey {
keyPassword 'zhangsan12345678'
storeFile file(getProjectDir().getParent() +  '/key_store/platform.keystore')//签名文件放在你的电脑哪里
storePassword 'zhangsan12345678'
keyAlias 'zhansan'
}

userKey {
keyPassword 'lisi12345678'
storeFile file("C:/Users/zhangxiaoya/Desktop/demo.jks")
storePassword 'lisi12345678'
keyAlias '李四'
}
}
//这里是编译不同的版本,有debug ,release ,home ,business ,honour 几个版本,由于在业务上需要区分不同版本的区别,所以这里单独配置
buildTypes {

debug {
buildConfigField "int", "Type", "1"
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//  signingConfig signingConfigs.userKey 可以单独为不同的版本配置不同的签名,图标之类的,具体百度
}

release {
buildConfigField "int", "Type", "1" //自定义type字段,编译运行后在app->build->buildconfig->对应的版本下有个BuildConfig文件里面会有type这个字段,在java文件中可以导入应用
minifyEnabled false  //是否打开混淆
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' //混淆的配置文件规则
}

home {
buildConfigField "int", "Type", "1"
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}

business {
buildConfigField "int", "Type", "2"
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}

honour {
buildConfigField "int", "Type", "3"
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}

android.applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk') && !outputFile.name.contains("debug")) {
//这里修改apk文件名
def fileName = getProject().name + "-" + variant.baseName + "-${defaultConfig.versionName}.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
}
}

def getBuildTime() {
//设置时间格式
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHH");
//获取当前时间
Date curDate = new Date(System.currentTimeMillis());
return formatter.format(curDate);
}

dependencies {
//引入对应的文件
compile files('libs/microlog4android-1.0.0.jar')
compile files('libs/xUtils-2.6.14.jar')
//    compile project(':sdk-framework')
compile 'com.bot.library.urlconfig:urlconfig:0.0.2'

}


关于一个sdk的gradle的配置

下面是一个library的gridle,将来会打包成jar供其他人使用,它的配置如下:

//由于这里是提供给别人使用的一个依赖库,所以这个需要应用com.android.library这个插件,同时需要吧代码提交到maven仓库,因为也申明需要应用一下maven插件
apply plugin: 'com.android.library'
apply plugin: 'maven'
android {
compileSdkVersion 24
buildToolsVersion "24.0.1"

defaultConfig {
minSdkVersion 15
targetSdkVersion 24
versionCode 1
versionName "1.0.1"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
//这个你利用gradle上传到maven中央库的基本配置,需要提供javadoc.jar,sources.jar,aar或者jar,pom,这个是生成sources.jar的配置
task androidSourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.sourceFiles
}
artifacts {
archives androidSourcesJar
}
//项目中使用到了其他的库,所以这里是添加对这个库的依赖
dependencies {
//吧lib下面的jar加载进来,才可以使用
compile fileTree(include: ['*.jar'], dir: 'libs')
//在ecplise里面有jar和项目的引用,这句话就类似项目引用,意思是指把名字叫cos的library引用到项目中
//    compile project(':library-cos')
}

//下面是要提交到maven的配置
uploadArchives {
configuration = configurations.archives
repositories.mavenDeployer {
//远程仓库的地址,貌似有具体ip的基本上都是建在局域网的仓库
repository(url: 'http://101.154.73.251:8080/nexus/content/repositories/releases/') {//仓库地址
authentication(userName: "admin",//用户名
password: "@xx321!@#")//密码
}

pom.project {
name 'juude-library'    //项目的名称
packaging 'aar'         //要提交文件的类型
description 'none'     //描述
url 'http://101.123.25.110:8080/nexus/content/repositories/releases/'//仓库地址
groupId "com.bot.library.sdk"  //注册sonatype账号时有填,这里是域名反转+项目名
artifactId "sdk"
version android.defaultConfig.versionName
}
}
}


如何设置一个只有服务没有mainactivity的应用让其运行并安装无桌面图标

只有服务的应用本来就没有图标,服务本来就是工作在后台的,一般系统内置的应用都是没得图标在桌面上的,在ecplise里面你只需要吧这2句话去掉就好了或者根本不配置mainactivity,可是不知为何在as里面去掉了这两句话,app编译就会出错,报找不到mainactivity的错误

<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />


如果你是用as开发,那么只需要在mainactivty配置中加上这么一句话就好了

<data android:host="AuthActivity" android:scheme="com.android.example" />
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  gradle