Protect GeoJSONFeature from ProGuard alterations #5813
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Closes #5812
Why is this the best possible solution? Were any other approaches considered?
We use
com.fasterxml.jackson
in javarosa to map geojson files into java classes. One of those classes isGeoJSONFeature
class with itsprivate Map<String, String> properties
field. So properties are pairs where both keys and values should be strings. When it comes to keys it's not a problem because in geojson they are always just strings but values could be integers for example:"properties": { "_uid_": 1,...
com.fasterxml.jackson
takes care of that and automatically converts those values into strings because that's what we expectprivate Map<String, String> properties
. However, if minification is enabled ProGuard messes up with that class disabling that conversion.The fix is to let ProGuard know that this class should be intact.
Another solution would be to change
private Map<String, String> properties
toprivate Map<String, Object> properties
and always programmatically convert those object values to strings. However, ifcom.fasterxml.jackson
does that for us (if ProGuard does not break it) we should still take advantage of it I guess.How does this change affect users? Describe intentional changes to behavior and behavior that could have accidentally been affected by code changes. In other words, what are the regression risks?
Testing the form shared on the forum (see the issue) should be enough. I can't be sure that we don't have other issues like this one caused by proguard but the fix itself is safe so we can focus on testing the described scenario.
Do we need any specific form for testing your changes? If so, please attach one.
No.
Does this change require updates to documentation? If so, please file an issue here and include the link below.
No.
Before submitting this PR, please make sure you have:
./gradlew checkAll
and confirmed all checks still pass OR confirm CircleCI build passes and run./gradlew connectedDebugAndroidTest
locally.