i've a strange problem with maven and android
I've 3 maven project and 2 normal java maven project divided in this manner :
normal project :
model project ... packaged as jar ... contains java Pojo Bean and Interface.
Dao Project ... packaged as jar ... contains Db Logic - Depend on model Project
Android Application Maven project
ContentProvider ... packaged as apk ... contains ContentProviders only. Depends on Dao Project
Editors ... packaged as apk ... contains only Editor, Depends on Dao project
MainApp ... packaged as apk ... contains MyApp, Depends on DAO ...
The Problem is that if i modify DAO Project , Then do a maven clean and maven install of all apk project, then run as Android Application within Eclipse, i don't see updated app on my Emulator.
Nicely if i shut down my ubuntu workstation and restart it i can see The updated app on my Emulator.
Do you know a solution for this issue ?
thanks and regards
Occasionally, I will have to remove the app from the emulator to get the new version to deploy properly from within Eclipse. I use the following maven command from within the project directory to remove the app. This command assumes you are using the Android Maven Plugin with your Android app.
mvn android:undeploy
Conversely, you can also deploy the app with the following command.
mvn android:deploy
Related
I have an issue that dependencies of a project that is referenced as a dependency module in my android app seem not to be included into the .apk file of my android application.
Project Setup
Android App (Android studio & gradle)
Java desktop application (IntelliJ/maven/gradle project)
Java model (classes & features used by both android & desktop app)
The "Java model" is added as a dependency to both Android App and Java Desktop application.
When I run the desktop application, the dependencies of the JavaModel are resolved via maven, incuded into the application and everything runs smoothly.
From an Android Studio point of view, I have imported the JavaModel as a module into the android project and gradle is used to resolve the dependencies. I have set up the following gradle files:
Android App "settings.gradle"
include ':app'
include ':JavaModel'
project(':JavaModel').projectDir=new File('../../JavaModel')
Android App "build.gradle"
dependencies {
compile project(':JavaModel')
// and more...
}
Java Model "build.gradle"
dependencies {
compile(
'org.apache.httpcomponents:httpclient:4.4.1'
// and more ...
)
}
Everything compiles just fine without any errors and a .apk can be created and runs on my test device. However, as soon as I access features within the app that are provided by the "Java model" (in this example, I am using the HttpClient class from the org.apache.httpcomponents:httpclient:4.4.1 dependency), I get the following exception:
java.lang.ClassNotFoundException: Didn't find class
"org.apache.http.impl.client.HttpClients"
Plese note that this is just an example case and the issue also occurs with all other dependencies that are only referenced in the "JavaModel", but not in the Android app itself.
It seems to me like the dependencies of the "JavaModel" work just fine at compile time, since everything executes just fine, but are then not included into the .apk file and therefore cause this exeption.
The question is how can I (correctly) make sure that even dependencies of a dependency project are included into the .apk file?
Apache http client conflicts with android one, if you want to use recent one, you need to use android port https://hc.apache.org/httpcomponents-client-4.3.x/android-port.html
Regarding "JavaModel". If dependencies of JavaModel are compile dependencies it all must work fine (assuming dependency does not have fancy code like classloaders)
I'm following a tutorial to integrate facebook sdk in my android project, I'm using eclipse currently , tutorial is asking me to define repositories { mavenCentral() } in build.gradle file , but I don't know in which file I've to add this in eclipse... ant.properties, project.properties or any other file?
I've read some related threads , but I could not find in which file I've to change.
Defining Repository in Maven
maven repository eclipse project
You are working in Eclipse and the tutorial asks you to add the Maven central to your Gradle configuration which you (properly) don't have in Eclipse.
You basically have two options:
Get a Gradle plugin for Eclipse (like this: http://marketplace.eclipse.org/content/gradle-integration-eclipse-44)
Get Android Studio (http://developer.android.com/tools/studio/index.html), where Gradle is already an integrated part of the IDE.
Both options means that you have to get your head around what Gradle does, and how it works, but it'll properly be worth the effort.
Ok, so, I'm developing an app for the Amazon FireTV, so I have to use Eclipse.
I'm trying to use this socket.io Java client library: https://github.com/nkzawa/socket.io-client.java
at the bottom of this post, i included the installation instructions, which I'm not really sure how to make work with my existing Eclipse project (I'm new to maven). so from my understanding, do i just add a pom.xml file and a test folder? Then paste in their "maven central code" into the pom.xml? Will this cause any issues with the other code in my project? Or, can I just copy and paste all their SRC code into my project, since it's MIT licensed? I'd rather learn how to do this the proper way. The project is not in JAR format, so I was thinking maybe copying the folder structure into my project then using the Project Properties, Add Library option to connect to my code? Maybe?
Their installation instructions, (available in their readme.md):
The latest artifact is available on Maven Central. Add the following dependency to your pom.xml.
<dependencies>
<dependency>
<groupId>com.github.nkzawa</groupId>
<artifactId>socket.io-client</artifactId>
<version>0.3.0</version>
</dependency>
</dependencies>
Or to install it manually, please refer dependencies to pom.xml.
Add it as a gradle dependency for Android Studio, in build.gradle:
compile 'com.github.nkzawa:socket.io-client:0.3.0'
So, I learned that Maven Central has JAR files available for download. That way, you can just include them in your project via the Project Properties dependencies options. Without having to learn Maven.
You need to first understand how Maven works (and what pom.xml stands for). Maven is a tool that helps you automatically install dependencies (files need) for a given project. E.g if a project needs to process json files, it will need to "import" a json library which will then be a dependency for that project. When you add the dependency file above to your project, and run Maven install, it goes and fetches all the dependencies for your socket.io-client to work.
Unfortunately, Maven does work very well in building android application projects and can be fairly complex to setup correctly (from my limited experience). I would advise that you manually download the jar dependencies and then add them to your android classpath if you are not keen on investing a lot of time learning to use Maven.
To manually install the files .. you can create a default maven project (http://www.tech-recipes.com/rx/39279/create-a-new-maven-project-in-eclipse/) in eclipse, add the dependency file above to your pom.xml and run Maven-install. This will download the dependencies you need to your Maven local repository. You can then copy them from there to your android project.
Regarding installing the socket.io client you can find more on these steps here
http://denvycom.com/blog/socket-io-java-android-without-maven/
I have created android library project with some depndencies managed by maven.
Now I'm trying to run library code from android maven application project.
Code I wrote in library runs, but I'm getting NoClassDefFoundError on first call to dependecy.
Is there any way to make this work?
You may want to have a look at http://androidkickstartr.com/. This tool will create correctly mavenized project for you and you can then copy missing parts from pom.xml.
I am trying to use RobolectricSample application for unit testing Android application.
In the instruction for installation of application with Maven the first step is
ant maven-setup. I could not understand why is this command required and what it will do?
Any explanation will be great help.
According to the Ant build file build.xml, ant maven-setup does two things:
maven-install-jars:
Install 2 required jar libraries (guice-2.0-no_aop.jar & maps.jar) into Maven local repository.
maven-set-android-sdk:
Reset Android SDK path in pom.xml iff <path> is defined in android-maven-plugin.
This is not a elegant solution, ideally all those tasks should be handled purely by Maven. However, as this project provide both Ant and Maven build, it reuse the script from Ant in Maven build lifecycle for convenience.