# AndroidRouter
**Repository Path**: zhugqiang/AndroidRouter
## Basic Information
- **Project Name**: AndroidRouter
- **Description**: 1、android打包跳转特定界面的一套方案,支持端外跳转app打开特定界面
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2016-08-02
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ActivityRouter
### [English README.md here](https://github.com/mzule/ActivityRouter/blob/master/README-en.md)
## 功能
支持给`Activity`定义URL,这样可以通过URL跳转到`Activity`,支持在浏览器以及app中跳入。


## 集成
根目录build.gradle
``` groovy
buildscript {
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.7'
}
}
```
项目app/build.gradle
``` groovy
apply plugin: 'android-apt'
dependencies {
compile 'com.github.mzule.activityrouter:activityrouter:1.1.1'
apt 'com.github.mzule.activityrouter:compiler:1.1.1'
}
```
在`AndroidManifest.xml`配置
``` xml
```
在需要配置的`Activity`上添加注解
``` java
@Router("main")
public class MainActivity extends Activity {
...
}
```
这样就可以通过`mzule://main`来打开`MainActivity`了。
## 进阶
### 支持配置多个地址
``` java
@Router({"main", "root"})
```
`mzule://main`和`mzule://root`都可以访问到同一个`Activity`
### 支持获取url中`?`传递的参数
``` java
@Router("main")
```
上面的配置,可以通过`mzule://main?color=0xff878798&name=you+are+best`来传递参数,在`MainActivity#onCreate`中通过`getIntent().getStringExtra("name")`的方式来获取参数,所有的参数默认为`String`类型,但是可以通过配置指定参数类型,后面会介绍。
### 支持在path中定义参数
``` java
@Router("main/:color")
```
通过`:color`的方式定义参数,参数名为`color`,访问`mzule://main/0xff878798`,可以在`MainActivity#onCreate`通过`getIntent().getStringExtra("color")`获取到color的值`0xff878798`
### 支持多级path参数
``` java
@Router("user/:userId/:topicId/:commentId")
@Router("user/:userId/topic/:topicId/comment/:commentId")
```
上面两种方式都是被支持的,分别定义了三个参数,`userId`,`topicId`,`commentId`
### 支持指定参数类型
``` java
@Router(value = "main/:color", intExtra = "color")
```
这样指定了参数`color`的类型为`int`,在`MainActivity#onCreate`获取color可以通过`getIntent().getIntExtra("color", 0)`来获取。支持的参数类型有`int`,`long`,`short`,`byte`,`char`,`float`,`double`,`boolean`,默认不指定则为`String`类型。
### 支持优先适配
``` java
@Router("user/:userId")
public class UserActivity extends Activity {
...
}
@Router("user/statistics")
public class UserStatisticsActivity extends Activity {
...
}
```
假设有上面两个配置,
不支持优先适配的情况下,`mzule://user/statistics`可能会适配到`@Router("user/:userId")`,并且`userId=statistics`
支持优先适配,意味着,`mzule://user/statistics`会直接适配到`@Router("user/statistics")`,不会适配前一个`@Router("user/:userId")`
### 支持Callback
``` java
public class App extends Application implements RouterCallbackProvider {
@Override
public RouterCallback provideRouterCallback() {
return new SimpleRouterCallback() {
@Override
public void beforeOpen(Context context, Uri uri) {
context.startActivity(new Intent(context, LaunchActivity.class));
}
@Override
public void afterOpen(Context context, Uri uri) {
}
@Override
public void notFound(Context context, Uri uri) {
context.startActivity(new Intent(context, NotFoundActivity.class));
}
};
}
}
```
在`Application`中实现`RouterCallbackProvider`接口,通过`provideRouterCallback()`方法提供`RouterCallback`,具体API如上。
### 支持Http(s)协议
``` java
@Router({"http://mzule.com/main", "main"})
```
AndroidManifest.xml
``` xml
...
```
这样,`http://mzule.com/main`和`mzule://main`都可以映射到同一个Activity,值得注意的是,在`@Router`中声明`http`协议地址时,需要写全称。
### 支持参数transfer
``` java
@Router(value = "item", longExtra = "id", transfer = "id=>itemId")
```
这里通过`transfer = "id=>itemId"`的方式,设定了url中名称为`id`的参数会被改名成`itemId`放到参数`Bundle`中,类型为`long`. 值得注意的是,这里,通过`longExtra = "id"`或者`longExtra = "itemId"`都可以设置参数类型为`long`.
### 支持应用内调用
``` java
Routers.open(context, "mzule://main/0xff878798")
Routers.open(context, Uri.parse("mzule://main/0xff878798"))
```
通过`Routers.open(Context, String)`或者`Routers.open(Context, Uri)`可以直接在应用内打开对应的Activity,不去要经过RouterActivity跳转,效率更高。
## 混淆配置
``` groovy
-keep class com.github.mzule.activityrouter.router.** { *; }
```