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" />