diff --git a/library/build.gradle.kts b/library/build.gradle.kts index a57535c..dc2df62 100644 --- a/library/build.gradle.kts +++ b/library/build.gradle.kts @@ -24,7 +24,7 @@ android { externalNativeBuild { cmake { - arguments += listOf("-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON") + arguments += listOf("-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON", "-DCMAKE_POLICY_VERSION_MINIMUM=3.5") targets("session_util") } } @@ -40,10 +40,7 @@ android { buildTypes { release { isMinifyEnabled = false - proguardFiles( - getDefaultProguardFile("proguard-android-optimize.txt"), - "proguard-rules.pro" - ) + consumerProguardFile(file("proguard-rules.pro")) externalNativeBuild { cmake { diff --git a/library/proguard-rules.pro b/library/proguard-rules.pro index 481bb43..d790fc8 100644 --- a/library/proguard-rules.pro +++ b/library/proguard-rules.pro @@ -5,17 +5,7 @@ # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file +-keep class network.loki.messenger.libsession_util.** { *; } +-keepnames class network.loki.messenger.libsession_util.** { *; } +-keep class kotlin.Pair { *; } +-keep class kotlin.Triple { *; } \ No newline at end of file diff --git a/library/src/main/cpp/config_base.cpp b/library/src/main/cpp/config_base.cpp index 5c07ec4..077a1fd 100644 --- a/library/src/main/cpp/config_base.cpp +++ b/library/src/main/cpp/config_base.cpp @@ -4,11 +4,27 @@ std::pair> extractHashAndData(JNIEnv *env, jobject kotlin_pair) { - jni_utils::JavaLocalRef pair(env, env->GetObjectClass(kotlin_pair)); - jfieldID first = env->GetFieldID(pair.get(), "first", "Ljava/lang/Object;"); - jfieldID second = env->GetFieldID(pair.get(), "second", "Ljava/lang/Object;"); - auto hash_as_jstring = jni_utils::JavaLocalRef(env, reinterpret_cast(env->GetObjectField(kotlin_pair, first))); - auto data_as_jbytes = jni_utils::JavaLocalRef(env, reinterpret_cast(env->GetObjectField(kotlin_pair, second))); + struct KotlinPairClass : jni_utils::JavaClassInfo { + jmethodID get_first; + jmethodID get_second; + + KotlinPairClass(JNIEnv *env, jobject obj) + : JavaClassInfo(env, obj) + , get_first(env->GetMethodID(java_class, "getFirst", "()Ljava/lang/Object;")) + , get_second(env->GetMethodID(java_class, "getSecond", "()Ljava/lang/Object;")) {} + }; + + static KotlinPairClass pair_class(env, kotlin_pair); + + jni_utils::JavaLocalRef hash_as_jstring( + env, + reinterpret_cast(env->CallObjectMethod(kotlin_pair, pair_class.get_first)) + ); + + jni_utils::JavaLocalRef data_as_jbytes( + env, + reinterpret_cast(env->CallObjectMethod(kotlin_pair, pair_class.get_second)) + ); return std::make_pair( std::string(jni_utils::JavaStringRef(env, hash_as_jstring.get()).view()), diff --git a/library/src/main/java/network/loki/messenger/libsession_util/util/Logger.kt b/library/src/main/java/network/loki/messenger/libsession_util/util/Logger.kt index 60ded2d..2860864 100644 --- a/library/src/main/java/network/loki/messenger/libsession_util/util/Logger.kt +++ b/library/src/main/java/network/loki/messenger/libsession_util/util/Logger.kt @@ -1,8 +1,11 @@ package network.loki.messenger.libsession_util.util +import androidx.annotation.Keep + typealias LogLevel = Int interface Logger { + @Keep fun log(message: String, category: String, level: LogLevel) companion object {