Zemer Cipher requires Android API 24 or higher, Kotlin coroutines, and a functioning system WebView. The library loads YouTube player JS into an off-screenDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/ZemerTeam/zemer-cipher/llms.txt
Use this file to discover all available pages before exploring further.
WebView for signature deobfuscation and n-parameter transformation, so the WebView component must be present and not stripped from the system image. Before integrating, verify that your project meets these baseline requirements.
Requirements
| Requirement | Details |
|---|---|
| Android API | Minimum SDK 24 (Android 7.0 Nougat) |
| Kotlin | 1.9 or higher |
| System WebView | Must be present and functional. On Android Go or minimal/custom system images, verify WebView availability before calling ZemerCipher.initialize(). |
| Internet permission | Required for player JS fetching and remote config refresh. |
Add the Dependency
Zemer Cipher is published viamaven-publish. Make sure google() and mavenCentral() are listed in your project’s dependency resolution repositories, then declare the library in your app module.
settings.gradle.kts
app/build.gradle.kts
Transitive dependencies
The following dependencies are pulled in automatically when you addcom.zemer:cipher:
| Artifact | Notes |
|---|---|
org.jetbrains.kotlinx:kotlinx-coroutines-core | Core coroutines library |
org.jetbrains.kotlinx:kotlinx-coroutines-android | Coroutine dispatcher support for Android main thread |
org.jetbrains.kotlinx:kotlinx-serialization-json | Player config JSON parsing |
com.squareup.okhttp3:okhttp | HTTP client for player JS and remote config fetching |
com.squareup.okio:okio | OkHttp I/O dependency |
androidx.collection:collection-ktx | Kotlin-friendly collection utilities |
androidx.annotation:annotation | Annotation support |
timber is a compileOnly dependency — see Timber (Optional Logging) below.
Permissions
Add the internet permission to yourAndroidManifest.xml. The library requires network access to fetch YouTube player JS and to refresh the remote player config from GitHub.
Timber (Optional Logging)
Timber is declared ascompileOnly in the library, which means it is an optional dependency at runtime. If you include Timber in your own app and plant a tree, Zemer Cipher’s debug log statements will appear in your logcat output. If you do not include Timber, all logging calls are silently skipped — there is no NoClassDefFoundError or runtime crash.
To enable Zemer Cipher’s debug logs, plant a Timber.DebugTree before calling ZemerCipher.initialize():
ProGuard / R8
No manual keep rules are needed for the Zemer Cipher library itself. The AAR ships aconsumer-rules.pro file that is automatically merged into your app’s ProGuard configuration by the Android Gradle Plugin when you build a minified release. If you use R8 in full-mode, the consumer rules are still applied in the same way.