Open IzzySoft opened 4 years ago
Hello, sorry for answering until now, the latest release is master
is this related to some package manager? I was not the person who released the v2 that's in here either, I suppose I can get back to that practice if there's another release.
We're busy at work with HodlWallet v2 (actual v2 not the android version) which will bring the iOS and Android projects together and will use Electrum to sync due to the deprecation of SPV.
I'm not sure when I can get to this to be honest, due to just building this app will make me invest some time fixing compilation errors with the latest toolkit.
I see there's also a request on the iOS project for this https://github.com/hodlwallet/hodl-wallet-ios/issues/74
Hope it's understandable that this project will become deprecated really soon.
The android app can be built without changes, see 2 Containerfiles I wrote in: https://gitlab.com/walletscrutiny/walletScrutinyCom/-/issues/193 folks want to download apks not from google-play, which require the apk to exists on provider website or in github releases.
To me trying to build with the current tooling does the following:
FAILED: ../../../../build/intermediates/cmake/hodlRelease/obj/armeabi-v7a/libcore-lib.so
: && /Users/igor/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang --target=armv7-none-linux-androideabi23 --gcc-toolchain=/Users/igor/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64 --sysroot=/Users/igor/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -Werror=format-security -DBITCOIN_TESTNET=0 -DANDROID_STL=gnustl_static -DANDROID_TOOLCHAIN=clang -Oz -DNDEBUG -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libgcc_real.a -Wl,--exclude-libs,libatomic.a -static-libstdc++ -Wl,--build-id=sha1 -Wl,--no-rosegment -Wl,--fatal-warnings -Wl,--exclude-libs,libunwind.a -Wl,--no-undefined -Qunused-arguments -shared -Wl,-soname,libcore-lib.so -o ../../../../build/intermediates/cmake/hodlRelease/obj/armeabi-v7a/libcore-lib.so CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/BRAddress.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/BRBase58.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/BRBech32.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/BRBIP32Sequence.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/BRBIP38Key.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/BRBIP39Mnemonic.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/BRBloomFilter.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/BRCrypto.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/BRKey.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/BRMerkleBlock.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/BRPaymentProtocol.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/BRPeer.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/BRPeerManager.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/BRSet.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/BRTransaction.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/BRWallet.c.o CMakeFiles/core-lib.dir/src/main/jni/transition/core.c.o CMakeFiles/core-lib.dir/src/main/jni/transition/JNIBase58.c.o CMakeFiles/core-lib.dir/src/main/jni/transition/JNIBIP32Sequence.c.o CMakeFiles/core-lib.dir/src/main/jni/transition/JNIKey.c.o CMakeFiles/core-lib.dir/src/main/jni/transition/PeerManager.c.o CMakeFiles/core-lib.dir/src/main/jni/transition/wallet.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/Java/BRCoreJni.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCoreJniReference.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCoreAddress.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCoreChainParams.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCorePeer.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCoreMasterPubKey.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCoreKey.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCoreMerkleBlock.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCorePeerManager.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCoreTransaction.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCoreTransactionInput.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCoreTransactionOutput.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCorePaymentProtocol.c.o CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCoreWallet.c.o -landroid -llog -latomic -lm && :
ld: error: duplicate symbol: transactionInputClass
>>> defined at co_hodlwallet_core_BRCoreTransaction.c:33 (../../../../src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCoreTransaction.c:33)
>>> CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCoreTransaction.c.o:(transactionInputClass)
>>> defined at co_hodlwallet_core_BRCorePaymentProtocol.c:35 (../../../../src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCorePaymentProtocol.c:35)
>>> CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCorePaymentProtocol.c.o:(.bss.transactionInputClass+0x0)
ld: error: duplicate symbol: transactionInputConstructor
>>> defined at co_hodlwallet_core_BRCoreTransaction.c:34 (../../../../src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCoreTransaction.c:34)
>>> CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCoreTransaction.c.o:(transactionInputConstructor)
>>> defined at co_hodlwallet_core_BRCorePaymentProtocol.c:36 (../../../../src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCorePaymentProtocol.c:36)
>>> CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCorePaymentProtocol.c.o:(.bss.transactionInputConstructor+0x0)
ld: error: duplicate symbol: transactionOutputClass
>>> defined at co_hodlwallet_core_BRCoreTransaction.c:36 (../../../../src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCoreTransaction.c:36)
>>> CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCoreTransaction.c.o:(transactionOutputClass)
>>> defined at co_hodlwallet_core_BRCorePaymentProtocol.c:38 (../../../../src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCorePaymentProtocol.c:38)
>>> CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCorePaymentProtocol.c.o:(.bss.transactionOutputClass+0x0)
ld: error: duplicate symbol: transactionOutputConstructor
>>> defined at co_hodlwallet_core_BRCoreTransaction.c:37 (../../../../src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCoreTransaction.c:37)
>>> CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCoreTransaction.c.o:(transactionOutputConstructor)
>>> defined at co_hodlwallet_core_BRCorePaymentProtocol.c:39 (../../../../src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCorePaymentProtocol.c:39)
>>> CMakeFiles/core-lib.dir/src/main/jni/breadwallet-core/Java/co_hodlwallet_core_BRCorePaymentProtocol.c.o:(.bss.transactionOutputConstructor+0x0)
clang: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
I was able to build it, but this is the new diff on the breadwallet-core
library...
diff --git a/Java/co_hodlwallet_core_BRCorePaymentProtocol.c b/Java/co_hodlwallet_core_BRCorePaymentProtocol.c
index 2bc284a..9ac798e 100644
--- a/Java/co_hodlwallet_core_BRCorePaymentProtocol.c
+++ b/Java/co_hodlwallet_core_BRCorePaymentProtocol.c
@@ -29,39 +29,39 @@
//
// Statically Initialize Java References
//
-jclass transactionClass;
-jmethodID transactionConstructor;
+jclass transactionClassPaymentProtocol;
+jmethodID transactionConstructorPaymentProtocol;
-jclass transactionInputClass;
-jmethodID transactionInputConstructor;
+jclass transactionInputClassPaymentProtocol;
+jmethodID transactionInputConstructorPaymentProtocol;
-jclass transactionOutputClass;
-jmethodID transactionOutputConstructor;
+jclass transactionOutputClassPaymentProtocol;
+jmethodID transactionOutputConstructorPaymentProtocol;
static void commonStaticInitialize(JNIEnv *env) {
//
- transactionClass = (*env)->FindClass(env, "co/hodlwallet/core/BRCoreTransaction");
- assert (NULL != transactionClass);
- transactionClass = (*env)->NewGlobalRef(env, transactionClass);
+ transactionClassPaymentProtocol = (*env)->FindClass(env, "co/hodlwallet/core/BRCoreTransaction");
+ assert (NULL != transactionClassPaymentProtocol);
+ transactionClassPaymentProtocol = (*env)->NewGlobalRef(env, transactionClassPaymentProtocol);
- transactionConstructor = (*env)->GetMethodID(env, transactionClass, "<init>", "(J)V");
- assert (NULL != transactionConstructor);
+ transactionConstructorPaymentProtocol = (*env)->GetMethodID(env, transactionClassPaymentProtocol, "<init>", "(J)V");
+ assert (NULL != transactionConstructorPaymentProtocol);
//
- transactionInputClass = (*env)->FindClass(env, "co/hodlwallet/core/BRCoreTransactionInput");
- assert (NULL != transactionInputClass);
- transactionInputClass = (*env)->NewGlobalRef(env, transactionInputClass);
+ transactionInputClassPaymentProtocol = (*env)->FindClass(env, "co/hodlwallet/core/BRCoreTransactionInput");
+ assert (NULL != transactionInputClassPaymentProtocol);
+ transactionInputClassPaymentProtocol = (*env)->NewGlobalRef(env, transactionInputClassPaymentProtocol);
- transactionInputConstructor = (*env)->GetMethodID(env, transactionInputClass, "<init>", "(J)V");
- assert (NULL != transactionInputConstructor);
+ transactionInputConstructorPaymentProtocol = (*env)->GetMethodID(env, transactionInputClassPaymentProtocol, "<init>", "(J)V");
+ assert (NULL != transactionInputConstructorPaymentProtocol);
//
- transactionOutputClass = (*env)->FindClass(env, "co/hodlwallet/core/BRCoreTransactionOutput");
- assert(NULL != transactionOutputClass);
- transactionOutputClass = (*env)->NewGlobalRef(env, transactionOutputClass);
+ transactionOutputClassPaymentProtocol = (*env)->FindClass(env, "co/hodlwallet/core/BRCoreTransactionOutput");
+ assert(NULL != transactionOutputClassPaymentProtocol);
+ transactionOutputClassPaymentProtocol = (*env)->NewGlobalRef(env, transactionOutputClassPaymentProtocol);
- transactionOutputConstructor = (*env)->GetMethodID(env, transactionOutputClass, "<init>", "(J)V");
- assert (NULL != transactionOutputConstructor);
+ transactionOutputConstructorPaymentProtocol = (*env)->GetMethodID(env, transactionOutputClassPaymentProtocol, "<init>", "(J)V");
+ assert (NULL != transactionOutputConstructorPaymentProtocol);
}
// ======================
@@ -96,13 +96,13 @@ Java_co_hodlwallet_core_BRCorePaymentProtocolRequest_getOutputs
size_t outputCount = request->details->outCount;
- jobjectArray outputs = (*env)->NewObjectArray (env, outputCount, transactionOutputClass, 0);
+ jobjectArray outputs = (*env)->NewObjectArray (env, outputCount, transactionOutputClassPaymentProtocol, 0);
for (int i = 0; i < outputCount; i++) {
BRTxOutput *output = (BRTxOutput *) calloc (1, sizeof (BRTxOutput));
transactionOutputCopy (output, &request->details->outputs[i]);
- jobject outputObject = (*env)->NewObject (env, transactionOutputClass, transactionOutputConstructor, (jlong) output);
+ jobject outputObject = (*env)->NewObject (env, transactionOutputClassPaymentProtocol, transactionOutputConstructorPaymentProtocol, (jlong) output);
(*env)->SetObjectArrayElement (env, outputs, i, outputObject);
(*env)->DeleteLocalRef (env, outputObject);
@@ -393,12 +393,12 @@ Java_co_hodlwallet_core_BRCorePaymentProtocolPayment_getTransactions
size_t objectCount = payment->txCount;
- jobjectArray objects = (*env)->NewObjectArray (env, objectCount, transactionClass, 0);
+ jobjectArray objects = (*env)->NewObjectArray (env, objectCount, transactionClassPaymentProtocol, 0);
for (int i = 0; i < objectCount; i++) {
BRTransaction *transaction = BRTransactionCopy (payment->transactions[i]);
- jobject object = (*env)->NewObject (env, transactionClass, transactionConstructor, (jlong) transaction);
+ jobject object = (*env)->NewObject (env, transactionClassPaymentProtocol, transactionConstructorPaymentProtocol, (jlong) transaction);
(*env)->SetObjectArrayElement (env, objects, i, object);
(*env)->DeleteLocalRef (env, object);
@@ -420,13 +420,13 @@ Java_co_hodlwallet_core_BRCorePaymentProtocolPayment_getRefundTo
size_t objectCount = payment->refundToCount;
- jobjectArray objects = (*env)->NewObjectArray (env, objectCount, transactionOutputClass, 0);
+ jobjectArray objects = (*env)->NewObjectArray (env, objectCount, transactionOutputClassPaymentProtocol, 0);
for (int i = 0; i < objectCount; i++) {
BRTxOutput *target = (BRTxOutput *) calloc (1, sizeof (BRTxOutput));
transactionOutputCopy (target, &payment->refundTo[i]);
- jobject object = (*env)->NewObject (env, transactionOutputClass, transactionOutputConstructor, (jlong) target);
+ jobject object = (*env)->NewObject (env, transactionOutputClassPaymentProtocol, transactionOutputConstructorPaymentProtocol, (jlong) target);
(*env)->SetObjectArrayElement (env, objects, i, object);
(*env)->DeleteLocalRef (env, object);
@@ -550,12 +550,12 @@ Java_co_hodlwallet_core_BRCorePaymentProtocolACK_getTransactions
size_t objectCount = payment->txCount;
- jobjectArray objects = (*env)->NewObjectArray (env, objectCount, transactionClass, 0);
+ jobjectArray objects = (*env)->NewObjectArray (env, objectCount, transactionClassPaymentProtocol, 0);
for (int i = 0; i < objectCount; i++) {
BRTransaction *transaction = BRTransactionCopy (payment->transactions[i]);
- jobject object = (*env)->NewObject (env, transactionClass, transactionConstructor, (jlong) transaction);
+ jobject object = (*env)->NewObject (env, transactionClassPaymentProtocol, transactionConstructorPaymentProtocol, (jlong) transaction);
(*env)->SetObjectArrayElement (env, objects, i, object);
(*env)->DeleteLocalRef (env, object);
@@ -577,13 +577,13 @@ Java_co_hodlwallet_core_BRCorePaymentProtocolACK_getRefundTo
size_t objectCount = payment->refundToCount;
- jobjectArray objects = (*env)->NewObjectArray (env, objectCount, transactionOutputClass, 0);
+ jobjectArray objects = (*env)->NewObjectArray (env, objectCount, transactionOutputClassPaymentProtocol, 0);
for (int i = 0; i < objectCount; i++) {
BRTxOutput *target = (BRTxOutput *) calloc (1, sizeof (BRTxOutput));
transactionOutputCopy (target, &payment->refundTo[i]);
- jobject object = (*env)->NewObject (env, transactionOutputClass, transactionOutputConstructor, (jlong) target);
+ jobject object = (*env)->NewObject (env, transactionOutputClassPaymentProtocol, transactionOutputConstructorPaymentProtocol, (jlong) target);
(*env)->SetObjectArrayElement (env, objects, i, object);
(*env)->DeleteLocalRef (env, object);
diff --git a/Java/co_hodlwallet_core_BRCoreWallet.c b/Java/co_hodlwallet_core_BRCoreWallet.c
index cc90895..fee819f 100644
--- a/Java/co_hodlwallet_core_BRCoreWallet.c
+++ b/Java/co_hodlwallet_core_BRCoreWallet.c
@@ -57,8 +57,8 @@ static void txDeleted(void *info, UInt256 txHash, int notifyUser, int recommendR
static jclass addressClass;
static jmethodID addressConstructor;
-static jclass transactionClass;
-static jmethodID transactionConstructor;
+static jclass transactionClassPaymentProtocol;
+static jmethodID transactionConstructorPaymentProtocol;
/*
@@ -223,13 +223,13 @@ Java_co_hodlwallet_core_BRCoreWallet_jniGetTransactions
BRTransaction **transactions = (BRTransaction **) calloc (transactionCount, sizeof (BRTransaction *));
transactionCount = BRWalletTransactions (wallet, transactions, transactionCount);
- jobjectArray transactionArray = (*env)->NewObjectArray (env, transactionCount, transactionClass, 0);
+ jobjectArray transactionArray = (*env)->NewObjectArray (env, transactionCount, transactionClassPaymentProtocol, 0);
// TODO: Decide if copy is okay; if not, be sure to mark 'isRegistered = true'
// We should not copy; but we need to deal with wallet-initiated 'free'
for (int index = 0; index < transactionCount; index++) {
jobject transactionObject =
- (*env)->NewObject (env, transactionClass, transactionConstructor,
+ (*env)->NewObject (env, transactionClassPaymentProtocol, transactionConstructorPaymentProtocol,
(jlong) JNI_COPY_TRANSACTION(transactions[index]));
assert (!(*env)->IsSameObject (env, transactionObject, NULL));
@@ -256,11 +256,11 @@ Java_co_hodlwallet_core_BRCoreWallet_getTransactionsConfirmedBefore
BRTransaction **transactions = (BRTransaction **) calloc (transactionCount, sizeof (BRTransaction *));
BRWalletTxUnconfirmedBefore (wallet, transactions, transactionCount, blockHeight);
- jobjectArray transactionArray = (*env)->NewObjectArray (env, transactionCount, transactionClass, 0);
+ jobjectArray transactionArray = (*env)->NewObjectArray (env, transactionCount, transactionClassPaymentProtocol, 0);
for (int index = 0; index < transactionCount; index++) {
jobject transactionObject =
- (*env)->NewObject (env, transactionClass, transactionConstructor,
+ (*env)->NewObject (env, transactionClassPaymentProtocol, transactionConstructorPaymentProtocol,
(jlong) JNI_COPY_TRANSACTION(transactions[index]));
(*env)->SetObjectArrayElement (env, transactionArray, index, transactionObject);
@@ -371,7 +371,7 @@ Java_co_hodlwallet_core_BRCoreWallet_createTransaction
return NULL == transaction
? NULL
- : (*env)->NewObject(env, transactionClass, transactionConstructor, (jlong) transaction);
+ : (*env)->NewObject(env, transactionClassPaymentProtocol, transactionConstructorPaymentProtocol, (jlong) transaction);
}
/*
@@ -399,7 +399,7 @@ JNIEXPORT jobject JNICALL Java_co_hodlwallet_core_BRCoreWallet_createTransaction
return NULL == transaction
? NULL
- : (*env)->NewObject(env, transactionClass, transactionConstructor, (jlong) transaction);
+ : (*env)->NewObject(env, transactionClassPaymentProtocol, transactionConstructorPaymentProtocol, (jlong) transaction);
}
@@ -515,7 +515,7 @@ Java_co_hodlwallet_core_BRCoreWallet_jniTransactionForHash
uint8_t *hashData = (uint8_t *) (*env)->GetByteArrayElements(env, hashByteArray, 0);
- return (*env)->NewObject (env, transactionClass, transactionConstructor,
+ return (*env)->NewObject (env, transactionClassPaymentProtocol, transactionConstructorPaymentProtocol,
(jlong) JNI_COPY_TRANSACTION(BRWalletTransactionForHash(wallet, UInt256Get(hashData))));
}
@@ -688,12 +688,12 @@ JNIEXPORT void JNICALL Java_co_hodlwallet_core_BRCoreWallet_initializeNative
addressConstructor = (*env)->GetMethodID(env, addressClass, "<init>", "(J)V");
assert (NULL != addressConstructor);
- transactionClass = (*env)->FindClass (env, "co/hodlwallet/core/BRCoreTransaction");
- assert (NULL != transactionClass);
- transactionClass = (*env)->NewGlobalRef (env, transactionClass);
+ transactionClassPaymentProtocol = (*env)->FindClass (env, "co/hodlwallet/core/BRCoreTransaction");
+ assert (NULL != transactionClassPaymentProtocol);
+ transactionClassPaymentProtocol = (*env)->NewGlobalRef (env, transactionClassPaymentProtocol);
- transactionConstructor = (*env)->GetMethodID(env, transactionClass, "<init>", "(J)V");
- assert (NULL != transactionConstructor);
+ transactionConstructorPaymentProtocol = (*env)->GetMethodID(env, transactionClassPaymentProtocol, "<init>", "(J)V");
+ assert (NULL != transactionConstructorPaymentProtocol);
}
//
@@ -749,8 +749,8 @@ txAdded(void *info, BRTransaction *tx) {
assert (NULL != listenerMethod);
// Create the BRCoreTransaction
- jobject transaction = (*env)->NewObject (env, transactionClass, transactionConstructor,
- (jlong) JNI_COPY_TRANSACTION(tx));
+ jobject transaction = (*env)->NewObject (env, transactionClassPaymentProtocol, transactionConstructorPaymentProtocol,
+ (jlong) JNI_COPY_TRANSACTION(tx));
// Invoke the callback with the provided transaction
(*env)->CallVoidMethod(env, listener,
Can you provide detailed steps you did in order to compile? on what environment/platform?
Leo rebuild result in different libcore-lib.so
at:
https://gitlab.com/walletscrutiny/walletScrutinyCom/-/issues/193#note_539669190
and my recompile with alpine Container result in different file then the debian Container:
https://gitlab.com/walletscrutiny/walletScrutinyCom/-/issues/193#note_541358090
@emanuelb I compile on Android Studio on OSX there's no steps just click Run
and the changes I did.
It looks like you've stopped tagging and providing the APK here at Github a while ago: the last version available here is v2, while at Play there is v3.3.5. Could you pick up releasing here again, so folks without Play can use up-to-date versions? Thanks!