diff --git a/app/build.gradle b/app/build.gradle index 4b8565090..d64c76e41 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,21 +15,27 @@ android { ndk { abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } buildTypes { release { minifyEnabled true - //shrinkResources true todo: test before enabling, a lot of resources are accessed via getIdentifier and possibly not all have been marked with "keep" + shrinkResources true + debuggable false + jniDebuggable false + renderscriptDebuggable false + } + nouserlib { // same as release, but does not allow the user to provide a library + minifyEnabled true + shrinkResources true debuggable false jniDebuggable false renderscriptDebuggable false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro', 'src/main/proguard.flags' } debug { minifyEnabled true jniDebuggable false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro', 'src/main/proguard.flags' applicationIdSuffix ".debug" } archivesBaseName = "openboard_" + defaultConfig.versionName @@ -82,7 +88,7 @@ dependencies { implementation 'androidx.preference:preference:1.2.1' // includes appcompat implementation 'androidx.recyclerview:recyclerview:1.3.2' implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" - implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.1" + implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2" implementation 'com.github.martin-stone:hsv-alpha-color-picker-android:3.1.0' implementation 'androidx.autofill:autofill:1.1.0' diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index f7bfc889b..1cf31c652 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -1,17 +1,27 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in /home/iwo/android-sdk/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html +# Keep classes and methods that have the @UsedForTesting annotation +-keep @helium314.keyboard.annotations.UsedForTesting class * +-keepclassmembers class * { + @helium314.keyboard.annotations.UsedForTesting *; +} -# Add any project specific keep options here: +# Keep classes and methods that have the @ExternallyReferenced annotation +-keep @helium314.keyboard.annotations.ExternallyReferenced class * +-keepclassmembers class * { + @helium314.keyboard.annotations.ExternallyReferenced *; +} -# 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 *; -#} +# Keep native methods +-keepclassmembers class * { + native ; +} + +# Keep classes that are used as a parameter type of methods that are also marked as keep +# to preserve changing those methods' signature. +-keep class helium314.keyboard.latin.Dictionary +-keep class helium314.keyboard.latin.NgramContext +-keep class helium314.keyboard.latin.makedict.ProbabilityInfo +-keep class helium314.keyboard.latin.utils.LanguageModelParam + +# after upgrading to gradle 8, stack traces contain "unknown source" +-keepattributes SourceFile,LineNumberTable +-dontobfuscate diff --git a/app/src/main/java/helium314/keyboard/keyboard/KeyboardLayout.java b/app/src/main/java/helium314/keyboard/keyboard/KeyboardLayout.java index 89cf42067..81c529d64 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/KeyboardLayout.java +++ b/app/src/main/java/helium314/keyboard/keyboard/KeyboardLayout.java @@ -18,8 +18,6 @@ import java.util.List; /** * KeyboardLayout maintains the keyboard layout information. */ -// todo: this seems completely unused, see whether it can be removed, or re-purposed to contain -// some useful information about the layout (currently that's in KeyboardParser.LayoutInfos) public class KeyboardLayout { private final int[] mKeyCodes; diff --git a/app/src/main/java/helium314/keyboard/latin/settings/AdvancedSettingsFragment.kt b/app/src/main/java/helium314/keyboard/latin/settings/AdvancedSettingsFragment.kt index 23db744c7..31337972e 100644 --- a/app/src/main/java/helium314/keyboard/latin/settings/AdvancedSettingsFragment.kt +++ b/app/src/main/java/helium314/keyboard/latin/settings/AdvancedSettingsFragment.kt @@ -117,6 +117,9 @@ class AdvancedSettingsFragment : SubScreenFragment() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { removePreference(Settings.PREF_SHOW_SETUP_WIZARD_ICON) } + if (BuildConfig.BUILD_TYPE == "nouserlib") { + removePreference("load_gesture_library") + } setupKeyLongpressTimeoutSettings() findPreference("load_gesture_library")?.setOnPreferenceClickListener { onClickLoadLibrary() } findPreference("backup_restore")?.setOnPreferenceClickListener { showBackupRestoreDialog() } diff --git a/app/src/main/java/helium314/keyboard/latin/utils/JniUtils.java b/app/src/main/java/helium314/keyboard/latin/utils/JniUtils.java index d54bae965..a47f96644 100644 --- a/app/src/main/java/helium314/keyboard/latin/utils/JniUtils.java +++ b/app/src/main/java/helium314/keyboard/latin/utils/JniUtils.java @@ -57,7 +57,7 @@ public final class JniUtils { if (app != null) // use the actual path if possible filesDir = app.getFilesDir().getAbsolutePath(); final File userSuppliedLibrary = new File(filesDir + File.separator + JNI_LIB_IMPORT_FILE_NAME); - if (userSuppliedLibrary.exists()) { + if (!BuildConfig.BUILD_TYPE.equals("nouserlib") && userSuppliedLibrary.exists()) { String wantedChecksum = expectedDefaultChecksum(); try { if (app != null) { diff --git a/app/src/main/proguard.flags b/app/src/main/proguard.flags deleted file mode 100644 index 1c74be17e..000000000 --- a/app/src/main/proguard.flags +++ /dev/null @@ -1,30 +0,0 @@ -# Keep classes and methods that have the @UsedForTesting annotation --keep @helium314.keyboard.annotations.UsedForTesting class * --keepclassmembers class * { - @helium314.keyboard.annotations.UsedForTesting *; -} - -# Keep classes and methods that have the @ExternallyReferenced annotation --keep @helium314.keyboard.annotations.ExternallyReferenced class * --keepclassmembers class * { - @helium314.keyboard.annotations.ExternallyReferenced *; -} - -# Keep native methods --keepclassmembers class * { - native ; -} - -# Keep classes that are used as a parameter type of methods that are also marked as keep -# to preserve changing those methods' signature. --keep class helium314.keyboard.latin.Dictionary --keep class helium314.keyboard.latin.NgramContext --keep class helium314.keyboard.latin.makedict.ProbabilityInfo --keep class helium314.keyboard.latin.utils.LanguageModelParam - -# TODO: remove once used in code. --keep class helium314.keyboard.keyboard.KeyboardLayout { *; } - -# after upgrading to gradle 8, stack traces contain "unknown source", which is horribly bad making them rather useless --keepattributes SourceFile,LineNumberTable --dontobfuscate