From 51b0a170a434e0c713dc81da1eb4125ba6b74f48 Mon Sep 17 00:00:00 2001 From: Gaston Thea Date: Mon, 9 Feb 2026 15:31:34 -0300 Subject: [PATCH] Http modules scaffolding --- build.gradle | 2 ++ http-domain/.gitignore | 1 + http-domain/README.md | 5 +++++ http-domain/build.gradle | 22 ++++++++++++++++++++ http-domain/consumer-rules.pro | 1 + http-domain/proguard-rules.pro | 21 +++++++++++++++++++ http-domain/src/main/AndroidManifest.xml | 4 ++++ http/.gitignore | 1 + http/README.md | 5 +++++ http/build.gradle | 26 ++++++++++++++++++++++++ http/consumer-rules.pro | 1 + http/proguard-rules.pro | 21 +++++++++++++++++++ http/src/main/AndroidManifest.xml | 4 ++++ main/build.gradle | 2 ++ settings.gradle | 2 ++ sonar-project.properties | 22 ++++++++++++++------ 16 files changed, 134 insertions(+), 6 deletions(-) create mode 100644 http-domain/.gitignore create mode 100644 http-domain/README.md create mode 100644 http-domain/build.gradle create mode 100644 http-domain/consumer-rules.pro create mode 100644 http-domain/proguard-rules.pro create mode 100644 http-domain/src/main/AndroidManifest.xml create mode 100644 http/.gitignore create mode 100644 http/README.md create mode 100644 http/build.gradle create mode 100644 http/consumer-rules.pro create mode 100644 http/proguard-rules.pro create mode 100644 http/src/main/AndroidManifest.xml diff --git a/build.gradle b/build.gradle index f521dda49..64f9cdfbc 100644 --- a/build.gradle +++ b/build.gradle @@ -140,6 +140,8 @@ dependencies { include project(':events') include project(':events-domain') include project(':api') + include project(':http-domain') + include project(':http') } def javadocSourceProjects = providers.provider { diff --git a/http-domain/.gitignore b/http-domain/.gitignore new file mode 100644 index 000000000..796b96d1c --- /dev/null +++ b/http-domain/.gitignore @@ -0,0 +1 @@ +/build diff --git a/http-domain/README.md b/http-domain/README.md new file mode 100644 index 000000000..362956fbb --- /dev/null +++ b/http-domain/README.md @@ -0,0 +1,5 @@ +# HTTP Domain module + +This module contains public HTTP configuration contracts exposed to consumers of the Split SDK. + +Includes certificate pinning configuration, proxy settings, SSL configuration, and authenticator interfaces. diff --git a/http-domain/build.gradle b/http-domain/build.gradle new file mode 100644 index 000000000..05b24204a --- /dev/null +++ b/http-domain/build.gradle @@ -0,0 +1,22 @@ +plugins { + id 'com.android.library' +} + +apply from: "$rootDir/gradle/common-android-library.gradle" + +android { + namespace 'io.split.android.client.network.domain' + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + implementation libs.annotation + implementation project(':logger') + + testImplementation libs.junit4 + testImplementation libs.mockitoCore +} diff --git a/http-domain/consumer-rules.pro b/http-domain/consumer-rules.pro new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/http-domain/consumer-rules.pro @@ -0,0 +1 @@ + diff --git a/http-domain/proguard-rules.pro b/http-domain/proguard-rules.pro new file mode 100644 index 000000000..f1b424510 --- /dev/null +++ b/http-domain/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# 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 diff --git a/http-domain/src/main/AndroidManifest.xml b/http-domain/src/main/AndroidManifest.xml new file mode 100644 index 000000000..8bdb7e14b --- /dev/null +++ b/http-domain/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + diff --git a/http/.gitignore b/http/.gitignore new file mode 100644 index 000000000..796b96d1c --- /dev/null +++ b/http/.gitignore @@ -0,0 +1 @@ +/build diff --git a/http/README.md b/http/README.md new file mode 100644 index 000000000..199f22805 --- /dev/null +++ b/http/README.md @@ -0,0 +1,5 @@ +# HTTP module + +This module provides the HTTP client implementation used internally by the Split SDK. + +Includes request/response lifecycle, certificate pinning runtime, proxy tunnelling, and TLS configuration. Hidden from SDK consumers. diff --git a/http/build.gradle b/http/build.gradle new file mode 100644 index 000000000..85ef7d707 --- /dev/null +++ b/http/build.gradle @@ -0,0 +1,26 @@ +plugins { + id 'com.android.library' +} + +apply from: "$rootDir/gradle/common-android-library.gradle" + +android { + namespace 'io.split.android.client.network.http' + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + implementation libs.annotation + implementation project(':logger') + implementation project(':http-domain') + + testImplementation libs.junit4 + testImplementation libs.mockitoCore + testImplementation libs.mockitoInline + testImplementation libs.okhttpMockwebserver + testImplementation libs.okhttpTls +} diff --git a/http/consumer-rules.pro b/http/consumer-rules.pro new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/http/consumer-rules.pro @@ -0,0 +1 @@ + diff --git a/http/proguard-rules.pro b/http/proguard-rules.pro new file mode 100644 index 000000000..f1b424510 --- /dev/null +++ b/http/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# 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 diff --git a/http/src/main/AndroidManifest.xml b/http/src/main/AndroidManifest.xml new file mode 100644 index 000000000..8bdb7e14b --- /dev/null +++ b/http/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + diff --git a/main/build.gradle b/main/build.gradle index 7ec1e3110..70d932be8 100644 --- a/main/build.gradle +++ b/main/build.gradle @@ -52,7 +52,9 @@ dependencies { // Public api modules api project(':logger') api project(':api') + api project(':http-domain') // Internal module dependencies + implementation project(':http') implementation project(':events-domain') // External dependencies diff --git a/settings.gradle b/settings.gradle index b584365a6..7eaafe2d3 100644 --- a/settings.gradle +++ b/settings.gradle @@ -2,6 +2,8 @@ rootProject.name = 'android-client' include ':api' include ':logger' +include ':http-domain' +include ':http' include ':main' include ':events' include ':events-domain' diff --git a/sonar-project.properties b/sonar-project.properties index f598dd559..a3cc5e80d 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -3,15 +3,17 @@ sonar.projectKey=splitio_android-client sonar.projectName=android-client # Path to source directories (multi-module) -# Root project contains modules: main, events, logger -sonar.sources=main/src/main/java,events/src/main/java,logger/src/main/java +# Root project contains modules: main, events, logger, http-domain, http +sonar.sources=main/src/main/java,events/src/main/java,logger/src/main/java,http-domain/src/main/java,http/src/main/java # Path to compiled classes (multi-module) -# Include binary paths for all modules: main, events, logger +# Include binary paths for all modules: main, events, logger, http-domain, http sonar.java.binaries=\ main/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes,\ events/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes,\ - logger/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes + logger/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes,\ + http-domain/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes,\ + http/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes # Path to dependency/libraries jars (multi-module) sonar.java.libraries=\ @@ -26,11 +28,19 @@ sonar.java.libraries=\ logger/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar,\ logger/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar,\ logger/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar,\ - logger/build/intermediates/compile_and_runtime_r_class_jar/debugUnitTest/generateDebugUnitTestStubRFile/R.jar + logger/build/intermediates/compile_and_runtime_r_class_jar/debugUnitTest/generateDebugUnitTestStubRFile/R.jar,\ + http-domain/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar,\ + http-domain/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar,\ + http-domain/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar,\ + http-domain/build/intermediates/compile_and_runtime_r_class_jar/debugUnitTest/generateDebugUnitTestStubRFile/R.jar,\ + http/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar,\ + http/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar,\ + http/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar,\ + http/build/intermediates/compile_and_runtime_r_class_jar/debugUnitTest/generateDebugUnitTestStubRFile/R.jar # Path to test directories (multi-module) # Only include test source folders that are guaranteed to exist in all environments -sonar.tests=main/src/test/java,main/src/androidTest/java,main/src/sharedTest/java,events/src/test/java,logger/src/test/java +sonar.tests=main/src/test/java,main/src/androidTest/java,main/src/sharedTest/java,events/src/test/java,logger/src/test/java,http-domain/src/test/java,http/src/test/java # Encoding of the source code sonar.sourceEncoding=UTF-8