如何建立与 android gradle工作室和 gradle android gradle库

为什么需要maven私服
如果没有私服,我们所需的所有构件都需要通过maven的中央仓库和第三方的Maven仓库下载到本地,而一个团队中的所有人都重复的从maven仓库下载构件无疑加大了仓库的负载和浪费了外网带宽,如果网速慢的话,还会影响项目的进程。很多情况下项目的开发都是在内网进行的,连接不到maven仓库怎么办呢?开发的公共构件怎么让其它项目使用?这个时候我们不得不为自己的团队搭建属于自己的maven私服,这样既节省了网络带宽也会加速项目搭建的进程,当然前提条件就是你的私服中拥有项目所需的所有构件。
所以我们希望通过搭建一个私有maven仓库,来提高我们的开发效率。
二 使用Nexus搭建 maven 私服
1、Nexus下载
下载地址:
2、Nexus启动
我下载的是zip包进入解压后的目录执行 ./bin/nexus { console | start | stop | restart | status | dump },然后在浏览器中输入http://127.0.0.1:8081/nexus/,出现图(2)所示就代表nexus已经启动成功。
8081为默认的端口号,要修改端口号可进入\conf\打开nexus.properties文件,修改application-port属性值就可以了。
默认的用户名和密码:admin/admin123,登录后看到图(3)所示:
3、Nexus仓库
nexus的仓库类型分为以下四种:
group: 仓库组
hosted:宿主
proxy:代理
virtual:虚拟
首次登陆nexus后可以看到以下一个仓库组和多个仓库。
Public Repositories:
3rd party: 无法从公共仓库获得的第三方发布版本的构件仓库
Apache Snapshots: 用了代理ApacheMaven仓库快照版本的构件仓库
Central: 用来代理maven中央仓库中发布版本构件的仓库
Central M1 shadow: 用于提供中央仓库中M1格式的发布版本的构件镜像仓库
Codehaus Snapshots: 用来代理CodehausMaven 仓库的快照版本构件的仓库
Releases: 用来部署管理内部的发布版本构件的宿主类型仓库
Snapshots:用来部署管理内部的快照版本构件的宿主类型仓库
4、配置nexus
4.1、开启远程索引
新搭建的neuxs环境只是一个空的仓库,需要手动和远程中心库进行同步,nexus默认是关闭远程索引下载,最重要的一件事情就是开启远程索引下载。登陆nexus系统,默认用户名密码为admin/admin123。点击左边Administration菜单下面的Repositories,找到右边仓库列表中的三个仓库Apache Snapshots,Codehaus Snapshots和Maven Central,然后再没有仓库的configuration下把Download Remote Indexes修改为true。如下图
然后在Apache Snapshots,Codehaus Snapshots和Maven Central这三个仓库上分别右键,选择Repair Index,这样Nexus就会去下载远程的索引文件。
这样设置以后, Nexus会自动从远程中央仓库下载索引文件, 为了检验索引文件自动下载是否生效,可以却换到Browse Index
在左边菜单栏里面有个Artifact Search, 在输入框里面输入你想要搜索的构件名字,比如:maven, 那么查询结果如下:
4.2 建立宿主仓库
新 建公司的内部仓库,步骤为Repositories –& Add –& Hosted Repository,在页面的下半部分输入框中填入Repository ID和Repository Name即可,比如分别填入zfy 和 zfy repostiory,另外把Deployment Policy设置为Allow Redeploy,点击save就创建完成了。这里我点击添加宿主类型的仓库,在仓库列表的下方会出现新增仓库的配置,如下所示:
点击save按钮后就会在仓库列表中看到刚才新增的仓库。
4.3、创建Nexus仓库组
Nexus 中仓库组的概念是Maven没有的,在Maven看来,不管你是hosted也好,proxy也好,或者group也好,对我都是一样的,我只管根据 groupId,artifactId,version等信息向你要构件。为了方便Maven的配置,Nexus能够将多个仓库,hosted或者 proxy合并成一个group,这样,Maven只需要依赖于一个group,便能使用所有该group包含的仓库的内容。neuxs- 1.9.2.3中默认自带了一个名为“Public Repositories”组,点击该组可以对他保护的仓库进行调整,把刚才建立的公司内部仓库zfy repostiory加入其中,这样就不需要再在maven中明确指定内部仓库 的地址了。同时创建一个Group ID为public-snapshots、Group Name为Public Snapshots Repositories的组,把Apache Snapshots、Codehaus Snapshots、Snapshots和zfy repostiory加入其中。
到这里neuxs的安装配置就完成了,下面介绍如何在maven中使用自己的私服。
4.4、创建Nexus代理仓库
点击菜单栏上的Add按钮后选择Proxy Repository,看到如下所示配置界面:
Android 依赖包 AAR
1. 什么是aar?
AAR文件是Google为Android开发所设计的一种library格式,全名为Android Archive Library, 与Java Jar Library不同的地方是AAR除了java code之外也包含res,也就是一些图片、文字等 资源文件。会设计形式的类别库是因为Google在Android SDK tool r14之后开始支持Library Project的开发方式,这种Library Project可以说是Android APP的半成品,其目标并不是制作成APK来执行,而是提供现成的View/Activiy等一些资源给其他开发者使用。而 AAR正是这种Library Project编译后的压缩包,压缩后只需传递单一文件即可分享,可以说是相当方便。
2.Android项目打包成AAR
在项目中我们使用gradel的方式编译打包 ,编译打包具体方式请读者自行学习,在此不再赘述。将一个Android项目打包成AAR你需要在项目的gradle脚本build.gradle文件中添加 apply plugin: ‘android-library’,然后编译项目。
3.Android项目使用AAR
引用远端的aar
首先配置引?用?文件的仓库地址(具体?方式后?面会讲到),然后配置脚本 如下:
compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
首先配置引?用?文件的仓库地址(具体?方式后?面会讲到),然后配置脚本 如下:compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
引用本地aar文件
compile fileTree(dir: 'libs', include: '*.aar')
compile fileTree(dir: 'libs', include: '*.aar')
4. aar文件结构和在在使用项目中的位置(有助于我们排查问题看看是否那些文件没有被打包等)
在使用aar文件的android 项目中使用编译后aar文件会被解压在: app/build/intermediates/exploded-aar
如连接所示。
四.使用maven私有仓库,并上传子项目打包文件到仓库
1.使用自定义maven 仓库()
需要在gradle脚本中添加你自定义仓库
repositories {
mavenCentral()
maven { url "your respository URL" }//可在刚才配置的仓库里查看
repositories {&&&&mavenCentral()&&&&maven { url "your respository URL" }//可在刚才配置的仓库里查看}
2. 编译并上传aar文件到私有仓库
添加maven发布插件
apply plugin: 'maven-publish'
apply plugin: 'maven'
apply plugin: 'maven-publish'apply plugin: 'maven'
定义aar属性以及上传目标仓库地址
def MAVEN_LOCAL_PATH ='$(your private maven repository URL)'
def ARTIFACT_ID = 'baselib'
def VERSION_NAME = '1.0.0-SNAPSHOT'
def GROUP_ID = 'co
def MAVEN_LOCAL_PATH ='$(your private maven repository URL)'def ARTIFACT_ID = 'baselib'def VERSION_NAME = '1.0.0-SNAPSHOT'def GROUP_ID = 'co
编写上传脚本
uploadArchives {
repositories {
mavenDeployer {
repository(url:MAVEN_LOCAL_PATH ){
authentication(userName: “$(user_name)”, password:“$(passport)”)
pom.project {
groupId GROUP_ID
artifactId ARTIFACT_ID
version VERSION_NAME
packaging 'aar'
123456789101112131415
uploadArchives {&&&&repositories {&&&&&&&&mavenDeployer {&&&&&&&&&&&&repository(url:MAVEN_LOCAL_PATH ){&&&&&&&&&&&&&&&&authentication(userName: “$(user_name)”, password:“$(passport)”)&&&&&&&&&&&&}&&&&&&&&pom.project {&&&&&&&&groupId GROUP_ID&&&&&&&&artifactId ARTIFACT_ID&&&&&&&&version VERSION_NAME&&&&&&&&packaging 'aar'&&&&&&&&&&&&}&&&&&&&&}&&&&}}
ps: (注意用户名和密码的填写,需要有上传的权限才行)
编译项目并且上传
使用gradle + task_name的方式 如: gradle uploadArchives 成功后可在web上看见生成的文件:
至此,我们就成功的搭建了自己的私有仓库,并且上传了Android AAR文件,别人就可以引用了。
讨论:对于频繁更新的子项目是否适合采用这种方式。因为每次变动都需要上传,而主项目在引用该AAR的时候则需要每次都去检查是否更新,gradle 就不能使用offline mode 这会使得编译时间大大增加。尤其在开发模式下我们会花费大量的时间等待编译。I'm using Jake's Android unit tests plugin for gradle:
My build.gradle looks like this:
dependencies {
// analytics
compile('com.crittercism:crittercism-android:3.0.11')
// retrofit
compile('com.squareup.retrofit:retrofit:1.2.2')
compile('com.squareup.okhttp:okhttp:1.2.1')
compile('com.squareup.dagger:dagger:1.1.0')
compile('com.squareup.dagger:dagger-compiler:1.1.0')
// compatibility
compile('android.compatibility:android-support:v4-r13')
compile('com.actionbarsherlock:actionbarsherlock:4.4.0@aar')
// Picasso
compile('com.squareup.picasso:picasso:2.1.1')
compile('com.squareup:otto:1.3.4')
testCompile 'junit:junit:4.10'
testCompile 'org.robolectric:robolectric:2.2'
testCompile 'org.powermock:powermock-api-mockito:1.5.1'
testCompile 'org.easytesting:fest-assert-core:2.0M10'
Unfortunately I'm not able to run all or specific unit test form Android Studio. I'm getting error:
Exception in thread "main" java.lang.NoClassDefFoundError: junit/textui/ResultPrinter
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:171)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:113)
Caused by: java.lang.ClassNotFoundException: junit.textui.ResultPrinter
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 3 more
And this is correct because running command line doesn't include my JUnit dependency:
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java -ea -Didea.launcher.port=7533 "-Didea.launcher.bin.path=/Applications/Android Studio.app/bin" -Dfile.encoding=UTF-8 -classpath "/Applications/Android Studio.app/lib/idea_rt.jar:/Applications/Android Studio.app/plugins/junit/lib/junit-rt.jar:/Users/eugen/Development/SDK/android-sdk-macosx/platforms/android-18/android.jar:/Users/eugen/Development/SDK/android-sdk-macosx/platforms/android-18/data/res:/Users/eugen/Development/SDK/android-sdk-macosx/tools/support/annotations.jar:/Users/eugen/Development/Projects/eBuddy/xms/android/xms3-android/build/classes/alpha/debug:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.retrofit/retrofit/1.2.2/jar/cdf7bfbcc7ae92f733c03c/retrofit-1.2.2.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.google.code.gson/gson/2.2.4/jar/a60a5e993c98ccb901b7eab/gson-2.2.4.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.okhttp/okhttp/1.2.1/jar/cbb4d452d6fc45bd08afe/okhttp-1.2.1.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup/javawriter/2.1.1/jar/67ff45d9ae02e583d0f9b3432a5ebbe05c30c966/javawriter-2.1.1.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.dagger/dagger/1.1.0/jar/49fc8efd/dagger-1.1.0.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.picasso/picasso/2.1.1/jar/ab19bfb23f641f189b6dca9a4d393f8dc291103a/picasso-2.1.1.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup/otto/1.3.4/jar/4d72fb811c7b3c0e7f30f044e510/otto-1.3.4.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.dagger/dagger-compiler/1.1.0/jar/ddb38c2be31deeb7acd646/dagger-compiler-1.1.0.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/javax.inject/javax.inject/1/jar/a231b76c/javax.inject-1.jar:/Users/eugen/Development/Projects/eBuddy/xms/android/xms3-android/build/exploded-bundles/ComActionbarsherlockActionbarsherlock440.aar/res:/Users/eugen/Development/Projects/eBuddy/xms/android/xms3-android/build/exploded-bundles/ComActionbarsherlockActionbarsherlock440.aar/classes.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.okhttp/okhttp-protocols/1.2.1/jar/ec2beaefef3bd4f680c17fad8e72e66f2a006f1/okhttp-protocols-1.2.1.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.crittercism/crittercism-android/3.0.11/jar/e30c21ae491d780622ecaee140c3/crittercism-android-3.0.11.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/android.compatibility/android-support/v4-r13/jar/bd4e66e0f31c2b4d308/android-support-v4-r13.jar" com.intellij.rt.execution.application.AppMain com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 @/private/var/folders/wq/knhztnf105v2_p1t580tj8h80000gp/T/idea_junit095664.tmp @w@/private/var/folders/wq/knhztnf105v2_p1t580tj8h80000gp/T/idea_working_dirs_junit5663413.tmp -socket63849
I wonder if anyone was able to run unit tests in Android Studio? And if it is possible how make it?
解决方案 Update for AS 1.1+, android gradle plugin 1.1+
Finally it is possible without many tricks. Here is example of project that shows how to setup Robolectric test in Android Studio v1.1+ and android gradle plugin v1.1+:
You can find also there possible issue and workarounds. Yes, Robolectric is complex and not officially supported by Google so it still has some issues. But most of the time it works and brings huge value to your project.
I would also encourage you to start using Robolectric v3+. It is almost released and stable enough.
Old answer for AS 0.x and 1.0x and android gradle plugin version below 1.1
I managed to make it with help of friends.
So basically you need to make next changes to run Robolectric unit tests in Android Studio:
Copy your classpath for test (you can find it as first line in "Run" log)
Open run configuration for your unit tests
Change working dir to folder where AndroidManifest.xml is present
Add VM Option -classpath "&path_to_project_folder&/build/test-classes:&path_to_gradle_cache&/caches/modules-2/files-2.1/junit/junit/4.11/4e031bb61df09069aeb2bffb4a4ee0/junit-4.11.jar:&your old classpath&"
As for me the start of new classpath looks like this:
/Users/emartynov/Development/Projects/work/android.project/build/test-classes:/Users/emartynov/.gradle/caches/modules-2/files-2.1/junit/junit/4.11/4e031bb61df09069aeb2bffb4a4ee0/junit-4.11.jar
You can run test only for debug variant
Every new test run configuration requires such manual changes. But this is simply copy/paste of two edit fields
I have Android Studio 0.6 version. Here is again part of my build.gradle file:
buildscript {
repositories {
mavenCentral()
maven { url 'https://github.com/rockerhieu/mvn-repo/raw/master/' }
dependencies {
classpath 'com.android.tools.build:gradle:0.11.+'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.3'
classpath 'org.robolectric.gradle:gradle-android-test-plugin:0.10.1'
classpath 'org.robolectric.gradle:gradle-android-test-plugin:0.10.1-SNAPSHOT'
classpath 'com.jakewharton.sdkmanager:gradle-plugin:0.10.+'
apply plugin: 'android-sdk-manager'
apply plugin: 'android'
apply plugin: 'android-apt'
apply plugin: 'android-test'
repositories {
mavenCentral()
compileSdkVersion 19
buildToolsVersion "19.1.0"
packagingOptions {
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/notice.txt'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/ASL2.0'
exclude 'LICENSE.txt'
defaultConfig {
minSdkVersion 14
targetSdkVersion 19
versionCode 1
versionName "0.9.0"
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
sourceSets {
androidTest.setRoot( 'src/test' )
dependencies {
// butter knife
compile 'com.jakewharton:butterknife:5.0.0'
compile 'com.squareup.dagger:dagger:1.2.1'
apt 'com.squareup.dagger:dagger-compiler:1.+'
// AS tests
androidTestCompile 'junit:junit:4.+'
androidTestCompile( 'org.robolectric:robolectric:2.3' ) {
exclude group: 'commons-logging'
exclude group: 'org.apache.httpcomponents'
androidTestCompile 'com.squareup:fest-android:1.+'
androidTestCompile 'org.mockito:mockito-all:1.9.+'
androidTestCompile 'org.easytesting:fest-assert-core:2.0M10'
androidTestCompile( 'org.skyscreamer:jsonassert:1.2.+' ) {
exclude group: 'org.json'
testCompile 'junit:junit:4.+'
testCompile( 'org.robolectric:robolectric:2.3' ) {
exclude group: 'commons-logging'
exclude group: 'org.apache.httpcomponents'
testCompile 'com.squareup:fest-android:1.+'
testCompile 'org.mockito:mockito-all:1.9.+'
testCompile 'org.easytesting:fest-assert-core:2.0M10'
testCompile 'com.squareup.dagger:dagger-compiler:1.+'
testCompile( 'org.skyscreamer:jsonassert:1.2.+' ) {
exclude group: 'org.json'
本文地址: &
我使用的是杰克的Android单元测试插件摇篮:https://github.com/JakeWharton/gradle-android-test-plugin
我的build.gradle看起来是这样的:
编译(“com.crittercism:crittercism-机器人:3.0.11”)
编译(“com.squareup.retrofit:改造:1.2.2”)
编译(“com.squareup.okhttp:okhttp:1.2.1”)
编译(“com.squareup.dagger:短剑:1.1.0”)
编译(“com.squareup.dagger:匕首编译:1.1.0”)
编译(“android.compatibility:Android的支持:V4-R13”)
编译(“com.actionbarsherlock:actionbarsherlock:4.4.0@aar”)
编译(“com.squareup.picasso:毕加索:2.1.1”)
编译(“com.squareup:奥托:1.3.4”)
testCompile'的JUnit:JUnit的:4.10“
testCompile“org.robolectric:robolectric:2.2”
testCompile“org.powermock:powermock-API的Mockito:1.5.1”
testCompile“org.easytesting:巨星断言核心:2.0M10”
不幸的是,我不能够运行所有或特定的单元测试形式的Android工作室。我得到的错误:
在线程异常“主要”java.lang.NoClassDefFoundError的:JUnit的/文本界面/ ResultPrinter
在java.lang.Class.forName0(本机方法)
在java.lang.Class.forName(Class.java:171)
在com.intellij.rt.execution.application.AppMain.main(AppMain.java:113)
致:抛出java.lang.ClassNotFoundException:junit.textui.ResultPrinter
在java.net.URLClassLoader的$ 1.运行(URLClassLoader.java:202)
在java.security.AccessController.doPrivileged(本机方法)
在java.net.URLClassLoader.findClass(URLClassLoader.java:190)
在java.lang.ClassLoader.loadClass(ClassLoader.java:306)
在sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:301)
在java.lang.ClassLoader.loadClass(ClassLoader.java:247)
这是正确的,因为运行命令行不包括我的JUnit依赖:
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java -ea -Didea.launcher.port = 7533“-Didea.launcher。 bin.path = /应用/ Android的Studio.app /箱“-Dfile.encoding = UTF-8 -classpath”/应用/ Android的Studio.app / lib中/ idea_rt.jar:/应用/ Android的Studio.app/plugins/junit/lib/junit-rt.jar:/Users/eugen/Development/SDK/android-sdk-macosx/platforms/android-18/android.jar:/Users/eugen/Development/SDK/android-sdk-macosx/platforms/android-18/data/res:/Users/eugen/Development/SDK/android-sdk-macosx/tools/support/annotations.jar:/Users/eugen/Development/Projects/eBuddy/xms/android/xms3-android/build/classes/alpha/debug:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.retrofit/retrofit/1.2.2/jar/cdf7bfbcc7ae92f733c03c/retrofit-1.2.2.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.google.$c$c.gson/gson/2.2.4/jar/a60a5e993c98ccb901b7eab/gson-2.2.4.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.okhttp/okhttp/1.2.1/jar/cbb4d452d6fc45bd08afe/okhttp-1.2.1.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup/javawriter/2.1.1/jar/67ff45d9ae02e583d0f9b3432a5ebbe05c30c966/javawriter-2.1.1.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.dagger/dagger/1.1.0/jar/49fc8efd/dagger-1.1.0.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.picasso/picasso/2.1.1/jar/ab19bfb23f641f189b6dca9a4d393f8dc291103a/picasso-2.1.1.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup/otto/1.3.4/jar/4d72fb811c7b3c0e7f30f044e510/otto-1.3.4.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.dagger/dagger-compiler/1.1.0/jar/ddb38c2be31deeb7acd646/dagger-compiler-1.1.0.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/javax.inject/javax.inject/1/jar/a231b76c/javax.inject-1.jar:/Users/eugen/Development/Projects/eBuddy/xms/android/xms3-android/build/exploded-bundles/ComActionbarsherlockActionbarsherlock440.aar/res:/Users/eugen/Development/Projects/eBuddy/xms/android/xms3-android/build/exploded-bundles/ComActionbarsherlockActionbarsherlock440.aar/classes.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.okhttp/okhttp-protocols/1.2.1/jar/ec2beaefef3bd4f680c17fad8e72e66f2a006f1/okhttp-protocols-1.2.1.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.crittercism/crittercism-android/3.0.11/jar/e30c21ae491d780622ecaee140c3/crittercism-android-3.0.11.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/android.compatibility/android-support/v4-r13/jar/bd4e66e0f31c2b4d308/android-support-v4-r13.jar" com.intellij.rt.execution.application.AppMain com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 @ /私营/无功/文件夹/ WQ / knhztnf105v2_p1t580tj8h80000gp / T / idea_junit095664.tmp @w@/private/var/folders/wq/knhztnf105v2_p1t580tj8h80000gp/T/idea_working_dirs_junit5663413.tmp -socket63849
我不知道是否有人能在Android的Studio中运行单元测试?而且如果可能的话怎么做呢?
更新AS 1.1+,Android的摇篮插件1.1 +
最后有可能没有花样繁多。下面是例子项目,说明如何建立 Robolectric 测试 Android的工作室V1.1 + 和 Android的摇篮插件V1.1 + :
您还可以找到有可能的问题和解决方法。是的, Robolectric 是复杂的,而不是由谷歌官方支持,因此还是有一些问题。但大部分作品和时间带来巨大的价值,你的项目。
我也建议你开始使用 Robolectric V3 + 。这几乎是释放,不够稳定。
有关AS 0.X和1.0倍和Android摇篮的插件版本低于1.1 旧的答案
我设法在朋友帮助下做到这一点。
所以基本上你需要做下一个改变运行Android的工作室Robolectric单元测试:
复制您的类路径测试(你可以找到它的“运行”日志第一行)
为单元测试打开运行配置
更改工作目录到文件夹中的AndroidManifest.xml是present
添加VM选项 -classpath "&path_to_project_folder&/build/test-classes:&path_to_gradle_cache&/caches/modules-2/files-2.1/junit/junit/4.11/4e031bb61df09069aeb2bffb4a4ee0/junit-4.11.jar:&your旧的类路径>“
至于我的新的类路径的开始是这样的:
/Users/emartynov/Development/Projects/work/android.project/build/test-classes:/Users/emartynov/.gradle/caches/modules-2/files-2.1/junit/junit/4.11/4e031bb61df09069aeb2bffb4a4ee0/junit-4.11.jar
您只能为调试版本上运行测试
在每一个新的测试运行配置需要这样的手动更改。但是,这是简单的复制/两个编辑字段粘贴
我有机器人工作室0.6版本。这又是我的 build.gradle 文件的一部分:
buildscript {
mavenCentral()
行家{URL“https://github.com/rockerhieu/mvn-repo/raw/master/'}
类路径“com.android.tools.build:gradle:0.11.+”
类路径“com.neenbedankt.gradle.plugins:Android的贴切:1.3”
//类路径“org.robolectric.gradle:摇篮,Android的测试插件:0.10.1”
类路径“org.robolectric.gradle:摇篮,Android的测试插件:0.10.1-快照”
类路径“com.jakewharton.sdkmanager:摇篮 - 插件:0.10 +。”
应用插件:“Android的SDK管理器”
应用插件:'机器人'
应用插件:“Android的容易”
应用插件:“Android的测试”
mavenCentral()
compileSdkVersion 19
buildToolsVersion“19.1.0”
packagingOptions {
不包括META-INF /注意事项“
不包括META-INF / NOTICE.txt“
不包括META-INF / notice.txt“
不包括META-INF /许可证“
不包括META-INF / LICENSE.TXT“
不包括META-INF / LICENSE.TXT“
不包括META-INF / ASL2.0“
排除的“LICENSE.txt”
defaultConfig {
的minSdkVersion 14
targetSdkVersion 19
版本code 1
VERSIONNAME“0.9.0”
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
sourceSets {
androidTest.setRoot(“SRC /测试”)
编译“com.jakewharton:butterknife:5.0.0”
编译“com.squareup.dagger:短剑:1.2.1”
易'com.squareup.dagger:匕首编译:1 +'
androidTestCompile'的JUnit:JUnit的:4 +“
androidTestCompile('org.robolectric:robolectric:2.3'){
排除组:“共享记录”
排除组:“org.apache.httpcomponents”
androidTestCompile“com.squareup:巨星-机器人:1 +'
androidTestCompile“org.mockito:的Mockito全:1.9 +。”
androidTestCompile“org.easytesting:巨星断言核心:2.0M10”
androidTestCompile('org.skyscreamer:jsonassert:1.2 +'){
排除组:“org.json”
testCompile'的JUnit:JUnit的:4 +“
testCompile('org.robolectric:robolectric:2.3'){
排除组:“共享记录”
排除组:“org.apache.httpcomponents”
testCompile“com.squareup:巨星-机器人:1 +'
testCompile“org.mockito:的Mockito全:1.9 +。”
testCompile“org.easytesting:巨星断言核心:2.0M10”
testCompile“com.squareup.dagger:匕首编译:1 +'
testCompile('org.skyscreamer:jsonassert:1.2 +'){
排除组:“org.json”
本文地址: &
扫一扫关注IT屋
微信公众号搜索 “ IT屋 ” ,选择关注
与百万开发者在一起
(window.slotbydup = window.slotbydup || []).push({
id: '5828425',
container: s,
size: '300,250',
display: 'inlay-fix'
(window.slotbydup = window.slotbydup || []).push({
id: '5828430',
container: s,
size: '300,250',
display: 'inlay-fix'

我要回帖

更多关于 android gradle 下载 的文章

 

随机推荐