gradle代理设置

gradle代理设置,第1张

Gradle 默认直连网络,即使 Mac 设置了全局代理也是一样。就算你给 Android Studio 设置了代理,它依旧会风轻云淡地直连那个你在中国一辈子也不可能连上的网站……

根据需要在下列所述文件中添加相应配置语句

1、单项目gradle使用代理:gradle/wrapper/gradle-wrapper.properties

2、全局gradle使用代理:userdir/.gradle/gradle.properties

#代理服务器IP/域名

systemProp.http.proxyHost=127.0.0.1

#代理服务器端口

systemProp.http.proxyPort=8080

#代理服务器需要验证时,填写用户名

systemProp.http.proxyUser=userid

#代理服务器需要验证时,填写密码

systemProp.http.proxyPassword=password

#不需要代理的域名/IP

systemProp.http.nonProxyHosts=*.nonproxyrepos.com|localhost

systemProp.https.proxyHost=127.0.0.1

systemProp.https.proxyPort=8080

systemProp.https.proxyUser=userid

systemProp.https.proxyPassword=password

systemProp.https.nonProxyHosts=*.nonproxyrepos.com|localhost

然后重启部署,Gradle 就会老老实实地走代理部署了。

使用Android Studio开发Gradle插件的步骤:

1 创建Gradle Module

AndroidStudio中是没有新建类似Gradle Plugin这样的选项的,那我们如何在AndroidStudio中编写Gradle插件,并打包出来呢?

(1) 首先,你得新建一个Android Project

(2) 然后再新建一个Module,这个Module用于开发Gradle插件,同样,Module里面没有gradle plugin给你选,但是我们只是需要一个“容器”来容纳我们写的插件,因此,你可以随便选择一个Module类型(如Phone&Tablet Module或Android Librarty),因为接下来一步我们是将里面的大部分内容删除,所以选择哪个类型的Module不重要。

(3) 将Module里面的内容删除,只保留build.gradle文件和src/main目录

由于gradle是基于groovy,因此,我们开发的gradle插件相当于一个groovy项目。所以需要在main目录下新建groovy目录

(4) groovy又是基于Java,因此,接下来创建groovy的过程跟创建java很类似。在groovy新建包名,如:com.hc.plugin,然后在该包下新建groovy文件,通过new->file->MyPlugin.groovy来新建名为MyPlugin的groovy文件。

(5) 为了让我们的groovy类申明为gradle的插件,新建的groovy需要实现org.gradle.api.Plugin接口。如下所示:

package  com.hc.plugin

import org.gradle.api.Plugin

import org.gradle.api.Project

public class MyPlugin implements Plugin<project> {</project>

    void apply(Project project) {

        System.out.println("========================")

        System.out.println("hello gradle plugin!")

        System.out.println("========================")

    }

}

因为我本人对groovy也不是特别熟悉,所以我尽可能的用Java语言,使用System.out.println而不是用groovy的pintln "",我们的代码里面啥也没做,就打印信息。

(6) 现在,我们已经定义好了自己的gradle插件类,接下来就是告诉gradle,哪一个是我们自定义的插件类,因此,需要在main目录下新建resources目录,然后在resources目录里面再新建META-INF目录,再在META-INF里面新建gradle-plugins目录。最后在gradle-plugins目录里面新建properties文件,注意这个文件的命名,你可以随意取名,但是后面使用这个插件的时候,会用到这个名字。比如,你取名为com.hc.gradle.properties,而在其他build.gradle文件中使用自定义的插件时候则需写成:

apply plugin: 'com.hc.gradle'

然后在com.hc.gradle.properties文件里面指明你自定义的类

implementation-class=com.hc.plugin.MyPlugin

现在,你的目录应该如下:

(7) 因为我们要用到groovy以及后面打包要用到maven,所以在我们自定义的Module下的build.gradle需要添加如下代码:

apply plugin: 'groovy'

apply plugin: 'maven'

dependencies {

    

    compile gradleApi()

    

    compile localGroovy()

}

repositories {

    mavenCentral()

}

2 打包到本地Maven

