NetworkProxy

Introduction: An OkHttp interceptor to intercept and manipulate response at runtime
More: Author   ReportBugs   
Tags:

A network proxy library to intercept and mock response from OkHttp

Getting started

In your root build.gradle:

allprojects {
    repositories {
        // Other configurations ...
        jcenter()
    }
}

In your app/build.gradle:

dependencies {
  debugImplementation 'com.github.nongdenchet:networkproxy:0.7.0'
  releaseImplementation 'com.github.nongdenchet:networkproxy-no-op:0.7.0'
}

Since OkHttp now requires Android 5.0+ (API level 21+) and Java 8+, we need to add:

android {
  // other configuration...
  defaultConfig {
    // other configuration...
    minSdkVersion 21
  }

  // other configuration...
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

Add the Interceptor to your OkHttp builder:

new OkHttpClient.Builder()
  // other configuration...
  .addInterceptor(NetworkProxy.interceptor())
  // other configuration...
  .build();

Using with desktop app

  • In your Application class:
public class ExampleApplication extends Application {

  @Override public void onCreate() {
    super.onCreate();
    NetworkProxy.init(this, 9000); // 9000 is the port that is later use to connect from Desktop app
    // Normal app init code...
  }
}
  • Connect your device with adb and run adb forward tcp:8000 tcp:9000 to connect port 8000 of your computer and port 9000 of your device
  • We provide a client desktop app to use and interact with pending response
  • Demo: alt text

Using without desktop app

  • In your Application class:
public class ExampleApplication extends Application {

  @Override public void onCreate() {
    super.onCreate();
    NetworkProxy.init(this);
    // Normal app init code...
  }
}
  • To mock data from a pending response
adb shell "am broadcast -a com.rain.networkproxy.INSTRUCTION -n [YOUR_APP_PACKAGE]/com.rain.networkproxy.NPReceiver \
    --es data '{"id": "0", "status": 200}' \
    --es body '"'{"id": 1, "title": "hello"}'"'"

"id": "0" is the pending response id. You can get it through the UI or from Logcat (Put NetworkProxy as filter to see the logs)

  • Demo: alt text

License

Copyright 2018 Quan Vu.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Apps
About Me
GitHub: Trinea
Facebook: Dev Tools