Android Testing SDK Integration Manual
Automate Google Play 14-day closed testing compliance. Embed the lightweight SDK to verify authentic 1-minute daily testing sessions and grant tester rewards securely.
⚡ Quick-Start Integration (4 Easy Steps)
Choose Your Installation Method
Select how you want to add the SDK into your Android project:
1. Add JitPack to settings.gradle (Gradle 7+):
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven { url 'https://jitpack.io' }
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven { url = uri("https://jitpack.io") }
}
}
2. Add dependency to your app/build.gradle:
dependencies {
implementation 'com.github.mabualzait:apptestershub-android-sdk-:1.0.2'
}
dependencies {
implementation("com.github.mabualzait:apptestershub-android-sdk-:1.0.2")
}
Pre-built Release Binary (AAR)
Version 1.0.2 • 61 KB • Target SDK 36 (Android 16)
Save the file into your app module's app/libs/ folder, then declare it and its runtime dependencies in app/build.gradle:
dependencies {
// AppTestersHub SDK binary (Target SDK 36)
implementation files('libs/apptestershub-sdk-v1.0.2.aar')
// Networking & Serialization
implementation 'com.squareup.okhttp3:okhttp:4.12.0'
implementation 'com.google.code.gson:gson:2.10.1'
// Secure Storage Enclave
implementation 'androidx.security:security-crypto:1.1.0-alpha06'
// UI & Lifecycle
implementation 'com.google.android.material:material:1.11.0'
}
mabualzait / apptestershub-android-sdk-
Open source repository with Apache 2.0 license, releases, and CI.
You can also clone and build directly from source:
git clone https://github.com/mabualzait/apptestershub-android-sdk-.git cd apptestershub-android-sdk- ./gradlew assembleRelease
Obtain Your App Credentials
Navigate to your Dashboard or List New App. Your app details page will provide your:
- App ID: (e.g.
42) - SDK API Key: (64-character hexadecimal public key)
- SDK API Secret: (64-character secret key used for HMAC request signing)
Initialize SDK & Forward Lifecycle Events
Call initialize() in onCreate(), and forward onResume() and onPause() events so the SDK can track the 60-second test session:
package com.yourcompany.app
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.apptestershub.sdk.AppTestersHubSDK
class MainActivity : AppCompatActivity() {
companion object {
private const val APP_ID = "YOUR_APP_ID"
private const val API_KEY = "YOUR_SDK_API_KEY"
private const val API_SECRET = "YOUR_SDK_API_SECRET"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Initialize AppTestersHub SDK
AppTestersHubSDK.initialize(this, APP_ID, API_KEY, API_SECRET)
}
override fun onResume() {
super.onResume()
AppTestersHubSDK.onActivityResumed(this)
}
override fun onPause() {
super.onPause()
AppTestersHubSDK.onActivityPaused(this)
}
}
package com.yourcompany.app;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import com.apptestershub.sdk.AppTestersHubSDK;
public class MainActivity extends AppCompatActivity {
private static final String APP_ID = "YOUR_APP_ID";
private static final String API_KEY = "YOUR_SDK_API_KEY";
private static final String API_SECRET = "YOUR_SDK_API_SECRET";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initialize AppTestersHub SDK
AppTestersHubSDK.initialize(this, APP_ID, API_KEY, API_SECRET);
}
@Override
protected void onResume() {
super.onResume();
AppTestersHubSDK.onActivityResumed(this);
}
@Override
protected void onPause() {
super.onPause();
AppTestersHubSDK.onActivityPaused(this);
}
}
🛡️ Security & Anti-Cheat Features
- ✓ HMAC-SHA256 Signatures: Every SDK transmission is signed with your private secret to guarantee origin authenticity.
- ✓ Hardware Device Binding: Session tokens are tied to hardware IDs to prevent emulator spoofing.
- ✓ Server-Side Rate Limiting: Endpoints are throttled (60 req/min) to prevent brute-force attacks.
- ✓ Encrypted Keystore: User emails and session tokens are encrypted with AES-256-GCM in the device's secure enclave.
🧪 What the Tester Experiences
- 1. On first launch, a polished branded dialog asks the tester for their AppTestersHub email.
- 2. A floating overlay displays the testing session timer (counting up to 60 seconds).
- 3. At 60 seconds, an automatic screenshot is taken and verified, awarding 1 coin to the tester.
- 4. Testers can test once per calendar day per app across the full 14-day compliance cycle.
ProGuard / R8 Rules (If Obfuscating)
If you have Proguard or R8 enabled in release builds, add these rules to proguard-rules.pro:
-keep class com.apptestershub.sdk.** { *; }
-keepclassmembers class com.apptestershub.sdk.models.** { *; }
-dontwarn okhttp3.**
-dontwarn com.google.gson.**
Ready to list your Android app?
Sign up now to get 14 free welcome coins — enough to sponsor your first complete 14-day test cycle.
Create Account & Get 14 Free Coins