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

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文件。

posted on 2015-03-18 00:44  Seven1979  阅读(11783)  评论(0编辑  收藏  举报