Running a Robolectric test from IntelliJ causes OutOfMemory - android

I am trying to run a unit test from IntelliJ that uses Robolectric by following the example here ::
http://pivotal.github.com/robolectric/intellij-quick-start.html
Have added the Robolectric jar and a jar for Junit4. When the test runs I see the following output >>
Have googled around and found some suggestions that I need to specify some vm args. This post is describing a similar issue with Eclipse java heap space The post is concerned with using Robolectric in tandem with a Maven project. I have read that it is easier to use Robolectric inside a Maven project but I have elected not to do this as my Android project has no other use for Maven.
If anyone has any wisdom on what is wrong here it would be greatly appreciated.

Maybe it will help. You need proper local.properties file with android sdk location in the root of your project to run Robolectric correctly:
sdk-location=c:\\Development\\android-sdk-windows
sdk.dir=c:\\Development\\android-sdk-windows

I ran into the same issue and found an answer here: https://coderwall.com/p/rcgyfq
1.- Copy the file "/Applications/IntelliJ IDEA.app/bin/idea.vmoptions" to "~/Library/Preferences/IntelliJIdea12/idea.vmoptions"
2.- Edit file "~/Library/Preferences/IntelliJIdea12/idea.vmoptions"
3.- For example change -Xmx800m by -Xmx2048m
4.- Restart IntellijIDEA 12
This stopped my Out of Memory exceptions and greatly decreased my overall test time.

Related

How to find which files are using a particular external library in an Android Studio project

The problem
Under "External Libraries" in the project view of an Android Studio project I have these libraries "stax-stax-api:1.0.1#jar" and "xpp3:xpp3:1.1.3.3#jar". They're causing me problems such that I can't build the project. I can't seem to figure out how they got there or where they're being used.
The error message I get when I build right now is:
"Error:Error: xpp3 defines classes that conflict with classes now provided by Android. Solutions include finding newer versions or alternative libraries that don't have the same problem (for example, for httpclient use HttpUrlConnection or okhttp instead), or repackaging the library using something like jarjar. [DuplicatePlatformClasses]"
The error message is good except that it doesn't tell me who's using this lib in the first place.
The question
Is there an easy way to find out where they're being used in the project? Or even a way that it's easy but doesn't require looking at every file? It's a multi module project with lots of files. If I could delete them this would tell me but there's no delete option.
This could be something really simple that I'm overlooking. Any help appreciated. Happy to add more info as requested.
What I've tried
I've tried to "Analyze Dependencies" but it doesn't show me any references that I can see.
Update: I forgot to mention that I've also tried ./gradlew app:dependencies but it only tells me that my project depends on these libraries. I already know this. Is there a way to get some more specific information so I can remove the libraries?
Update 2: The accepted answer does work but I needed to redirect console output.
gradle app:dependencies
It will show you the dependencies tree of your project
At this link it is explained quite well about the command and how to use it.
Use this to redirect console output if it's clipped:
./gradlew app:dependencies > dependencies.txt
Project can be explored in "Project-tool-window" to have a look at the used external libraries which are not visible in "Android tool Window".
https://www.jetbrains.com/help/idea/project-tool-window.html
That way I solve my problem. Hope it help.

Assets for Unit-Tests

I am migrating some tests from instrumentation to unit-tests ( the new ones that came with 1.1 ) - And now I am facing the problem that I find no way to supply the tests with files ( data that I need to test if it gets parsed correctly )
Anyone knows a way to do this?
Unfortunately for the android asset stuff I have no context and this also does not work:
getClass().getClassLoader().getResource("src.sgf")
The above is null with the file in:
src/test/assets/src.sgf
Interestingly AndroidStudio recognizes the asset - when I control click on the src.sgf in the code it brings me to the right file.
As far as I understand you are looking for resources being accessible from your unit-tests environment.
It is an official issue of android build tools gradle plugin version 1.1.
You can find work around for this issue in this following thread Test resources not found from unit test

Running Android tests (junit) in Android Studio does not work Exception in thread “main” java.lang.NoClassDefFoundError: junit/textui/ResultPrinter

When I run a Andriod test (junit) test in Android Studio I get the folowing errormessage.
Exception in thread “main” java.lang.NoClassDefFoundError: junit/textui/ResultPrinter.
I assume the error is because it cannot find the junit.jar file.
When I follow below junit setup it does not fix the error:
http://www.tutorialspoint.com/junit/junit_environment_setup.htm
I cannot get above setup working. It still cannot find the junit classes.
Any ideas how to fix the problem.
Did you put your test class in correct place in the folder structure, Martin?
Look at the table under "Flavors and build types support" on http://tools.android.com/tech-docs/unit-testing-support
It resolved the issue for me, but I had to move the test class (and create folders) manually - while Android Studio can generate the test suite automatically for you (Go to... Test, after right-clicking on the class header), it doesn't offer to put it in right location by default, so it can be confusing.
Also make sure to set Test Artifact to "Unit Tests" in Build Variants tab, but the official tutorial says that more explicitly so I assume that's not what you overlooked.
I understand your question was dated, but maybe someone stumbles upon it like I only just did struggling with this issue myself ;) And guys, remember - highest voted answers on StackOverflow that tell you to stick to Android tests and drop JUnit are obsolete now, Android Studio supports JUnit tests that run on your PC directly, as explained in the link I posted above. Of course they don't give you access to instrumentation - I use them to test my "pure" Java logic which is platform agnostic.

