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

Volatile keyword in java under the hood
Add TableViewer Data in preference Store + eclipse
Gobblin MR Job throws Invalid path ' ' Exception
Maven build failure : could not transfer metadata
How to proccess/read java objects from xmlrpc received by a server
Trying to input values into a 2d array and print it, code not running
Popup DatePicker using DialogFragment and saving selection to TextView or EditText
Write out all Spring Boot metrics to Stdout or aggregator?
Passing string from load operation to Pig UDF
Android programmatically update application when a new version is available in api 24 and api 25
Calendar Event via Intent does not set Start Date and End Date
Combining two accounts [closed]
Casting list of objects to list of maps in java [duplicate]
JComboBox to display multiple lines of text
RotatedRect to Java Ellipse2D or similar - OpenCV
Need to restart Java method up to three times for username & password log-in system

Categories

HOME
maven
twitter
testng
coq
pypi
amazon-ec2
isabelle
plone
include
android-4.4-kitkat
umd
sql-server-2016
basic
applepay
awesome-wm
communication
vault
resize
task
lombok
shared-hosting
amazonsellercentral
scriptcs
csrf-protection
spark-jobserver
selectedindexchanged
windows-error-reporting
maxmind
ping
binary-data
titanium-mobile
caret
form-data
http-referer
amazon-kinesis-kpl
nssegmentedcontrol
bytecode-manipulation
webix-treetable
reportbuilder
elasticsearch-plugin
fedex
botbuilder
flickr-api
filepicker
logparser
domain-model
pebble-watch
darcs
lift-json
pg-dump
capacity
webdriverjs
orthogonal
vtigercrm
database-optimization
firebaseui
make-install
pickadate
google-places
simple-framework
emailrelay
apache-commons-fileupload
proj4js
website-monitoring
clicktag
codeigniter-url
file-copying
rdl
funcunit
mysql-error-1062
seaside
app42
web2py-modules
jplaton
sabredav
lcs
clipper
cascalog
onsubmit
appconkit
nsdatecomponents
fireworks
doh
deobfuscation
xmlspy
javax.script
asp.net-mvc-areas
zend-translate
sproutcore-2
substrings
zend-tool
backcolor
private-members
paul-graham

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