Project Url: nekocode/Meepo
Introduction: 模仿 Retrofit 来实现页面跳转路由
More: Author   ReportBugs   

Apache 2.0 License Release

Meepo is a router generator for android, similar to retrofit. You can use it to create routers for Activities, Fragments and even any things.


repositories {
    maven { url "" }
dependencies {
    compile 'com.github.nekocode:Meepo:{lastest-version}'


Declare the router interface first and then Meepo turns your navigation methods into a Java interface.

public interface Router {
    boolean gotoUserDetail(Context context, @Path("user_id") String userId, 
                           @Query("show_title") boolean showTitle);

    void gotoB(Context context, @Bundle("title") String title);

If you want to use URI to open your Activity, you need to add an <intent-filter> element in your manifest file to the corresponding <activity> element.

<activity android:name=".UserDetailActivity">
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>


Use the Meepo class to build an implementation for your router interface.

final Meepo meepo = new Meepo.Builder()
        .config(new UriConfig().scheme("meepo").host(""))

final Router router = meepo.create(Router.class);

Now, you can use the router's methods to navigate activity instead of startActivity() directly.

boolean isSucess = router.gotoUserDetail(this, "123", true);

Router Annotation

Meepo supports below router annotations currently:

Annotation Description
@TargetClass Declare the target Class (Such as target Activity or Fragment)
@TargetClassName Declare the target Class name
@TargetPath Declare the path of URI path (and MimeType)
@TargetAction Declare the Intent action
@TargetFlags Declare the Intent flags
@Bundle Put data into the Intent's Bundle
@Path Replace the URI path's corresponding replacement block with string parameter
@Query Query parameter of the URI
@QueryMap Map of Query parameters
@RequestCode Request code for startActivityForResult()

Custom Parser and CallAdapter

You can create custom Parser and CallAdapter for Meepo. See the sample for more details. It means that you have the ability to make router for anything.

final ModuleRouter moduleRouter = new Meepo.Builder()
        .config(new ModuleConfig("TEST"))
        .parser(new ModuleParser())
        .adapter(new ModuleCallAdapter())
Support Me
About Me
Google+: Trinea trinea
GitHub: Trinea