zoukankan      html  css  js  c++  java
  • Gradle 初次使用

    心静志远 | 技术会被淘汰,但思想会一直永存(多思考,多总结,多分享)

    Gradle的简介,这里就不罗嗦了,Google上一大堆,这里就说说它的基本使用吧(可以简单的理解为它是Maven的高级版本,没那么神秘)。

    基本使用流程:

    1. 下载 Gradle 到本地,并配置环境变量。

    2. 在项目中创建 build.gradle文件

    3. 编写 build.grade 脚本

    4. 执行grade 命令

    快捷使用方法:

    下载Android Studio,让它帮我们搞定一切。

    指定依赖:

    1. 依赖仓库中的jar

    1 compile 'group:name:version'

    2. 依赖本地jar文件夹

    1 compile fileTree(dir, 'libs' ,include : '*.jar')

    3. 依赖本地单个jar文件

    1 compile file('libs/xxx')

    3. 依赖工程

    1 compile project(:xx:xx)

    4. Android library依赖

    需要把库的build.gradle文件中apply plugin: ‘android’ 改为 apply plugin: ‘android-library’ ,否则会报以下错误:

     Gradle Error – Duplicate Files copied in APK AndroidManifest.xml

    仓库配置:

    1. 从中央仓库下载:mavenCentral()

    2. 使用本地Maven仓库:maven {  url “file://F:/githubrepo/releases”      }

    3. 指定远程仓库:maven{url “https://xxx”}

    多项目管理

    1. 加入我们的项目结构如下:

    MyProject/

    + app/

        + libraries/

             + lib1/

             + lib2/

    2. 外层根配置setting.gradle ,引入各个项目

    include ‘:app’, ’:libraries:lib1′, ’:libraries:lib2′

    3. 每个项目会包含一个build.gradle文件声明该项目的编译过程

    MyProject/

    | settings.gradle

    + app/

        | build.gradle

    + libraries/

    + lib1/

                | build.gradle

           + lib2/

                | build.gradle

    4. 随后我们需要在:app这个项目中指名所依赖的项目

    dependencies {

    compile project(‘:libraries:lib1′)

    compile project(‘:libraries:lib2′)

    }

    Android 项目的Gradle编译:

    我们通常会在build.gradle中配置 依赖的gradle的版本、android编译版本、android构建工具版本,这三者配置的跟本地存在的有不一致就会导致gradle build失败。

    1. gradle版本依赖配置如下:

    classpath ‘com.android.tools.build:gradle:0.12.+’

    我们需要查看我们本地安装的gradle的版本是否大于等于此版本号。(Android Studio推荐使用0.12+,所以推荐使用Android Studio,它会帮助我们下载响应版本的Android Studio)

    2. android编译版本

        compileSdkVersion 19

    确保本地SDK中已近下载了相应版本的SDK API

    3. android构建工具版本

    buildToolsVersion “19.1.0″

    对于android编译版本,同样推荐使用Android Studio,我们通过Gradle编译,如果版本不匹配,它会提示无此版本工具,并提示下载,当然你也可以到SDK中手工下载(不推荐)。

    Android studio 中 使用 gradle 加载本地 .so 库:

    方法一:添加自定义任务:
    01 task nativeLibsToJar(type: Zip, description: 'create a jar archive of the native libs') {
    02     destinationDir file("$buildDir/native-libs")
    03     baseName 'native-libs'
    04     extension 'jar'
    05     from fileTree(dir: 'libs', include: '**/*.so')
    06     into 'lib/'
    07 }
    08  
    09 tasks.withType(Compile) {
    10     compileTask -> compileTask.dependsOn(nativeLibsToJar)
    11 }

    上面的意思是,在编译的过程中加入nativeLibsToJar任务,这个任务先在构建目录中新建了一个native-libs的文件夹,然后进行重命名为native-libs.jar,将so文件都加入到jar文件中。

    方法二:手动生成.Jar文件后自动解包到apk文件

    这个方式需要自己手动进行.SO文件压缩,具体步骤为:将所有需要使用的.so文件压缩为.zip文件(zip中的文件目录结构为: lib/armeabi/*.so)然后把zip文件后缀改为.Jar然后放到libs生成apk就ok

    方法三:Gradle官方在新版已经自动实现了打包.SO文件

    在sourceSets -> main 中加入一下代码:

    jniLibs.srcDirs = ['libs']

    这样就不需要手动拷贝了。我的项目是多工程依赖,android-library工程中含有so文件,采用方法一,打出的App包中无法加载so文件,哭呀,由于项目才用了黑匣子,这个问题排查了好几天,shite,所以推荐Android项目加载so文件都使用jni的方式。

    参考:http://blog.csdn.net/qiujuer/article/details/24209457

    在dependencies 中加入编译后的jar包:
    1 dependencies {
    2     compile fileTree(dir: 'libs', include: ['*.jar'])
    3     compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')
    4 }

    参考:http://stackoverflow.com/questions/16683775/include-so-library-in-apk-in-android-studio

    使用Gradle 对android lib进行打包,打出可依赖的jar:

    android.libraryVariants.all { variant ->
        def name = variant.buildType.name
        def task = project.tasks.create "jar${name.capitalize()}", Jar
        task.dependsOn variant.javaCompile
        task.from variant.javaCompile.destinationDir
        task.from configurations.compile.findAll {
            it.getName() != 'android.jar' && !it.getName().startsWith('junit') && !it.getName().startsWith('hamcrest')
        }.collect {
            it.isDirectory() ? it : zipTree(it)
        }
        artifacts.add('archives', task);
    }

    备注:

    生成的lib文件夹有时候可能在Android Studio中看不到,所以建议采用打问文件目录的方式产看生成的jar文件。

  • 相关阅读:
    Sqli-labs Less-47 order by后的注入
    Sqli-labs Less-46 order by后的注入
    Sqli-labs Background-9 order by后的injection
    Sqli-labs Less-45 堆叠注入
    jsp,servlet知识点
    jsp页面编码不统一可能会出问题
    jsp页面找不到,jsp页面乱码
    BZOJ 2843: 极地旅行社 lct splay
    2018/3/23 省选模拟赛
    bzoj 4573: [Zjoi2016]大森林 lct splay
  • 原文地址:https://www.cnblogs.com/seven1979/p/4346096.html
Copyright © 2011-2022 走看看