Hello,

tl;dr: after updating to 4.2.8 preview, you might see a build breakage
to your existing project that references Mono.Android.Support.v4.dll
and contains android-support-v4.jar as AndroidJavaLibrary.
In that case, removing the AndroidJavaLibrary item is needed.

----
Starting from version 4.2.8, new "embedded jar" feature will allow
us (everyone) to embed the jar into the binding dll, which will
automatically add the jar to application package (as if we specified
AndroidJavaLibrary). This should reduce complicated procedure
to pass the library to both binding and app projects.

This won't happen unless you specify "EmbeddedJar" build action to
binding jar file. You can still use InputJar. (Though starting from 4.2.8
it will be the default action for jar files in Jars directory.)

We applied this to our Mono.Android.Support.v4.dll so now it this dll
embeds android-support-v4.jar.

This change however causes side effect; any project that has reference
to older android-support-v4.jar will not build unless you remove it.

The reason is explained at bug #7946 but here I copy the entire text:
----
This is not a bug but explicitly designed behavior. We should NOT
remove whatever users specified *arbitrarily*. That rather brings
confusion to users and it should be always user who decide which
to leave into app package and which to discard.

To make it clear, when the jars, one in the dll and others in app
projects, are IDENTICAL (which means both have identical name
*and* identical content), they don't result in conflict. For any *other*
cases, you should be *aware* that the jar is *inconsistent* with the
actual jar which is being used in the application.

You are seeing the error message because you use *inconsistent*
support-v4 jar.

EmbeddedJar feature is not specific to Mono.Android.Support.v4.dll.
Any user bindings fall into the same *possibly conflicting* situation.
You will get furious if we arbitrarily determine that "your jar in the
application is extraneous" while it might be *newer* (!) especially in
such scenario like this: the application also uses newer jar as
AndroidJavaLibrary to invoke new API feature, and it fails because
we silently drop the newer jar due to this *wrong* assumption.

Of course there is no deterministic way to identify *which* library is
actually newer, and there is no chance to actually use the application
jar if you have to stick to the dll, which is not *always* true - users
could use different binding dll.

We made the error message very clear to indicate what to do: you
have to either alter the dll or remove the application jar (or any
conflicting jar in other dll).

Hence the current behavior is the only way to assure valid jar
packaging. Regardless of whether we embed the jar into the dll
or not in this version, such possibly-mismatching jar-vs-dll issue
could have happened, so canceling EmbedJar is worse choice.

Hope this explanation makes sense.

Atsushi Eno

_______________________________________________
Monodroid mailing list
Monodroid@lists.ximian.com

UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid

Reply via email to