前面我们已经自定义好了插件,接下来就是要打包到Maven库里面去了,你可以选择打包到本地,或者是远程服务器中。在我们自定义Module目录下的build.gradle添加如下代码:

group='com.hc.plugin'

version='1.0.0'

uploadArchives {

    repositories {

        mavenDeployer {

            repository(url: uri('D:/repos'))

        }

    }

}

其中,group和version后面会用到,我们后面再讲。虽然我们已经定义好了打包地址以及打包相关配置,但是还需要我们让这个打包task执行。点击AndroidStudio右侧的gradle工具,如下图所示:

可以看到有uploadArchives这个Task,双击uploadArchives就会执行打包上传啦!执行完成后,去我们的Maven本地仓库查看一下:

其中,com/hc/plugin这几层目录是由我们的group指定,myplugin是模块的名称,1.0.0是版本号(version指定)。

1. 从Eclipse中导出Gradle build files

在Eclipse菜单中 File -->Export-->Generate Gradle build files

接下来会到达警告界面,这里会提示AndroidStudio可以直接导入ADT的工程,先过,后面有直接导入的讲解。

选中你的项目工程,包括主工程和库工程(Library)。

确认生成

2. 修改导出文件参数

导出后,由于adt很久没更新,需要手动改一些参数,才能保证正常使用。

为了保证能够讲解的更清晰,下面分情况讲解一下:

没有库工程,只有主工程

这种情况下你看到的目录是这样的

首先需要更改的是 build.gradle 文件

AndroidStudio 1.0 ~ 1.0.2 使用的都是 Android Gradle plugin 1.0.0,因此需要将图中红框内的 0.12.+ 改为 1.0.0

然后还需要更新Gradle版本,指定为所需要的2.2.1

在 /gradle/wrapper/gradle-wrapper.properties里面

含有库工程

其实改动方法和上面一样,只需要注意是改动整个项目的build.gradle和 /gradle/wrapper/gradle-wrapper.properties。

而不要尝试去主工程或者库工程里面找build.gradle

3. 导入AndroidStudio

进入到AndroidStudio中,选择导入非AndroidStudio工程

找到需要导入的工程目录,可以看到图标和Eclipse创建的工程不一样。

点击OK,进入漫长的加载过程,之后就可以正常使用了。

已经创建过工程的打开AndroidStudio会直接进入以前的工程

这时候可以选择File-->Import Project, 选中后点击ok

兼容模式下的bug

使用IDE的打包:

在兼容模式只打主工程的,库工程没有加入到apk中,导致无法正常运行。

截止到1.0.2,AndroidStudio依然存在这个bug。

因为这个bug的存在,你在兼容模式可以使用AndroidStudio编程,打包时开启Eclipse。

OK,兼容模式介绍到这里。 我们开始介绍主角: Android Gradle Project。 这里必须说明的是Google更希望我们使用这种方式,如果没有什么团队的压力,还是使用这种吧。

使用新的目录结构

转换目录结构

打开Import

新用户:

老用户: File-->Import Project

直接找到原有的Eclipse工程

单一工程直接导入即可。

有库工程的需要注意,导入一定要指向主工程,而不是整个项目的目录。指向项目目录是无法进行转换的。

指定目标路径

这个地方需要详细说一下

这里上面两个选项暂且不说,勾选上。

最后一项提一下: 将Module名创建为camelCase风格。

驼峰式,这个搞Java的都会熟悉,camelCase表示首字母小写的驼峰式风格,CamelCase表示首字母大写的驼峰式风格。

不勾选这个选项意味着你原先的工程名是啥样,转换完就是啥样。

这里的AndroidStudio会去分析Eclipse工程下的. project文件,里面的name就是你在Eclipse中看到的工程名。(没有此文件时会使用此工程的文件夹名。)

当然也有例外,比如countly-sdk-android转换完就成了countlysdkandroid,下划线我就不知道了,这个没有再仔细研究规则,不过CamelCase会保持正常。

这里我比较喜欢让Module首字母大写(不知道为啥看这首字母小写难受),原来的工程就是CamelCase风格,我就不勾选了。

