Gradle 构建 android项目及APK打包(ubuntu)


Gradle介绍

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。
Gradle环境配置
因本文是介绍在ubuntu下gradle构建android项目,故在此只介绍ubuntu环境下的配置。首先gradle在ubuntu官方也是有文件可以下,但版本太过陈旧,连Android Studio的 jcenter方法都不支持。如果强行编译,会出以下错误:
Could not find method jcenter()for arguments [] on repository container.
所以不要用sudo apt-get install gradle来安装 gradle,如果安装了,要用 sudo apt-get remove gradle卸载掉。

下载

下载地址为:
http://www.gradle.org/downloads(官方)
http://services.gradle.org/distributions(直接点)

安装

复制下载的gradle-2.10-all.zip(假设你下载的是此版本)到~下,并在当前目录下解压:

 sudo unzip gradle-2.10-all.zip -d/opt/gradle/
 sudo vim /etc/profile
在末尾添加:
exportGRADLE_HOME=/opt/gradle/gradle-2.10
exportPATH=$GRADLE_HOME/bin:$PATH
然后重启:
 sudo reboot
 gradle -v

你就能看见下列信息:

------------------------------------------------------------
Gradle 2.10
------------------------------------------------------------


。。。。。。

看见gradle 2.10就表示已经配置成功。

构建android项目

到上一步为止准备工作已经做好!,下面我们就进行android项目的构建。我们知道在AS上新建一个新的android一般需要三个gradle配置文件,分别是根目录下的 build.gradle、settings.gradle 和 app 目录下的 build.gradle 文件,前两个文件配置比较简单,后文会一一介绍。我们的项目构建大体上适合AS产生的这三个文件是一致的。首先我们来看构建项目最最重要的一个build.gradle 需要的都加了注释,加深理解。

