java


How do I structure my Android Studio project to avoid compilation issues with running the app with unit tests integrated


I am running the latest version of Robolectric, Android Studio, and Gradle.
As the title suggests ever since I worked on Robolectric test cases, I am having a hard time switching back to app and making the android app compile like it used to be.
Every time I try to run the app, I get the following compilation errors:
Error:(35, 23) error: package org.robolectric does not exist
Error:(36, 23) error: package org.robolectric does not exist
Error:(37, 34) error: package org.robolectric.annotation does not exist
Error:(38, 42) error: package org.robolectric.shadows.httpclient does not exist
Error:(44, 2) error: cannot find symbol class Config
Error:(43, 10) error: cannot find symbol class RobolectricTestRunner
Error:(197, 13) error: cannot find symbol variable FakeHttp
Error:(198, 13) error: cannot find symbol variable FakeHttp
Error:(218, 9) error: cannot find symbol variable FakeHttp
Error:(238, 25) error: cannot find symbol variable Robolectric
Error:(250, 25) error: cannot find symbol variable Robolectric
Error:(260, 25) error: cannot find symbol variable Robolectric
Error:(263, 28) error: cannot find symbol variable Robolectric
Error:(275, 38) error: cannot find symbol variable Robolectric
Error:(291, 25) error: cannot find symbol variable Robolectric
Error:(294, 28) error: cannot find symbol variable Robolectric
Error:(305, 32) error: cannot find symbol variable Robolectric
Error:(317, 25) error: cannot find symbol variable Robolectric
Here is my gradle file:
sourceSets{
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
java.exclude {'src/test'}
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
test {
java.srcDirs = ['src/test/java']
}
// Move the build types to build-types/<type>
// For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
// This moves them out of them default location under src/<type>/... which would
// conflict with src/ being used by the main source set.
// Adding new build types or product flavors should be accompanied
// by a similar customization.
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
dependencies {
compile fileTree(include: '*.jar', dir: 'libs')
compile('com.facebook.android:facebook-android-sdk:3.22.0#aar') {
exclude module: 'support-v4'
}
compile files('libs/universal-image-loader-1.9.5.jar')
compile('com.crashlytics.sdk.android:crashlytics:2.5.0#aar') {
transitive = true;
}
compile files('libs/KochavaSDK.jar')
compile files('libs/Parse-1.9.1.jar')
compile files('libs/picasso-2.4.0.jar')
compile files('libs/adobeMobileLibrary-4.11.0.jar')
compile project(':cardview')
compile project(':CropImage')
compile project(':MapboxAndroidSDKNew')
compile project(':android-pdfview')
compile project(':UserVoiceSDK')
compile 'com.google.android.gms:play-services:9.2.1'
compile 'com.google.firebase:firebase-messaging:9.2.1'
compile 'com.parse.bolts:bolts-android:1.+'
compile 'com.android.support:design:23.0.1'
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.android.support:recyclerview-v7:23.0.1'
compile 'com.fasterxml.jackson.core:jackson-databind:2.5.+'
compile 'com.fasterxml.jackson.core:jackson-core:2.5.+'
compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
compile 'com.nineoldandroids:library:2.4.0'
compile 'com.android.support:multidex:1.0.1'
compile 'com.android.support:support-v13:23.0.1'
compile('com.googlecode.json-simple:json-simple:1.1.1') {
exclude group: 'org.hamcrest', module: 'hamcrest-core'
}
compile 'junit:junit:4.12'
testCompile 'junit:junit:4.12'
testCompile 'org.robolectric:robolectric:3.1.2'
testCompile 'org.robolectric:shadows-multidex:3.1.2'
testCompile 'org.robolectric:shadows-httpclient:3.1.2'
}
For the current file structure, I have set the test and com.example.application folders underneath the src folder, which was causing these compilation issues.
I am aware that there are some work arounds for this fix, which consists of excluding the test folder by using 'java { exclude 'src/test'}' under the main sourceset, but I tried that and it didn't seem to work. I also tried to add compile 'org.robolectric:robolectric:3.1.2' and other robolectric libraries needed, but it's gotten too bothersome and now I need to set this project up properly to where I can achieve this desirable effect.
Any input is greatly appreciated.
EDIT: Reworded this question a little better.
Change java.exclude {'src/test'} in the sourceSets block to java.exclude 'test/**'
The original way was calling exclude with a Closure argument, a closure which always returned true, which meant exclude everything.
you may also want to pair it with java.include '**/*.java' (before the exclude) and resources.exclude '**/*.java' in the future. Not sure what your build is like but tasks like processResources may change because of it.

Related Links

Java 7 update 25 Crash
Java String pool Storage doubts [duplicate]
Luke - No valid directory at the current location
How to run CPU intensive parallel tasks with Vert.X in Java
How to pass ArrayList of different types to method?
Finding the last two digits before the decimal point for the number (4+sqrt(11))^n
Printing JTextArea [closed]
Number stored as text warning in excel using POI
How to atomically check TWO AtomicBooleans in Java in one safe operation without a synchronized block (i.e. low cost locks)?
Change default charset to UTF-8
Spring Javamail properties from Database
Reverse the rows of a 2d array
switching between multiple JPanels in CardLayout
Pattern Matching Algorithm for Serial Numbers
Call different methods depending on input parameters
Convert Multiset to a Map

Categories

HOME
testing
pdf
hive
minimum-spanning-tree
pycharm
lodash
bookshelf.js
tizen-web-app
rdf
c#-2.0
gps
ezpublish
azure-media-services
multiple-records
ssl-client-authentication
quicklook
zend-framework3
hex-editors
designer
jsprit
seaborn
ab-testing
contextmenu
jasonette
errorlevel
wkwebview
google-search-api
claims-based-identity
trading
android-widget
one-to-many
elasticsearch-net
newline
delicious-api
nat
iframe-resizer
yadcf
form-data
stacked
libvpx
android-browser
unspecified
jna
streamreader
grid.mvc
vao
unixodbc
s
node-sass
skeleton-css-boilerplate
upstart
jlink
knockout-components
kbuild
lift-json
r-forge
zendesk-app
root-framework
home-directory
google-web-starter-kit
pagedlist
pickadate
yaws
bluemix-app-scan
uid
intellij-14
mutation-observers
rgeo
browser-bugs
tableau-online
network-interface
codeigniter-routing
java-metro-framework
wp-query
dealloc
jboss-weld
cdc
xamlparseexception
wsdl-2.0
pvrtc
libstdc++
bluepill
boost-filesystem
recent-documents
datareader
multi-tier
substrings
data-driven
simpletest
yagni

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App