当然如果这里没注意直接转换成了camelCase但最后又不喜欢怎么办? 可以看后面《如何更改Module名称》部分。

OK,配置完点击Finish即可

之后需要经过一段时间的转换。成功后可以看到import-summary.txt,这个文件非常有用,后面会讲到。

到这里,你的应用其实已经可以通过AndroidStudio正常编译,你也可以写代码去了。

但我希望你还能继续看下去,因为这个成功后弹出来的import-summary.txt写了些很重要的东西。

带你看懂import-summary.txt

Manifest Merging

Your project uses libraries that provide manifests, and your Eclipse

project did not explicitly turn on manifest merging. In Android Gradle

projects, manifests are always merged (meaning that contents from your

libraries' manifests will be merged into the app manifest. If you had

manually copied contents from library manifests into your app manifest

you may need to remove these for the app to build correctly.

这段应该都能看懂,无非就是说你Library的清单文件有效啦。

不用手工拷贝到主工程的清单文件中了。以前拷贝过的,要移除才能正确build。

Ignored Files(这个最重要)

之所以说这部分重要,是因为AndroidStudio通过这段文字告诉了你,它导入的时候忽略了哪些文件。

也就是说这部分内容,它没给你拷进来,你要是不去自己拷贝,那这部分你新Gradle工程里面就没有了。

这里选一些典型的ignore文件来看一下:

[xml] view plain copy

From SDK:* proguard-project.txt* proguard.cfg

From UI:* cert\* cert\cert

From CrosswalkWebview:* ant.properties* build.xml

From SlidingMenuLibrary:* LICENSE.txt* pom.xml

给上面的忽略文件分分类:

确实不需要的:混淆文件、ant的ant.properties与build.xml、maven的pom.xml。

需要再次声明的: LICENSE.txt。不声明属于盗版侵权啊~~

自定义文件夹和文件:cert。 这个文件夹是自己创建的,不属于Android规定的目录,所以AndroidStudio没给拷贝。

需要留意你的Ignored Files部分,并根据自己的需要手工拷贝到新工程中。

Replaced Jars with Dependencies &Replaced Libraries with Dependencies

在Replaced Jars with Dependencies部分,有如下文字:

[java] view plain copy

android-support-v4.jar =>com.android.support:support-v4:21.0.3

gson-2.3.jar =>com.google.code.gson:gson:2.3

joda-time-2.6.jar =>joda-time:joda-time:2.6

可以看到jar被替换了。 可以看到工程里面没有了当初添加的jar包。那么jar包去哪了呢?

暂时先留个悬念。

我们继续来看 Replaced Libraries with Dependencies部分

[java] view plain copy

ActionbarLibrary =>

com.actionbarsherlock:actionbarsherlock:4.4.0@aar

com.android.support:support-v4:21.0.3

可以看到ActionbarSherlock被替代为了aar(Android ARchive ,jar : Java ARchive)。关于aar的介绍可以看这里,本文就不再详细展开了。

可以看到的是Library和jar都被替换了,可是你在当前工程里再也找不到了。这是为什么?

跟我来看下面的操作:

在Module上右击,选择Open Module Settings

切换到Dependencies

点击右侧的加号添加,选择Library dependency

可以看到这个界面:

OK,到这里就可以知道真相了,在AndroidStudio中你可以添加在线的库或jar包,添加完成后你就可以和平时一样正常使用。

而你的同事在打开这个工程的时候会即时下载,保证你们的代码都能正常运行。

这也是为什么当你的工程转换完毕后,有些jar和Library消失的原因。他们被转成在线的了。

Moved Files

这部分在讲你的目录结构变化,基本上可以认为他在废话,没什么看的必要了。

Next Steps &Bugs

呵呵,略过吧

最后一句

This import summary is for your information only, and can be deleted

after import once you are satisfied with the results.

你一旦觉得自己的工程没问题了,就可以把这个文件删除了。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/400759.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-20
下一篇2023-05-20

发表评论

登录后才能评论

评论列表(0条)

    保存