首先,网上大部分的开发资料都是教我们如何去在android studio上怎么离线开发。这个我也总结下流程。
1.点到preferences->build tools->gradle 下有一个 offline working 如图
2.运行的时候会出现各种乱七八糟的问题。
简单列下碰到的几个问题和对应解决办法:(注:我的工程是从eclipse转换过来)
2.1 出现各种方法找不到的情况
一般是由于方法数超过了65535 导致解决办法:
2.1.1defalultConfig中增加一句 multiDexEnabled true 。
2.1.2然后对应在你继承了的Application中覆盖父类的方法attachBaseContext(Context con)方法。调用super方法之后需要调用 MultiDex.install(this).
2.1.3 需要添加android-support-multidex.jar的依赖。
具体解决办法可以参考http://blog.csdn.net/yuanzeyao/article/details/41809423
2.2 出现9patch的图片异常问题。
解决办法,直接在as里面可以对9patch图片进行直接修改,可以勾选show bad patches 看看这个九宫格的问题,实际上是因为9patch图片转过来,拉升的属性丢失,需要重新设置。
2.3 jni丢失
解决办法:在 sourceSets.main里面设置 jniLibs.srcDirs = ['libs'] 这样的话不用切换之前so所在文件的位置。
2.4 还有一些小问题,基本上都是可以直接谷歌解决了。
到重点了:
离线编译android工程
首先,gradle的编译过程是相对简单很多的。基本上AS下的gradle.build就已经做好了编译工作了,我们要做的,就是把这个编译环境配置好,用于离线打包。
在线的情况下,我们只需CD到对应主工程(Module)目录,注意不是project目录。这个目录下面直接调用 gradle build(gradle的环境搭建相对简单,直接跳过)。
但是在离线情况调用,就会出现
http://bbs.csdn.net/topics/391927983?page=1#post-401003857
connection to https://jcenter.bintray.com refused. 一看这个错误大概也知道这个过程是依赖联网的。
然后还好有个大神出现,只需要gradle build --offline加上后面的离线参数即可执行离线编译了。
但是又出现了一个问题。
不能解析在project下面build.gradle 配置的gradle插件版本。很奇怪,为什么在AS下没问题,但是在离线编译的时候就出现cannot resolve呢?
于是出现了
解决办法1:
下载maven,配置好maven环境,搭建maven本地仓库,将对应的jar发布到本地仓库,gradle.build脚本中将本地路径配置。
http://www.coderli.com/gradle-maven-local-repositories/
http://blog.csdn.net/mao520741111/article/details/48374367
参考该博文。
http://wiki.jikexueyuan.com/project/gradle/dependency-management-basics.html wiki说明。
解决办法2:
将对应的mavencentral() 调整为 mavenLocal之后,出现了在 某某文件夹下找不到某个文件的提示。如图
如果有外网的情况,可以调用一次在线build。这样会在 c://users/xxx/下面生成一个.m2的隐藏文件夹,这样可以将这个文件夹拷贝到内网对应的文件夹。
当然这个还是可能会出现某些文件找不到的情况,只需要找到android studio中xxx\gradle\m2repository文件夹,拷贝对应的文件夹或者文件到对应目录。因为他编译都是依赖你的AS来生成的。这样就可以正常编译了。
总结下,gradle大法确实好,但是用起来不是那么简单。还是得去看看关于gradle的各方面概念,最好那本书来看看,了解他的编译过程都如何做的,这样出现某些编译问题也能够及时解决。