apply plugin:'com.android.application'
//表示该module是一个app module,应用了com.android.application插件
android {
    compileSdkVersion 24
//基于哪个SDK编译,这里是APILEVEL,是24
    buildToolsVersion "24.0.2"
//基于哪个构建工具版本进行构建的
    defaultConfig {
        applicationId"com.xx.xx.info"//包名
        minSdkVersion 21
        targetSdkVersion 24
        versionCode 1 //版本号
        versionName "1.0" //版本名称
    }
    buildTypes { //构建类型
        release {
//常用的有release和debug两种,可以在这里面启用混淆,启用zipAlign以及配置签名信息等
    proguardFilesgetDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
dependencies {
//就不属于Android专有的配置了,它定义了该module需要依赖的jar,aar,jcenter库信息
    compile fileTree(dir: 'libs', include:['*.jar'])
    testCompile 'junit:junit:4.12'
    compile'com.android.support:appcompat-v7:24.2.0'
}

这个文件对全新的项目来说会包含三部分

  • apply plugin 声明
  • android {} 节点
  • dependencies {} 节点

apply plugin 声明

最顶部有一行代码是这样的:

apply plugin: ‘com.android.application’

代表该项目是一个 Android 项目,而且一个 Android 项目只有一句这个声明,别问为什么这样写,这是规范。 在旧的版本中一般用’android’来表示。但最新使用’com.android.application’,建议替换。
有了这个文件之后我们还需要jdk环境以及sdk环境。先来看sdk环境:

## This file is automaticallygenerated by Android Studio.
# Do not modify this file -- YOURCHANGES WILL BE ERASED!
#
# This file must *NOT* be checkedinto Version Control Systems,
# as it contains informationspecific to your local configuration.
#
# Location of the SDK. This isonly used by Gradle.
# For customization when using aVersion Control System, please read the
# header note.
#Mon Sep 12 14:49:02 CST 2016

ndk.dir=/home/xxx/Sdk/ndk-bundle
sdk.dir=/home/xxx/Android/Sdk

感觉是不是很熟悉,没错就是AS新建项目中根目录下的local.properties文件。我们只需要把AS里面的这个文件拷过来就行。
至于jdk环境看你的具体情况。先编译,如果报jdk错误就有三种解决办法:

第一:在你的build.gradle里面的android属性里添加

compileOptions { 
sourceCompatibilityJavaVersion.VERSION_1_7 
targetCompatibilityJavaVersion.VERSION_1_7 
}  

第二:在gradle.properties中添加
org.gradle.java.home=your jdk path

第三:带参数的命令行形式
gradle build -Dorg.gradle.java.home=’yourjdk path’

可根据不同版本酌情处理。第二条未曾尝试,不知是否有效。因为开发中个人不可能只有一个jdk版本,故建议使用第三条。方便灵活。
接下来还有一个重要的文件就是gradle环境配置。即另一个build.gradle(注:此处这个是在你项目的根目录下的环境配置,上一个是你app的相关配置,应放在/app/下)

buildscript {
//设置脚本的运行环境
    repositories {
//支持java依赖库管理(maven/ivy),用于项目的依赖。这也是gradle 强力的地方
        jcenter()
    }
    dependencies {
//依赖包的定义
        classpath'com.android.tools.build:gradle:2.0.+'
    }
}
allprojects {
    repositories {
        jcenter()
    }
}
task clean(type: Delete) {
    delete rootProject.buildDir
}

这些都是格式化的东西,打开你的AS你会发现差不多,没多大区别。不过在依赖包这边com.android.tools.build:gradle:版本很多,你要视情况来写。如果是2.10的环境那么这边可以写2.0.x-2.2.x,避免麻烦直接写2.0.+ 。
最后你需要settings.gread这个文件把你根目录里的和app下的两个build.gradle联系起来。内容如下:

include ‘:app’

那么整理一下,到现在你的项目根目录里有app文件夹和build.gradle、local.properties、settings.gradle三个文件。app文件下下就是你的src文件和一个build.gradle文件。

打包APK

cd到你的项目根目录下进行以下命令

$ gradle clean

如果是第一次使用gradle构建,则会下载相关依赖包并且对环境进行初始化,最后你会看到如下提示:BUILD SUCCESSFUL此时你会发现在根目录下多了一个隐藏文件.gradle。这个就是你的gradle环境的相关依赖包。接着执行:

$ gradle build

这个命令就是你项目的构建,如果成功的话你就可以在你的app路径里outputs文件夹下发现生成个三个app。看名字就猜到一个是调试模式没有进行优化的apk,一个是release模式但没有签名的apk。还有一个debug版的。

打签名包

默认输出 release apk 是没有签名的,那么我们需要签名的很简单,只需要在android{}里面补充加上如下代码即可。
Debug {
versionNameSuffix”-debug1”
signingConfig signingConfigs.debug
}
release {
storeFilefile(“debug.keystore”)
storePassword “android”
keyAlias”androiddebugkey”
keyPassword “android”
}
假设你已经有一个keystore并且把它放到app路径下别名是androiddebugkey 密码是android。你还需要在buildTypes{release{}}里面加上:

signingConfigsigningConfigs.debug
signingConfigsigningConfigs.release

此处debug和release名字可以随便指定,只要相互对应就好。继续运行以下命令:

gradle clean
gradle build

可以得到签名以后的apk。

生成.keystore

上面介绍了通过.keystore打包apk。那么我们怎样得到一个.keystore文件呢。keytool 给我们提供了一些工具让我们可以直接在ubuntu上通过指令来得到。来看下面的命令。

keytool -genkey -aliasandroid.keystore -keyalg RSA -validity 20000 -keystore android.keystore

  • -validity 20000代表有效期天数
  • -alias android.keystore 生成的别名叫android.keystore

运行上面命令系统就会提示你输入姓名、组织等等一些必要的信息。最终就会在当前目录下得到 .keystore这个文件。然后就可以愉快的打包有数字签名的apk了。

猜你喜欢

转载自blog.csdn.net/qq_33717425/article/details/52882266