Skip to content

add android support with android compatible networking layer #152

@BigBangKing

Description

@BigBangKing

I want to use the library on an android app. I want android compatible networking layer.
I am trying to test with an android app but I am getting difficult time initializing the library and using it. I am getting the following error:

2025-11-02 19:17:44.506 8675-8675 ImeTracker io....igbangking.eulerstreamtestapp I io.github.king.eulerstreamtestapp:9c7da47e: onCancelled at PHASE_CLIENT_ALREADY_HIDDEN 2025-11-02 19:17:46.369 8675-8701 AndroidRuntime io....igbangking.eulerstreamtestapp E FATAL EXCEPTION: DefaultDispatcher-worker-2 (Ask Gemini) Process: io.github.bigbangking.eulerstreamtestapp, PID: 8675 java.lang.NoClassDefFoundError: Failed resolution of: Ljava/net/http/HttpResponse$BodyHandlers; at io.github.jwdeveloper.tiktok.http.HttpClient.toJsonResponse(HttpClient.java:77) at io.github.jwdeveloper.tiktok.TikTokLiveHttpClient.getLiveUserData(TikTokLiveHttpClient.java:118) at io.github.jwdeveloper.tiktok.TikTokLiveHttpClient.fetchLiveUserData(TikTokLiveHttpClient.java:107) at io.github.jwdeveloper.tiktok.TikTokLiveClient.tryConnect(TikTokLiveClient.java:126) at io.github.jwdeveloper.tiktok.TikTokLiveClient.connect(TikTokLiveClient.java:86) at io.github.jwdeveloper.tiktok.TikTokLiveClientBuilder.buildAndConnect(TikTokLiveClientBuilder.java:185) at io.github.bigbangking.eulerstreamtestapp.MainActivityKt.setupLive(MainActivity.kt:76) at io.github.bigbangking.eulerstreamtestapp.MainActivityKt$Greeting$1$1$1$1.invokeSuspend(MainActivity.kt:52) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:101) at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:113) at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:89) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:589) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:823) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:720) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:707) Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@2026d44, Dispatchers.IO] Caused by: java.lang.ClassNotFoundException: Didn't find class "java.net.http.HttpResponse$BodyHandlers" on path: DexPathList[[dex file "/data/data/io.github.bigbangking.eulerstreamtestapp/code_cache/.overlay/base.apk/classes3.dex", zip file "/data/app/~~_oDYIzSIw7bWrWLKXordHg==/io.github.bigbangking.eulerstreamtestapp-Z8ftlQmX4dBxjFeLs1JSiQ==/base.apk"],nativeLibraryDirectories=[/data/app/~~_oDYIzSIw7bWrWLKXordHg==/io.github.bigbangking.eulerstreamtestapp-Z8ftlQmX4dBxjFeLs1JSiQ==/lib/x86_64, /data/app/~~_oDYIzSIw7bWrWLKXordHg==/io.github.bigbangking.eulerstreamtestapp-Z8ftlQmX4dBxjFeLs1JSiQ==/base.apk!/lib/x86_64, /system/lib64, /system_ext/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259) at java.lang.ClassLoader.loadClass(ClassLoader.java:637) at java.lang.ClassLoader.loadClass(ClassLoader.java:573) ... 16 more

On an empty new kotlin app.

Following is the mainActivity just for testing:

  package io.github.bigbangking.eulerstreamtestapp
  
  import android.os.Bundle
  import androidx.activity.ComponentActivity
  import androidx.activity.compose.setContent
  import androidx.activity.enableEdgeToEdge
  import androidx.compose.foundation.layout.Column
  import androidx.compose.foundation.layout.fillMaxSize
  import androidx.compose.foundation.layout.padding
  import androidx.compose.material3.Button
  import androidx.compose.material3.Scaffold
  import androidx.compose.material3.Text
  import androidx.compose.runtime.Composable
  import androidx.compose.ui.Modifier
  import androidx.compose.ui.tooling.preview.Preview
  import io.github.bigbangking.eulerstreamtestapp.ui.theme.EulerStreamTestAppTheme
  import io.github.jwdeveloper.tiktok.TikTokLive
  import kotlinx.coroutines.CoroutineScope
  import kotlinx.coroutines.Dispatchers
  import kotlinx.coroutines.launch
  
  class MainActivity : ComponentActivity() {
      override fun onCreate(savedInstanceState: Bundle?) {
          super.onCreate(savedInstanceState)
          enableEdgeToEdge()
          setContent {
              EulerStreamTestAppTheme {
                  Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
                      Greeting(
                          name = "Android",
                          modifier = Modifier.padding(innerPadding)
                      )
                  }
              }
          }
      }
  }
  
  @Composable
  fun Greeting(name: String, modifier: Modifier = Modifier) {
      Column(modifier = modifier,) {
  
  
          Text(
              text = "Hello $name!",
              modifier = modifier
          )
  
          Button(
              onClick = {
                  CoroutineScope(Dispatchers.IO).launch {
                      setupLive()
                  }
              },
              modifier = modifier
          ) {
              Text("Test Euler Stream")
          }
      }
  }
  
  
  fun setupLive() {
  
      TikTokLive.newClient("tv_asahi_news")
  
      /*configure { settings ->
      .apply {
      // Listen for gifts
      onGift { _, _ -> println("Thank you for the gift!") }
  
      // Configure client settings
          // Set the API key
          settings.apiKey = "YOUR_API_KEY"
      }
          }*/.buildAndConnect()
  
  }
  
  
  @Preview(showBackground = true)
  @Composable
  fun GreetingPreview() {
      EulerStreamTestAppTheme {
          Greeting("Android")
      }
  }

And following the build.gradle.kts file:

plugins {
    alias(libs.plugins.android.application)
    alias(libs.plugins.kotlin.android)
    alias(libs.plugins.kotlin.compose)
}

android {
    namespace = "io.github.bigbangking.eulerstreamtestapp"
    compileSdk {
        version = release(36)
    }

    defaultConfig {
        applicationId = "io.github.bigbangking.eulerstreamtestapp"
        minSdk = 29
        targetSdk = 36
        versionCode = 1
        versionName = "1.0"

        multiDexEnabled = true
        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_17
        targetCompatibility = JavaVersion.VERSION_17
    }
    kotlinOptions {
        jvmTarget = "17"
    }
    buildFeatures {
        compose = true
    }
}

dependencies {
    implementation(libs.androidx.core.ktx)
    implementation(libs.androidx.lifecycle.runtime.ktx)
    implementation(libs.androidx.activity.compose)
    implementation(platform(libs.androidx.compose.bom))
    implementation(libs.androidx.compose.ui)
    implementation(libs.androidx.compose.ui.graphics)
    implementation(libs.androidx.compose.ui.tooling.preview)
    implementation(libs.androidx.compose.material3)
    testImplementation(libs.junit)
    androidTestImplementation(libs.androidx.junit)
    androidTestImplementation(libs.androidx.espresso.core)
    androidTestImplementation(platform(libs.androidx.compose.bom))
    androidTestImplementation(libs.androidx.compose.ui.test.junit4)
    debugImplementation(libs.androidx.compose.ui.tooling)
    debugImplementation(libs.androidx.compose.ui.test.manifest)


    implementation("com.github.jwdeveloper.TikTok-Live-Java:Client:1.11.8-Release")

}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions