• zz Android studio gradle配置


    有了gradle,ant,maven

    最简单android build.gradle

    build.gradle

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
        //设置脚本的运行环境
        buildscript {
             //支持java 依赖库管理(maven/ivy),用于项目的依赖。
         repositories {
                mavenCentral()
            }
            //依赖包的定义。支持maven/ivy,远程,本地库,也支持单文件
            dependencies {
                classpath 'com.android.tools.build:gradle:0.4'
            }
        }
        //声明构建的项目类型,这里当然是android了
        apply plugin: 'android'
        //设置编译android项目的参数
        android {
            compileSdkVersion 17
            buildToolsVersion "17"
         
            defaultConfig {
                minSdkVersion 8
                targetSdkVersion 17
            }
            //Android默认配置
            sourceSets {
                main {
                    manifest.srcFile 'AndroidManifest.xml'
                    java.srcDirs = ['src']
                    resources.srcDirs = ['src']
                    aidl.srcDirs = ['src']
                    renderscript.srcDirs = ['src']
                    res.srcDirs = ['res']
                    assets.srcDirs = ['assets']
                }
                //测试所在的路径,这里假设是tests文件夹,没有可以不写这一行
                instrumentTest.setRoot('tests')
            }
             
            //这个是解决lint报错的代码
            lintOptions {
                abortOnError false
            }
            /**
             * 签名设置
             */
            signingConfigs {
                myConfigs {
                    storeFile file("签名文件地址")
                    keyAlias "..."
                    keyPassword "..."
                    storePassword "..."
                }
            }
            /**
             * 混淆设置
             */
            buildTypes {
                release {
                    signingConfig signingConfigs.myConfigs
                    runProguard true
                    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                }
            }
            /**
             * 渠道打包(不同包名)
             */
            productFlavors {
                qqqq {
                    applicationId = '包名'
                }
                hhhhh {
                    applicationId='包名'
                }
            }
        }
        /**
         * .so文件的导入
         */
        task copyNativeLibs(type: Copy) {
            from fileTree(dir: 'libs', include: 'armeabi/*.so') into 'build/lib'
        }
     
        tasks.withType(Compile) {
            options.encoding = "UTF-8"
        }
         
        tasks.withType(Compile) {
            compileTask -> compileTask.dependsOn copyNativeLibs
        }
        clean.dependsOn 'cleanCopyNativeLibs'
        tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
            pkgTask.jniFolders = [new File(buildDir, 'lib')]
        }
        //依赖库
        dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        }

    本地依赖

    gradle 作为构建工具,能够很方便的使用本地jar包,以下为使用的代码块。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    dependencies {
            //单文件依赖
        compile files('libs/android-support-v4.jar')  
        //某个文件夹下面全部依赖
        compile fileTree(dir: 'libs', include: '*.jar')
    }
     
    android {
         
    }

    gradle 同时支持maven,ivy,由于ivy我没用过,所以用maven 作为例子,以下为代码块:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    repositories {
            //从中央库里面获取依赖
        mavenCentral() 
        //或者使用指定的本地maven 库
        maven{
            url "file://F:/githubrepo/releases"
        }  
        //或者使用指定的远程maven库
        maven{
            url "远程库地址"
        }
    }
     
    dependencies {
            //应用格式: packageName:artifactId:version
        compile 'com.google.android:support-v4:r13'}
     
    android {
     
    }

    android library 依赖

    对于项目依赖 android library的话,就不是依赖一个jar,那么简单了,在这里需要使用gradle mulit project 机制。在过去,android library并没有一个很好的包管理方式,简单来说,在gradle出现以前,官方并没有一种用于管理android library 依赖包的方式,一般我们都是直接下载别人的android library project 源码进行集成,而对于第三方的android-maven-plugin 用的是apklib 格式。

    而现在,官方终于推出一种android library的打包格式,扩展名为*.aar。前面提到,目前android gradle插件并不支持本地直接使用*.aar文件,不过,支持包管理库的引用方式,下面,我为大家说一下,怎么对android library 发布使用。

    打包android library

    对android library 进行打包直接在library项目下面使用gradle build 即可,然后,你就会在 build/libs 目录下看到两个*.aar文件,一个debug包用的,一个是release 下用的,看个人需求使用,这里我们用的是release 版本的 .aar 文件。

    引用脚本跟前面讲的依赖库相似

    1
    2
    3
    dependencies {
        compile(name: 'pulltorefresh', ext: 'aar')
    }

    最后,分享个maven库地址:http://mvnrepository.com/

    ---------------------------------------------------------------------------------------------------------------------------------------------------------

    buildscript{}

    Configures the build script classpath for this project. 说白了就是设置脚本的运行环境

    repositories{}

    Returns a handler to create repositories which are used for retrieving dependencies and uploading artifacts produced by the project. 大意就是支持java 依赖库管理(maven/ivy),用于项目的依赖。这也是gradle 强力的地方。。。

    dependencies{}

    The dependency handler of this project. The returned dependency handler instance can be used for adding new dependencies. For accessing already declared dependencies, the configurations can be used. 依赖包的定义。支持maven/ivy,远程,本地库,也支持单文件,如果前面定义了repositories{}maven 库,使用maven的依赖(我没接触过ivy。。)的时候只需要按照用类似于com.android.tools.build:gradle:0.4,gradle 就会自动的往远程库下载相应的依赖。

    apply plugin:

    声明构建的项目类型,这里当然是android了。。。

    android{}

    设置编译android项目的参数,接下来,我们的构建android项目的所有配置都在这里完成

    ndroid {
    
        compileSdkVersion 17
        buildToolsVersion "17"
    
        defaultConfig {
            minSdkVersion 8
            targetSdkVersion 17
        }
        sourceSets {
            main {
                manifest.srcFile 'AndroidManifest.xml'
                java.srcDirs = ['src']
                resources.srcDirs = ['src']
                aidl.srcDirs = ['src']
                renderscript.srcDirs = ['src']
                res.srcDirs = ['res']
                assets.srcDirs = ['assets']
            }
    
            instrumentTest.setRoot('tests')
        }
    }
    

    接着在命令行cd 到项目目录下

    例如: cd e:workplaceandoridGradle

    如果你是第一次使用gradle 构建android项目建议你先使用gradle clean 把android gradle 插件,还有相关依赖包下载下来并且对环境进行初始化,如果出错了,一般可能是下载超时,试多几次即可,最后你会看到如下提示:BUILD SUCCESSFUL

    完成以上的步骤,就可以正式使用gralde 构建你的android项目了。

    然后使用gradle build 就完成了android 项目的构建了。如果,你是照着以上步骤走的话,你将会想项目目录里面看到一个build 的目录,里面就是用gradle 构建android项目的全部例如了,结构目录看附录。

    最终打包的apk 就在build/apk 目录下了。然后,你会发现,两个apk 一个是 [项目名]-debug-unaligned [项目名]-release-unsigned

    如果以上内容你都掌握的话,接下来就将详细说说如何利用gralde 打包android apk。

    看附录 默认输出 release apk 是没有签名的,那么我们需要签名的很简单,只需要在android{}里面补充加上加上即可。完整build.gradle 请点击我的gist

    build.gradle

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    signingConfigs {
       myConfig{
         storeFile file("gradle.keystore")
        	storePassword "gradle"
        	keyAlias "gradle"
        	keyPassword "gradle"
        }
    }
        
       buildTypes{
         release {
        	signingConfig  signingConfigs.myConfig
         } 
       }
     
    

    然后,运行gradle clean gradle build ,这次在build/apk 你看到了多了一个[项目名]-release-unaligned, 从字面上面我就可以知道,这个只是没有进行zipAlign 优化的版本而已。而[项目名]-release 就是我们签名,并且zipAlign 的apk包了. ###打混淆包### 只需要在原来的基础上加上,完整的proguad.gradle 代码 build.gradle

    1
    2
    3
    4
    5
    6
    7
    8
    
    buildTypes{
       release {
       signingConfig  signingConfigs.myConfig
         runProguard true
         proguardFile 'proguard-android.txt'
       }
    }
    
    

    gradle clean

    gradle build

    现在来解释一下上一节的问题,apk目录下的两个apk 的含义

    为什么产生了两个apk?

    默认的android gralde 插件定义了两种apk 的类型debugrelease,这两种类型的详细对比看附录。

    这个是android gralde 插件 buildTypes{} 方法产生的,默认配置好了两个默认模板,当然你也可以修改,前面我们就是在修改默认的release 的配置,让输出release类型的的apk,具有签名和混淆。

    对于多渠道包,android 插件提供了一个名为Product Flavor{} 的配置,用于进行多渠道打包。

    例如,我的android应用有海外版,和国内版本,而且这两个版本的包名是不一样的!!(我就举两个市场的例子安装这个思路,你要打包100个不同的市场只是几行代码的事情。)。

    你只需要在android{} 补充上

    build.gradle

    1
    2
    3
    4
    5
    6
    7
    8
    
    productFlavors {
    	playstore {
    			packageName='com.youxiachai.androidgradle.playstore'
    	}
    	hiapk {
    			packageName='com.youxiachai.androidgradle.amazonappstore'
    	}
    }
    

    然后gradle clean,gradle build,在build/apk 下面你会看到一堆的包,命名格式[项目名]-[渠道名]-release

    仅此而已?

    Product Flavor{} 不只是能改包名那么简单,还能够对编译的源码目录进行切换。

    什么意思? 不知道各位有没有用过友盟做用户统计,如果,你用的是分发渠道分析,你需要修改AndroidManifest.xml 添加上 <meta-data android:value="hiapk" android:name="UMENG_CHANNEL"/>

    如果,你很多渠道,,然后你就会很痛苦,现在用gradle 就非常舒服,你只需要在android.sourceSets指定我们的渠道名就行,android gradle 插件,会自动打包!!!例如

    build.gradle

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }
            
        hiapk {
          	manifest.srcFile 'hiapk/AndroidManifest.xml'
        }    	
           	playstore {
           		manifest.srcFile 'hiapk/AndroidManifest.xml'
        }
           
    	instrumentTest.setRoot('tests')
            
    }
    

    然后运行gradle clean,gradle build,省下的时间去喝杯咖啡,睡个觉什么的都好。。。 ###外部依赖### android gradle 对于外部jar 包的应用支持maven/ivy 管理的包,也支持指定具体文件,前面已经在上文说过。上面演示的完整 build.gradle gist 里面也有写。你需要加上如下代码即可: build.gradle

    1
    2
    3
    
    dependencies {
    	compile files('libs/android-support-v4.jar')
    }
    
    • debugrelease,这两种类型的默认配置如下:

       Property name  Default values for debug  Default values for release / other
       debuggable  true  false
       jniDebugBuild  false  false
       renderscriptDebugBuild  false  false
       renderscriptOptimLevel  3  3
       packageNameSuffix  null  null
       versionNameSuffix  null  null
       signingConfig  android.signingConfigs.debug  null
       zipAlign  false  true
    • defaultConfig {} 配置参数列表

       Property Name  Default value in DSL object  Default value
       versionCode  -1  value from manifest if present
       versionName  null  value from manifest if present
       minSdkVersion  -1  value from manifest if present
       targetSdkVersion  -1  value from manifest if present
       packageName  null  value from manifest if present
       testPackageName  null  app package name + “.test”
       testInstrumentationRunner  null  android.test.InstrumentationTestRunner
       signingConfig  null  null
       runProguard  false  false
       proguardFile   'proguard-android.txt' or 'proguard-android-optimize.txt'   'proguard-android.txt' or 'proguard-android-optimize.txt'
    • build 结构目录

      tree
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      71
      72
      73
      74
      75
      76
      77
      78
      79
      80
      81
      82
      83
      84
      85
      86
      87
      88
      89
      90
      
      build/
      ├── apk
      ├── assets
      │   ├── debug
      │   └── release
      ├── classes
      │   ├── debug
      │   │   └── com
      │   │       └── example
      │   │           └── gradle
      │   └── release
      │       └── com
      │           └── example
      │               └── gradle
      ├── dependency-cache
      │   ├── debug
      │   └── release
      ├── incremental
      │   ├── aidl
      │   │   ├── debug
      │   │   └── release
      │   ├── dex
      │   │   ├── debug
      │   │   └── release
      │   ├── mergeAssets
      │   │   ├── debug
      │   │   └── release
      │   └── mergeResources
      │       ├── debug
      │       └── release
      ├── libs
      ├── manifests
      │   ├── debug
      │   └── release
      ├── res
      │   ├── all
      │   │   ├── debug
      │   │   │   ├── drawable-hdpi
      │   │   │   ├── drawable-mdpi
      │   │   │   ├── drawable-xhdpi
      │   │   │   ├── drawable-xxhdpi
      │   │   │   ├── layout
      │   │   │   ├── menu
      │   │   │   ├── values
      │   │   │   ├── values-sw720dp-land
      │   │   │   ├── values-v11
      │   │   │   └── values-v14
      │   │   └── release
      │   │       ├── drawable-hdpi
      │   │       ├── drawable-mdpi
      │   │       ├── drawable-xhdpi
      │   │       ├── drawable-xxhdpi
      │   │       ├── layout
      │   │       ├── menu
      │   │       ├── values
      │   │       ├── values-sw720dp-land
      │   │       ├── values-v11
      │   │       └── values-v14
      │   └── rs
      │       ├── debug
      │       └── release
      ├── source
      │   ├── aidl
      │   │   ├── debug
      │   │   └── release
      │   ├── buildConfig
      │   │   ├── debug
      │   │   │   └── com
      │   │   │       └── example
      │   │   │           └── gradle
      │   │   └── release
      │   │       └── com
      │   │           └── example
      │   │               └── gradle
      │   ├── r
      │   │   ├── debug
      │   │   │   └── com
      │   │   │       └── example
      │   │   │           └── gradle
      │   │   └── release
      │   │       └── com
      │   │           └── example
      │   │               └── gradle
      │   └── rs
      │       ├── debug
      │       └── release
      └── symbols
          ├── debug
          └── release
      88 directories
  • 相关阅读:
    导入.txt数据
    struts1与struts2
    居中问题
    JavaScript创建对象的几种方式
    json
    react模拟后端接口及提交方式
    react受控组件
    react中数据承载props和state用法
    react组件间的通信父子通信,子父通信,兄弟通信
    react模拟后端接口及提交方式 jsonserver
  • 原文地址:https://www.cnblogs.com/liangouyang/p/4810279.html
Copyright © 2020-2023  润新知