I am writing an Android app, and I'd like to be able to decode data stored in JSON format, so I downloaded jackon.databind and its dependencies into my src folder. I tried to find a jar file, but I couldn't, so I just downloaded the raw source. I'd never integrated another open source library into my source code, and I found it far more difficult than I imagined it would be.
Long complicated story
Skip ahead to see my question
My directory structure now looks like this:
app/src/main/java
+-- com
|-- fasterxml
| +-- jackson
| |-- annotation
| | +-- many .java files
| |-- core
| | +-- many .java files
| +-- databind
| +-- many .java files
+-- my_name
+-- my_app_name
+-- my .java files
This didn't work, because some of the files in jackson/databind/ext
had unresolved references to other packages. I tried deleting the files that were giving errors, because they didn't seem to be used by the main stuff I wanted to use, but then I got this error:
Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.
> com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/LICENSE
File1: C:\Users\my_name\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-core\2.4.1\b130bcfb5a9c410c3cbd2e0adec9437e69a39e2c\jackson-core-2.4.1.jar
File2: C:\Users\my_name\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-annotations\2.4.1\55605135bd7b836612e0bba7037c9669f6ccf89f\jackson-annotations-2.4.1.jar
File3: C:\Users\my_name\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-databind\2.4.1\f07c773f7b3a03c3801d405cadbdc93f7548e321\jackson-databind-2.4.1.jar
I had no idea what it meant. This answer recommended setting multiDexEnabled
to true
inside defaultConfig
, but that didn't help until I also followed this answer's advice to exclude the duplicated files inside the packagingOptions
.
After all that, com.fasterxml.jackson.databind.cfg.PackageVersion
remained an unresolved reference until I found the same file with a .in
tacked onto the end of it. Removing that and renaming the package finally got the app to compile.
Now for my question:
All of that was incredibly frustrating and complicated for someone who had never done it before, and it was mostly trial-and-error. Surely there was a simpler and easier way to do it? Furthermore, I am now stuck manually updating these packages, as the cloned repository contained a lot of extra stuff that I didn't need because I just needed the source code, so I can't just do a git pull
and expect everything to come down all right. Including the entire repository in my java
folder gave errors about the package not matching the directory structure.