记录gradle命令行打包apk

时间:2021-11-20 17:40:18

出于接下来的对app进行dex分包准备,这两天专门看了下用gradle命令行进行apk的签名和打包。

之前本人一直使用adt的右键export功能进行给app打包和签名的(很不够逼格),因为没用过android studio,所以对gradle了解甚微。前段时间boss让我想想,在app应用功能越来越庞大的趋势下,有些功能是给特定用户的用的,不一定全部打包进一个apk里面,所以想到了1.插件化;2.dex分包,插件化已经搞通了,dex分包貌似需要在配置文件里面配置相关参数,然后用gradle进行分包,这些是题外话啦,自行百度。

于是我就来 熟悉下gradle,不想用android studio先,虽然各种头衔,什么谷歌主推啊界面酷炫啦。好吧,那我就用命令行进行gradle打包,摸索了两天,记录如下:

1.将原有eclipse下面的安卓项目导出为gradle配置项目,项目-》右键-》export-》Generate Gradle build files;

记录gradle命令行打包apk

2.在选择需要导出为gradle的项目时,只选择自己的主项目,依赖项目不要选,系统会帮你自动找出来的;

3.然后在最后一步的时候勾选这个记录gradle命令行打包apk,目的是生成各种配置文件;

ok,已经生成了gradle需要的配置文件,比如build.gradle,settings.gradle 什么的,一应齐全。你以为现在就可以运行gradle build了吗?大错特错。

先看sdk的导出为gradle给我的项目带来了什么文件或目录,看图:

记录gradle命令行打包apk

gradle-wrapper.properties,你可以修改需要的gradle版本

build.gradle中配置打包过程的一些参数

settings.gradle配置了项目的依赖


最最主要的就是build.gradle,配置了相当多的东西,本人也是在里面进了许多坑,默认的东西就不用改了:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'
    }
}

主要是添加自己的东西,在我的项目里面,我添加了另外两个个节点,dependencies{}, android{},一个是依赖节点,一个是打包过程配置节点,一开始不知道要增加这些,躺了不少坑。不多说,先看看配置:

dependencies {
compile files('libs/AMap_3DMap_V2.2.1.jar')
compile files('libs/Android_2DMapApi_V2.5.0.jar')
compile files('libs/Android_Location_V1.3.3.jar')
compile files('libs/Android_Services_2.2.0.jar')
compile files('libs/android-support-v4.jar')
compile files('libs/easemobchat_2.2.2.jar')
compile files('libs/fastjson-1.1.33.jar')
compile files('libs/jpush-sdk-release1.7.5.jar')
compile files('libs/nineoldandroidslib.jar')
compile files('libs/umeng_sdk.jar')

compile project(':androidLibs:myLibProject')
}

fils里面是依赖包,其实可以简写用*号代替

project里面是lib项目的导入


再看看android几点里面的配置:

android {
compileSdkVersion 19
buildToolsVersion "19.1.0"


//签名
    signingConfigs {
        myConfig {
            storeFile file('')//证书路径,可以是绝对路径也可以相对路径
            storePassword ''//证书密码
            keyAlias ''//证书名称
            keyPassword ''
        }
    }
    buildTypes{
    release {
    signingConfig  signingConfigs.myConfig//在release使用上面的证书配置

}
    
lintOptions {
abortOnError false//lint编译时给的建议,就是lint有错时不退出编译
}
packagingOptions {
exclude 'META-INF/NOTICE.txt'//本人打包时多个项目的,重复复制这个文件到apk或出错,所以配置这个属性
}
packagingOptions {
exclude 'META-INF/LICENSE.txt'//同上
}
defaultConfig {
minSdkVersion 8
targetSdkVersion 20
}
sourceSets {
main {

//项目文件、目录配置
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
jniLibs.srcDir(['libs'])//特别指出,这个是用来编译so文件的
}


instrumentTest.setRoot('tests')
}
}


坑总结:

1.sdk版本太低,更改build.gradle的

android {
compileSdkVersion 19
buildToolsVersion "19.1.0"

}

属性


2.强烈建议网络可以访问墙外网站,使用vpn*软件都可以,因为build的时候会下载一些gradle的依赖文件

3.资源文件中不能有重名的属性,比如定义两个名字为testStr的字符串资源


4..9图片最起码需要左上两边要有黑线,不然会报错


5.依赖项目的相关activity不能同时有<action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />属性,不然打出来的apk安装后会有两个启动图标


6.编译使用的sdk路径在local.properties文件中定义,比如我的sdk.dir=C\:\\Users\\Luo\\AppData\\Local\\Android\\sdk


大概就是这么多,希望共同学习