gradle批量打包脚本总结

最近要从公司离职,空闲时间较多,于是想到把最近一段时间做的东西进行总结汇总。年初的时候,公司人员变动比较大,整个客户端研发就剩下我自己一个还在,其他都离职了。公司让我接手Android开发,在接手的时候,对于我们内部使用ant进行打包以及使用eclipse不是很习惯,于是我将整个项目迁移到了官方最新的Android studio,打包发布也使用gradle进行。折腾了两三天,最终搞定了这个脚本。脚本支持批量打包,以及批量更改渠道号等。


由于后续最近一段时间我已经不再从事方面Android的开发,google升级最新的Android studio之后,变动也比较大,我自己把脚本改动了一下,并把这个脚本放在了github上面,https://github.com/lihei12345/android_gradle_script,欢迎大家提意见一起交流


======================================================================

Android studio 1.0 RC更新

在更新为最新的Android studio 1.0之后发现脚本无法进行build,发现几个问题,把脚本更新了一下

1. Error:(26, 0) Gradle DSL method not found: 'runProguard()'问题,这里是runProguard()方法被替换了,把runProguard改为minifyEnabled即可,http://stackoverflow.com/questions/27016385/error26-0-gradle-dsl-method-not-found-runproguard

2. “Could not find property 'packageApplication' on com.android.build.gradle.internal.api.ApplicationVariantImpl_Decorated”问题,这个属性被取消了,这里是替换要输出的APK的名称,http://stackoverflow.com/questions/27209188/could-not-find-property-packageapplication-on-com-android-build-gradle-interna 

3. “Could not find property 'processManifest' on com.android.build.gradle.internal.api.ApplicationVariantImpl”问题,这里是由于manifest merger改动了,解决方法如下:http://stackoverflow.com/questions/27302965/could-not-find-property-processmanifest-on-com-android-build-gradle-internal-a 

4. android studio中的plugin也发生了改变,将"apply plugin: 'android'"改为"apply plugin: 'com.android.application'"


======================================================================

常见问题

1. 类似Xcode中target的实现方式,实现一个项目多个应用打包,http://blog.csdn.net/colorapp/article/details/41778043 

2. 在build.gradle的sourceSets.main中增加一个值,即:jniLibs.srcDirs = ['xxx'] ,即可以把so文件打包到apk中 

3. 提示"duplicate files.....", 原来是各种版权文件等打包的时候冲突,https://stackoverflow.com/questions/20673625/android-gradle-plugin-0-7-0-duplicate-files-during-packaging-of-apk
android {
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/dependencies.txt'
        exclude 'META-INF/LGPL2.1'
    }
}

4. apk输出包重命名,http://stackoverflow.com/questions/27209188/could-not-find-property-packageapplication-on-com-android-build-gradle-interna 

5. xml中乱码的问题,我们的xml文件中还有一些中文注释,使用下面的方法修改了编码为"UTF-8",不过还是有问题,最后改为应为才解决,tasks.withType(JavaCompile) { options.encoding = "UTF-8" },http://stackoverflow.com/questions/18800614/how-to-set-charset-of-gradle ,http://stackoverflow.com/questions/18332474/how-to-set-versionname-in-apk-filename-using-gradle

6. 动态生成productFlavors,使用这个方法让我们可以从一个文件中读取渠道文件,可以直接从文件中读取,然后打包的时候不用更改脚本即可,http://stackoverflow.com/questions/20976946/dynamically-generating-product-flavors 

7.  关于签名设置的问题,参考下面资料2,这样做的好处是可以不用在脚本中写密码等敏感信息,通过配置文件就可以实现

8. 群友火火提供的一个问题以及解决答案,eclipse中Build Path-Add to Build Path对应到android studio的设置,即只引用代码包但是并不编译代码包,适合于需要使用android中隐藏API的场景,http://blog.csdn.net/asmcvc/article/details/40542501


======================================================================

参考资料

  1. http://tools.android.com/tech-docs/new-build-system,官方文档
  2. http://meedamian.com/post/publishing-with-gradle,这个国外大牛的文章,关于脚本签名部分的内容就来自于这里
  3. http://my.oschina.net/uboluo/blog/157483,这个例子是被umeng官方打包工具推荐的脚本,里面还讲了jekins集成,值得学习


你可能感兴趣的:(gradle批量打包脚本总结)