Android Annotations: Annotated class Xyz_ not finding it's original ("cannot find symbol class Xyz")

I use the latest Android Annotations 2.6 and IntelliJ IDEA.
Sometimes I always keep having problem with the annotations / classpath / compilation order. Seems to occur irregularly. I had the project compile earlier today, then changed a res/layout-xml file later on, then I try to build the project and get an error.
But there are no syntax errors or anything in the xml nor java source files.
Problem is that the annotated class doesn't find it's original class, getting
cannot find symbol class Intro
error.
My project structure:
/src/
/app/activity/Intro
...
/gen-annotation-processed/
/app/activity/Intro_
...
/gen
...
My IDEA annotation preferences:
Processor path:
/path/to/project/ext-libs/androidannotations-2.6.jar
Processor FQ Name:
com.googlecode.androidannotations.AndroidAnnotationProcessor
Source folders in the project's Android IDEA module:
gen
gen-annotation-processed
src
Error login in IDEA when building the project (via IDEA, no ant or maven):
(Class "Intro" exists in the src folder and has no errors in it.)
Update: I have it working now, although not sure what/where I changed something after playing around with settings back and forth. It might actually just be an issue with IDEA and not actually android-annotations related, not sure yet.
What usually seems to work is: do a Rebuild (might throw compile errors, ignore). Then do a Build (not a complete rebuild). For some reasons, the multiple compilation runs don't work properly when doing a rebuild, need to do the rebuild+build combination.
Above mentioned problem was an issue with the new build system that was introduced with IDEA 12, in combination with an issue of AA 2.x, which is meanwhile fixed in AA 3.
See:
http://github.com/excilys/androidannotations/issues/423
http://github.com/excilys/androidannotations/issues/471
(Anyhow, as #outlying mentioned, maven is a good idea in general to make it independent of the IDE at all.)
Have you tried this link http://www.ashokgelal.com/2012/12/setting-up-intellij-idea-12-with-maven-actionbarsherlock-roboelectric-androidannotations/ ?
It works like a charm for me, I was able to setup few projects with AA on IDEA
You have to enable android annotation processing on File->Other Settings->Default Settings..
goto of your app build.gradle
and remove
apt "org.androidannotations:androidannotations:{xxx}"
compile 'org.androidannotations:androidannotations-api:{xxx}'
then put it again
apt "org.androidannotations:androidannotations:{xxx}"
compile 'org.androidannotations:androidannotations-api:{xxx}'
and rebuild
it worked for me

Conversion to Dalvik format failed with error 1 with javax/net/SocketFactory.class

Encounter this problem when trying to Build Project getting such output in console:
[2010-07-19 23:29:23 - myProject]
trouble processing "javax/net/SocketFactory.class":
[2010-07-19 23:29:23 - myProject]
Attempt to include a core VM class in something other than a core library.
It is likely that you have attempted to include the core library from a desktop
virtual machine into an application, which will most assuredly not work. If
you really intend to build a core library -- which is only appropriate as
part of creating a full virtual machine binary, as opposed to compiling an
application -- then use the "--core-library" option to suppress this error
message. If you go ahead and use "--core-library" but are in fact building
an application, then please be aware that your build will still fail at some
point; you will simply be denied the pleasure of reading this helpful error
message.
[2010-07-19 23:29:23 - myProject] 1 error; aborting
[2010-07-19 23:29:23 - myProject] Conversion to Dalvik format failed with error 1
I was looking for my project to use the package javax, not found, clean all also does not help. what I am doing wrong?
Update
Sorry guys, but I could not find good fix for that, I want to emphasize the fact, that i dont use SocketFactory class in my project at all! source code was not changed before this problem, and that's why i think that problem in eclipse or adt or something else, BUT if i use ant(generated by sdk) to build this project there is no problem!!!
I solve this problem by removing Eclipse, Android SDK, Eclipse workspace, and just reinstall them, after this all works fine for now.
Hope this will help someone.
I had the same problem..
This worked for me
project-->properties->java build path->libraries-> remove all including android jars
now go the project browser, right click on the project you are working on,
then android tools---> fix project properties...
do a clean and then build...
I solved the problem (at least for me).
Here's what I did:
Go to Project » Properties » Java Build Path » Libraries
Remove all except the "Android X.Y" click OK.
Go to Project » Clean » Clean projects selected below » select your project and click OK.
That did the trick for me.
Hope it works for you as well
Update: well actually I might have to retract my opinion.. the actions removed the error messages but now I am missing certain classes and methods... arggghhhh
I just restarted Eclipse, and the error didn't appear anymore!
I had the same problem,and solved it as follows:
First clean all jars; (This problem must because your some jars)
Delete the project;
Reimport project;
Make sure your sdk is right, and project select one sdk version;
(This is my issue to solve the problem) Right click your project, and select "build-path", next select "add Librarys", and add your private jars;
clean-build, the problem has fixed;
I just had the same problem and I tried all of the solutions listed here with no success (I was starting to get annoyed). Then I removed the project from the workspace and then imported it again, and there were no problems!
This happened to me this way,
I have a quite an old project which I had to start working again today. I use 'Universal Image Downloader' library for basically every project where I have to deal with lots of images. So in this old project I had the source files of 'Universal Image Downloader' included to it's 'src' path. Back then I was a newbie and slowly I started developing my own library which could handle every day simple Android development tasks very easily. Obviously I included the 'Universal Image Downloader' to this.
After dusting off the old project today the first thing I did was to reference my library to speed up the development process but as I was trying to debug I ran into the "Conversion to Dalvik format failed with error 1" over and over again. First I thought it was the support library but even after clearing all libraries and adding only mine and doing a quick 'Fix project properties' I still got it. After trying various solutions I noticed this in the console "java.lang.IllegalArgumentException: already added: Lcom/nostra13/universalimageloader/cache/disc/BaseDiscCache;"
It was as simple as that... I'm trying to compile a class which has already been compiled.
Solution : I just simply removed all the class files I got from 'Universal Image Downloader' library from the 'src' directory. Since my library references "Universal Image Downloader" library the old project started working just fine.
Hit same problem shown on your log when trying to run an example project which was imported into eclipse.
Additional Info: in eclipse's Problems View I see the following error:
"The project cannot be built until build path errors are resolved"
In my case the imported project find the libraries just right(by just right I mean I can see the external path to each of the android libs in this case 2 libs, android.jar and maps.jar). So no shuffling of libs in my case, but might be your problem.
I followed Spock's suggestion of cleaning the project which I had to clean multiple times until it somehow resolve its issues. After, issue was solved I had to specify an AVD for the project to run and soon after was up and running on the emulator. Also, note that my eclipse is set up to Build Automatically.
In my case I'm not missing any class files or anything after the clean as the build is properly generating them.
Regards!
I was getting the same error. My problem was that i had an android device hooked up to debug with. As soon as I unplugged it I was able to export.
The answer I found was checking the source and library build path in the project's properties. Most likely there will be a duplicate as in something being referenced in both the source and library tabs. So delete the extra in the source tab and then clean the project and you should be good to go.
Either:
javax.net.SocketLibrary is in your source code, or
javax.net.SocketLibrary is included in a JAR file in your project
Under certain conditions it gets its knickers in a twist and the best fix I've found is to remove referenced jars, clean, add them back in and then compile again.
I believe the error can be caused by including the same classes twice.
This error will also occur (and you won't be able to get rid of it by cleaning) when using classes that are not part of the Android environment.
To summarise the information in the link bimbim.in provided (well my understanding when I glanced over it)
The Android Davik VM tries to compile the jars but finds some stuff that it can't compile to .dex files
so
Just create a "lib" directory in the root of the project (where the src, bin res directories are) and add them to the build path. Project Properties... Java Build Path... Libraries.. Add JARs..
I could resolve this issue by creating a new project, looks like the some project settings were creating this issue and could not really find the root cause for that. But, dumping the existing source code onto the new project resovled this issue. If anyone has found the root cause for this problem pls do let me know.
I had the same problem and solved it as follows:
- Go to Project/Properties/Java Build Path/Libraries and remove all JARs except Android
- Do a project clean
- Add the JARs again as External JARs (first time I added them internally, so that might be the problem)
After that the error was gone.
I solved the problem by updating available packages in the Android SDK et AVD manager. No need to remove Eclipse.
Whenever the Project is having the ambitious data. This problem is caused. May be android can't able to find which one choose.
From what I understand, this same cryptic error could be caused from a wide variety of reasons. I've got "Conversion to Dalvik format failed with error 1" error too. In my case the problem was that for some reason Project -> Properties -> Java Compiler was not set to "Enable project specific settings" with proper Java 1.5 settings, but was left to defaults instead (1.6 in my case). Debug, build and test on devices/emulators worked fine, but export always failed with the above error message.
If unsure about the proper settings, create the same project on some alternative location and just copy all needed files from the old project into the new one. This fixed the issue for me.
The next problem with the same error message came from using proguard. Updating to the latest version by replacing the one that came with android sdk, fixed that.
Hope this helps
My problem was having a jar file in my src folder. Removing jars from the build path works, but only if you don't need the jar in question. For people who need the jar in question, make sure that your jar file is not in the project folder (maybe just src subtree, but I would keep it separate to test). Put it on your desktop or something and try the "Add external jar.." option. Be sure to remove the jar from the project filesystem before adding another external. Having both is what causes the problem.
I have done it as the instruction of the first answer and it works.(Linux)
I think the problem may caused by SDK or ADT updates.
I do have to clear all the lib in Java Building path and then use android tools to fix the project. After cleaning and rebuild, it works as before.

Categories

Resources