Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

137 Commits

Repository files navigation

The most lightweight Framework about router in android.

中文文档

Javadoc

GitHub license

Latest version

moduleGoRouter-apiGoRouter-compilerGoRouter-annotation
versionVersionVersionVersion

Feature

  1. Support for multi-modules
  2. Full Activity support
  3. Support get Fragment instance
  4. InstantRun support
  5. MultiDex support
  6. AndroidX Support
  7. Support kotlin

How to implement?

config.gradle

 dependencies{
//annotation
implementation 'cn.rubintry:gorouter-annotation:1.0.3'//core api
implementation 'cn.rubintry:gorouter-api:1.0.33'//Java
annotationProcessor 'cn.rubintry:gorouter-compiler:1.0.5'//Kotlin
kapt 'cn.rubintry:gorouter-compiler:1.0.5'
}

How to build your project?

gradle.properties

 //If you need run sub module as Application, you should make moduleIsApplication true
moduleIsApplication = false

mainModule.gradle

 apply plugin: 'com.android.application'
apply from: '../config.gradle'
dependencies {
if(!moduleIsApplication.toBoolean().booleanValue()){
implementation project(path: ':anothermodule')
}
}

anotherModule.gradle

if(moduleIsApplication.toBoolean().booleanValue()){
apply plugin: 'com.android.application'
}else{
apply plugin: 'com.android.library'
}
apply from: '../config.gradle'
android {
defaultConfig {
if(moduleIsApplication.toBoolean().booleanValue()){
applicationId "Your sub module's package name"
}
...
}
sourceSets{
main {
if(moduleIsApplication.toBoolean().booleanValue()){
//If you run this module as application , you can use the default AndroidManifest.xml
manifest.srcFile 'src/main/AndroidManifest.xml'
}else{
//If you run this module as library , you should create a new AndroidManifest liked follows
manifest.srcFile 'src/main/manifest/AndroidManifest.xml'
}
}
}
}

The AndroidManifest.xml when you run module as library

 <?xml version="1.0" encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"package="your package name">
<application>
<activityandroid:name="your activity in another module">
</activity>
</application>
</manifest>

How to use?

Simple usage


Fragment

//Get a fragment instanceFragmentinstance = GoRouter.getInstance().build("fragmentRouteKey").go()

Activity

//Navigation to an Activity immediatelyGoRouter.getInstance().build("routeKey2").go()
//With dataBundledata = newBundle()
data.putInt(key , value);
GoRouter.getInstance().build("routeKey2" , data).go()

Target Activity

/** * @author logcat */@Route(url = "routeKey2")
publicclassLoginActivityextendsAppCompatActivity {
@OverrideprotectedvoidonCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
value = getIntent().getInt(key)
}
}

With sharedElements

Activity

Layout

activity1

 <TextViewandroid:id="@+id/tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="activity1"app:layout_constraintTop_toTopOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"android:transitionName="sharedActivity"android:textSize="50sp"></TextView>

activity2

 <TextViewandroid:id="@+id/tv1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="activity1"app:layout_constraintTop_toTopOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"android:transitionName="sharedActivity"android:textSize="50sp"></TextView>
//Activity1//navigation to another activity with animation.tv = findViewById(R.id.tv);
GoRouter.getInstance().build("activity1 's routeKey")
.go(this , ActivityOptionsCompat.makeSceneTransitionAnimation(this , tv , tv.getTransitionName()).toBundle())

Advanced usage

Decoupled by exposure service

/** * Expose this service in common lib. * */interfaceSimpleServiceimplementsIProvider{
voidsimple(Contextcontext);
}
/** * Implements this service in module B and deal with it. * */@Route(url = "Simple/SimpleService")
publicclassSimpleServiceImplimplementsSimpleService{
@overridepublicvoidinit(Contextcontext){
//Here you can do something to initialize.
}
publicvoidsimple(Contextcontext){
//do something
}
}
/** * An activity in module A * */publicclassSimpleActivityextendsAppCompatActivity{
@ovserridepublicvoidoncreate(BundlesavedInstanceState){
SimpleServiceservice = GoRouter.getInstance().build("Simple/SimpleService").go(SimpleService.class);
if(service != null){
service.simple(this.getApplicationContext());
}
}
}

About

The most lightweight router library in android.If you need to do multi module development,you can try this.

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages