I’ve run into a few issues with Cordova CLI5, Android 4 and
libraries/frameworks. I will try to explain below, but the issue appears to be
related to the dependency section in build.gradle and each librarie’s
build.gradle file.
We’ve developed a plugin to enable expansion files on Android. It is dependent
on three custom Android libraries, which declare in the plugin.xml file.
<framework src="AndroidLibrary/GoogleExtras/play_licensing/library"
custom="true" />
<framework
src="AndroidLibrary/GoogleExtras/play_apk_expansion/downloader_library"
custom="true"/>
<framework src="AndroidLibrary/GoogleExtras/play_apk_expansion/zip_file"
custom="true" />’
The first problem we ran into we will be submitting a patch to fix. The issue
is that the project’s folder name was prepended to the path when it was
created. We could not reference this in the build-extras.gradle due to the
constant name change. Below is an example where my project’s directory from
cordova create is “foobar"
org.apache.cordova.xapkreader/foobar-library
I spoke with Andrew Grieve via email and he recommend changing the build.js
file in cordova-android to enable the following in creating the settings.gradle
. We can now properly reference the library in a build-extras.gradle
include ":org.apache.cordova.xapkreader:library"
project(":org.apache.cordova.xapkreader:library").projectDir = new
File("org.apache.cordova.xapkreader/foobar-library”)
The second issue we are running into is bigger. Whenever we run a build, we
get DEX errors. There are two specific cases we are running into. The first
is for general Cordova errors, the second is specific to our
AndroidLibrary/GoogleExtras/play_licensing/library .
com.android.dex.DexException: Multiple dex files define
I believe this is due to the following
1. The main build.gradle has dependencies to all the sub projects/libraries
which get built
2. The libraries each have their own build.gradle which has a dependency on
CordovaLib
In the general case, it appears that with each library CordovaLib is being
compiled into the jar and causes the error for DEX since it includes multiple
definitions. If I open up Android studio and change each libraries
build.gradle dependency to only have the following (the reference to CordovaLib
was removed)
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
}
This removes the DEX errors for Cordova. The issue specific to our plugin is
that I have to modify the main build.gradle dependency to remove the references
for the following, which is a custom library we’ve declared.
debugCompile project(path: ":org.apache.cordova.xapkreader:library",
configuration: "debug")
releaseCompile project(path: ":org.apache.cordova.xapkreader:library",
configuration: "release")
Removing those references allows the
AndroidLibrary/GoogleExtras/play_apk_expansion/downloader_library
build-extras.gradle file to reference it and build successfully.
dependencies {
compile(project(':org.apache.cordova.xapkreader:library'))
compile fileTree(dir: 'libs', include: '*.jar')
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]