最轻量级的安卓路由框架
| module | GoRouter-api | GoRouter-compiler | GoRouter-annotation |
|---|---|---|---|
| version |
- 支持多模块开发
- 完美支持Activity
- 支持获取fragment实例
- 支持InstantRun support
- 支持MultiDex support(google)
- 支持AndroidX
- 支持kotlin混合编译
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'
}gradle.properties
//如果你需要将module作为application来运行,你需要将moduleIsApplication设为true
moduleIsApplication = falsemainModule.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 "子模块的包名"
}
...
}
sourceSets{
main {
if(moduleIsApplication.toBoolean().booleanValue()){
//如果你想将其以application的方式来运行module,使用默认生成的AndroidManifest.xml即可
manifest.srcFile 'src/main/AndroidManifest.xml'
}else{
//若你想将其以library的方式来运行module,你需要在以下目录下创建一个AndroidManifest.xml文件并按照以下格式编写
manifest.srcFile 'src/main/manifest/AndroidManifest.xml'
}
}
}
}以library方式运行module时所需的AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="你的子模块包名">
<application>
<activity android:name="你的子模块里的activity">
</activity>
</application>
</manifest>Fragment
//获得一个fragment实例
Fragment instance = GoRouter.getInstance().build("fragmentRouteKey").go()
Activity篇
//导航到指定activity
GoRouter.getInstance().build("routeKey2").go()
//携带数据
Bundle data = new Bundle()
data.putInt(key , value);
GoRouter.getInstance().build("routeKey2" , data).go()目标 Activity
/**
* @author logcat
*/
@Route(url = "routeKey2")
public class LoginActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
value = getIntent().getInt(key)
}
}Activity篇
activity1
<TextView
android: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
<TextView
android: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
//以带有共享元素动画的方式跳转
tv = findViewById(R.id.tv);
GoRouter.getInstance().build("activity1 's routeKey")
.go(this , ActivityOptionsCompat.makeSceneTransitionAnimation(this , tv , tv.getTransitionName()).toBundle())通过暴露服务进行解耦
/**
* 把这个服务暴露在公共库中
*
*/
interface SimpleService implements IProvider{
void simple(Context context);
}
/**
* 在模块B中实现这个服务并加以处理
*
*/
@Route(url = "Simple/SimpleService")
public class SimpleServiceImpl implements SimpleService{
@override
public void init(Context context){
//这里可以做一些初始化操作
}
public void simple(Context context){
//做一些处理
}
}
/**
* 模块A中的一个activity
*
*/
public class SimpleActivity extends AppCompatActivity{
@ovserride
public void oncreate(Bundle savedInstanceState){
SimpleService service = GoRouter.getInstance().build("Simple/SimpleService").go(SimpleService.class);
if(service != null){
service.simple(this.getApplicationContext());
}
}
}