gs1 / gs1-syntax-engine

GS1 Syntax Engine
Apache License 2.0
27 stars 5 forks source link

Android library #4

Closed budo385 closed 4 months ago

budo385 commented 8 months ago

Android library and an update of android app. Android library is configured to be published on maven - check https://jitpack.io/#budo385/gs1-syntax-engine

budo385 commented 8 months ago

Adding "how to use" for android library, in Readme, would be nice if you accept the pr.

terryburton commented 5 months ago

Thank you for this PR and apologies for the length of time taken to respond.

The good news is that GS1 has notionally decided to publish and maintain packaged libraries in common platform repositories for the various language bindings provided for the Syntax Engine, provided that the additional maintenance effort can be justified.

To start with, there has just been a release of an npm package. See issue #5 for details.

Concerning this PR, there's some minor issues:

However the above are not so important at this time, because there are broader issues that require further consideration...

The Android app in the source code repository is intended to be a simple demo of how the Java binding for the Syntax Engine native library might be used within an Android app. The functionality and results are not well tested. As such, there is code in the demo app that does not obviously belong in an Android/Java library, and if it were "blessed as such" then it should really be cleaned up and maintained as an API extension to the C native library (so that all bindings can benefit).

Specifically:

The major decision to be made is whether to publish a Java and/or Android library, and where to. My intent so far has been to release a Java library package consisting of a single multi-architecture JAR published on Maven Central. The reasoning is that this benefits all Java developers and if there is no Android app specific helper code in the library then there is little point in also creating and maintaining an Android library — but I'm happy to be educated if this analysis is lacking.

(Because the library is based on native C code, it must be compiled for each of the common target architectures, e.g. x64, x86, arm, arm64. Creating multi-architecture Java library packages is challenging, but there are projects that appear to do this successfully, e.g. https://github.com/OddSource/ifaddrs4u/tree/main/ifaddrs4j)

@budo385 I would be interested to understand the typical Android app development life cycle and Android-specific issues with using native code in a lot more detail than I do at the moment, so we can work out if and how the Syntax Engine can best support Android app development. Would you be prepared to have a call with me to discuss this?

Once the final form of the Java/Android packages is decided we can work on either cleaning up or abandoning this PR.

vinaygopinath commented 5 months ago

@terryburton Not the author, but thanks for the detailed response.

Scanning through the changes in this PR, it looks like it implements using the device camera to scan barcodes and GS1 codes using Google ML Kit in addition to using the Java wrapper in this repo to extract the components of the GS1 code. That seems like opinionated scope creep for an Android library, and I'm on board with your proposal of publishing a JAR accessible from Maven Central purely to parse the scanned string, leaving the task of scanning codes to the application developer.

terryburton commented 5 months ago

@vinaygopinath The scanning code is taken from the example Android app that is already in the repository. So the patch is essentially a cp -a to a new directory that includes some minor changes and new configuration necessary to package assets for repo hosting — but to what aim? The PR does not make this clear, and I'm not an app developer so the purpose it isn't clear to me.

Thank you for taking the time to consider the approach that I outlined concerning the multi-architecture JAR. I conducted some brief testing, but I have had to set things aside for now because of the amount of effort involved. It may be prioritised in the future as a result of community feedback such as what you have provided.

Building the multi-architecture JAR:

How the JAR would work:

Considerations for Android:

That's a lot of steps to put in order and there is still some risk of something critical not working out as intended, so the idea is shelved for now...

Of course if anyone would like to have a go at the above then this will be welcome.

terryburton commented 4 months ago

Summary of discussion related to distributing a multi-architecture JAR via Maven Central captured in issue #7.

No response from original author regarding this PR. Closing.