Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
153 changes: 153 additions & 0 deletions README.es-ES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@


# spi

[中文](README_CN.md)
> SPI para la componentización.

## Descarga

¡Añade **spi-gradle-plugin** a tu proyecto!

```

buildscript {
ext {
kotlin_version = '1.5.31'
booster_version = '4.6.0'
}

repositories {
mavenCentral()
google()
// jcenter()

// didi booster
maven { url 'https://oss.sonatype.org/content/repositories/public/' }
maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }

// add maven repository for spi-plugin at build.gradle file of root project
maven { url "https://raw.githubusercontent.com/afirez/apps_android_repo/master" }
// maven { url "https://raw.githubusercontent.com/afirez/spi/master/repo/" }
}

dependencies {
classpath 'com.afirez.spi:spi-gradle-plugin:3.0.0'
// ①
classpath "com.didiglobal.booster:booster-gradle-plugin:$booster_version"
// ② figure out the features you really need, then choose the right module for integration
// ② 弄清楚真正需要的特性,然后从下面的模块列表中选择正确的模块进行集成
// classpath "com.didiglobal.booster:booster-task-all:$booster_version"
// classpath "com.didiglobal.booster:booster-transform-all:$booster_version"

// gradle plugin version <= 4.1.2
// classpath 'com.afirez.spi:spi-gradle-plugin:2.0.0'

// gradle plugin version <= 3.6.4
// classpath 'com.afirez.spi:spi-gradle-plugin:1.0.1'
}
}

// in module build.gradle
apply plugin: 'com.android.application'

// didi booster
apply plugin: 'com.didiglobal.booster' // ③

// gradle plugin version <= 4.1.2
// apply plugin: 'spi'
// or apply plugin: 'com.afirez.spi'

```

¡Añade **spi** al proyecto del módulo si es necesario!

```
allprojects {
repositories {
...

mavenCentral()
google()
// jcenter()

// didi booster
maven { url 'https://oss.sonatype.org/content/repositories/public/' }
maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }

// add maven repository for spi at build.gradle file of root project
maven { url "https://raw.githubusercontent.com/afirez/apps_android_repo/master" }

...
}
}
```

```

implementation "com.afirez.spi:spi:1.0.1"

```

## Uso

### SPI AppLike

![](https://user-gold-cdn.xitu.io/2019/6/1/16b13c2f4c0b6821?w=1252&h=946&f=png&s=193865)

Para que cada módulo sea consciente del ciclo de vida de la Aplicación, anótelo con @SPI; será descubierto y registrado en ExtensionLoader. Por ejemplo:

![](https://user-gold-cdn.xitu.io/2019/6/1/16b13c2f4c026017?w=1632&h=1272&f=png&s=299116)

Posteriormente, AppDelegate cargará y despachará los AppLikes a través de ExtensionLoader.

![](https://user-gold-cdn.xitu.io/2019/6/1/16b13c2f51b66ed3?w=2018&h=1774&f=png&s=329836)

Llama a AppDelegate en la App y no olvides registrar la App en AndroidManifest.xml. ¡Disfrútalo!

![](https://user-gold-cdn.xitu.io/2019/6/1/16b13c2f55447fa2?w=1374&h=1048&f=png&s=234748)

### SPI Actiivty

![](https://user-gold-cdn.xitu.io/2019/6/1/16b13c2f51c034a6?w=2040&h=1192&f=png&s=333383)

Anota la Activity con @SPI incluyendo una ruta (path) para que sea descubierta y registrada en ExtensionLoader; luego podrá ser cargada por ExtensionLoader mediante dicha ruta. (si se anota sin ruta, la ruta será su nombre de clase.)

### SPI Fragment

![](https://user-gold-cdn.xitu.io/2019/6/1/16b13c2f7f338ee5?w=1932&h=1666&f=png&s=400667)

Anota el Fragment con @SPI incluyendo una ruta (path) para que sea descubierto y registrado en ExtensionLoader; luego podrá ser cargado por ExtensionLoader mediante dicha ruta. (si se anota sin ruta, la ruta será su nombre de clase.)

### SPI Provider

![](https://user-gold-cdn.xitu.io/2019/6/1/16b13c2f89aab5fc?w=1930&h=1012&f=png&s=246460)

Anota SpiKotlinProviderImpl con @SPI incluyendo una ruta (path) para que sea descubierta y registrada en ExtensionLoader; luego podrá ser cargada por ExtensionLoader mediante dicha ruta. (si se anota sin ruta, la ruta será su nombre de clase.)

### Haz más con SPI

SPI se centra en el descubrimiento de interfaces, registro e implementación de tablas de enrutamiento. Así, podemos recopilar y despachar interfaces como AppLike, o crear una implementación de enrutador basada en SPI, entre otros usos.

## Agradecimientos

- [ASM](https://asm.ow2.io/)
- [hunter](https://github.com/Leaking/Hunter)
- [KnightTransform](https://github.com/kakayang2011/KnightTransform)
- [booster](https://github.com/didi/booster)

## Licencia

Copyright 2019 afirez

Licenciado bajo la Licencia Apache, Versión 2.0 (la "Licencia");
no podrá utilizar este archivo excepto en cumplimiento con la Licencia.
Puede obtener una copia de la Licencia en

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

Salvo que lo exija la legislación aplicable o se acuerde por escrito, el software
distribuido bajo la Licencia se distribuye en una base "TAL CUAL",
SIN GARANTÍAS O CONDICIONES DE NINGÚN TIPO, ni expresas ni implícitas.
Consulte la Licencia para conocer el lenguaje específico que rige los permisos y
limitaciones de la Licencia.