gradle

标签: gradle

gradle编译完成后上传apk

项目中有个需求想本地编译完成自动上传release 的apk到服务器,因为功能比较简单,不想借助第三方来实现,这是个我自定义gradle task来上传apk的例子。 自定义task task apkUpload(type: Exec, dependsOn: ['assembleRelease']) { def version = project.android.defaultConfig.versionName def apkPath = "$buildDir/outputs/apk/release/app-release.apk" commandLine "curl", "-F", "apk=@$apkPath", "上传地址" } 创建了一个Exec类型的task, 依赖assembleRelease任务, 最后执行shell curl -f apk=@{文件路径} {上传路径} 来完成上传 服务器示例 (PHP Codeigniter) /** * 上传apk * @param $version */ public function

阅读全文...

让gradle task可以执行多次

在开发中遇到这个需求,google也没能找到答案,最后自己解决了,分享出来给大家参考参考。 默认情况下gradle的task都是只能执行一次的,如下面的代码 task a { println("execute function a !!!!!!!!!!!!!!!!!!"); } a.execute() a.execute() a.execute() 运行后发现task a仅仅执行了一次,为啥只执行一次呢,开始分析通过查看 AbstractTask::execute()方法如下 public final void execute() { this.getExecuter().execute(this, this.state, new DefaultTaskExecutionContext()); this.state.rethrowFailure(); } 通过观察发现是the.state的问题,state的类型是TaskStateInternal,里面记录了task当前的状态,executing正在执行,executed执行完成等等 知道这个状态影响了task多次执行,但是我们还是没有解决我们的问题,再来看看TaskExecuter类,TaskExecuter是一个接口,

阅读全文...

android gradle统计并输出各task耗时

在build.gradle添加一下代码,编程完成后会输出耗时>100ms的任务 public class BuildTimeListener implements TaskExecutionListener, BuildListener { private Clock clock private times = [] @Override void buildStarted(Gradle gradle) { } @Override void settingsEvaluated(Settings settings) { } @Override void projectsLoaded(Gradle gradle) { } @Override void projectsEvaluated(Gradle gradle) { } @Override void buildFinished(BuildResult result) { println "Task spend time:" for (time in times) { if (time[

阅读全文...

Android上传开源库到jcenter的一些经验教训

把库成功上传到jcenter后(上传过程下篇文章介绍),出现了一个很奇怪的问题,明明成功上传,为什么在代码中应用报错了? gradle 引用代码 compile ‘com.apkfuns.logutils:library:1.0.0’ 报错的内容 Error:(63, 13) Failed to resolve: com.apkfuns.logutils:library:1.0.0 但是我确定jcenter已经上传成功,在jcenter库中能看到详细信息。 http://jcenter.bintray.com/com/apkfuns/logutils/library/1.0.0/   尝试了各种方法,比如在最后加上@aar之类的各种方法都没用 最后公司导师提示,才想到可能maven-metadata.xml和library-1.0.0.

阅读全文...

gradle 修改打包后的apk的名字

在app的module里的build.gradle文件中,在android { …}里面加上这样一段代码,即可修改生成的apk的文件名。 android.applicationVariants.all { variant -> def file = variant.outputs[0].outputFile variant.outputs[0].outputFile = new File(file.parent, file.name.replace(".apk", "-" + defaultConfig.versionName + ".apk")) }

阅读全文...

Gradle实现的两种简单的多渠道打包方法

本来计划今天发Android的官方技术文档的翻译——《Gradle插件用户指南》的第五章的,不过由于昨天晚上没译完,还差几段落,所以只好推后了。 今天就说一下使用Gradle进行类似友盟这样的多渠道打包的方法吧。 本文原创,转载请注意在CSDN上的出处: http://blog.csdn.net/maosidiaoxian/article/details/42000913 目前我掌握的方法有两种,都非常简单,用的都是Gradle Android插件里的productFlavors。 以友盟的多渠道打包为例,假设我们需要打包出如下渠道:UMENG, WANDOUJIA, YINGYONGBAO。 第一种方法,是需要创建文件的。 我们在写完我们的代码之后,在app/src下面,分别创建和main同级目录的文件夹umeng, wandoujia, yingyongbao,这三个文件夹里面都各只有一个AndroidManifest.xml文件,文件只需要如下: 注意,上面的value的值要和你的渠道名所对应。比如wandoujia里面要对应为你豌豆荚上的渠道名(如WANDOUJAI)。 然后在你的build.gradle的android{}节点里面,添加productFlavors节点,代码如下: android { // 这里是你的其他配置 productFlavors{ umeng{

阅读全文...