|
| 1 | +# Verificar ofuscación con Gradle |
| 2 | + |
| 3 | +La ofuscación de strings y assets en el **módulo `app`** depende de que el plugin cargue la librería nativa del **host** (el mismo OS y arquitectura que ejecuta Gradle). Si no carga, verás en consola: |
| 4 | + |
| 5 | +```text |
| 6 | +Skipping <variant> (native library not available for this architecture) |
| 7 | +``` |
| 8 | + |
| 9 | +## 1. Requisitos |
| 10 | + |
| 11 | +1. Submódulo **`stringcare-jni`** inicializado y precompilados generados en `stringcare-jni/dist/` (tras el build en stringcare-android-c). |
| 12 | +2. **Automático:** al compilar el plugin (`:plugin:jar` o cualquier build que lo use), la tarea **`preparePluginNativeLibraries`** copia `stringcare-jni/dist/{macos,linux,windows}/` a `build/generated/stringcare-plugin-natives/` y **`processResources`** las empaqueta en el JAR. No hace falta `syncPluginNativeLibraries` salvo que quieras **commitear** las binarias en `src/.../jni/`. |
| 13 | +3. Si **no** existe `stringcare-jni/dist/`, se usan los ficheros ya presentes en `plugin/.../internal/jni/` (fallback). |
| 14 | +4. En el JAR del plugin deben estar, según tu máquina: |
| 15 | + - **macOS:** `libsignKey.dylib` (universal o la variante correcta). |
| 16 | + - **Linux:** `libsignKey.so` y/o `libsignKey-arm64.so`. |
| 17 | + - **Windows:** `libsignKey.dll` y/o `libsignKey-arm64.dll`. |
| 18 | + |
| 19 | +Tras actualizar `dist/` en el submódulo, basta con **`./gradlew :plugin:jar`** o **`./gradlew :app:assemble...`** para volver a empaquetar las nativas. |
| 20 | + |
| 21 | +## 2. Tareas útiles |
| 22 | + |
| 23 | +Listar tareas del plugin en el app: |
| 24 | + |
| 25 | +```bash |
| 26 | +./gradlew :app:tasks --all | grep -i stringcare |
| 27 | +``` |
| 28 | + |
| 29 | +Tareas típicas (por variante; ejemplo **prodDebug**): |
| 30 | + |
| 31 | +| Tarea | Rol | |
| 32 | +|-------|-----| |
| 33 | +| `stringcareBeforeMergeResourcesProdDebug` | Ofusca `strings.xml` antes del merge de recursos | |
| 34 | +| `stringcareAfterMergeResourcesProdDebug` | Restaura strings desde backup temporal | |
| 35 | +| `stringcareBeforeMergeAssetsProdDebug` | Ofusca assets (p. ej. `*.json`) | |
| 36 | +| `stringcareAfterMergeAssetsProdDebug` | Restaura assets | |
| 37 | +| `stringcarePreview` | Vista previa / diagnóstico | |
| 38 | +| `stringcareTestObfuscate` | Prueba de ofuscación (tests del plugin) | |
| 39 | + |
| 40 | +## 3. Comprobar que no se salta la ofuscación |
| 41 | + |
| 42 | +Con salida detallada: |
| 43 | + |
| 44 | +```bash |
| 45 | +./gradlew :app:stringcareBeforeMergeResourcesProdDebug --rerun-tasks --info 2>&1 | tee stringcare-verify.log |
| 46 | +``` |
| 47 | + |
| 48 | +**Esperado si la nativa carga y hay huella de firma:** mensajes del plugin con variante y clave SHA1, backup de recursos, etc. **No** debe aparecer la línea de *Skipping … native library*. |
| 49 | + |
| 50 | +Comprobar también assets: |
| 51 | + |
| 52 | +```bash |
| 53 | +./gradlew :app:stringcareBeforeMergeAssetsProdDebug --rerun-tasks --info 2>&1 | tee -a stringcare-verify.log |
| 54 | +``` |
| 55 | + |
| 56 | +## 4. Build completa |
| 57 | + |
| 58 | +```bash |
| 59 | +./gradlew :app:clean :app:assembleProdDebug --rerun-tasks --info 2>&1 | tee stringcare-assemble.log |
| 60 | +``` |
| 61 | + |
| 62 | +Durante el merge, los recursos en disco pueden estar ofuscados de forma temporal; al final **`stringcareAfterMerge*`** restaura los fuentes del módulo. La comprobación fiable es el **log** de las tareas `BeforeMerge` (y que exista huella vía `signingReport` o configuración del plugin), no solo el `values.xml` final empaquetado. |
| 63 | + |
| 64 | +## 5. Huella de firma (SHA1) |
| 65 | + |
| 66 | +Si no hay `mockedFingerprint` en el bloque `stringcare { }`, el plugin usa `./gradlew signingReport` para la variante. Sin SHA1 válido, puede no ofuscar aunque la nativa cargue. Para depurar: |
| 67 | + |
| 68 | +```bash |
| 69 | +./gradlew :app:signingReport |
| 70 | +``` |
| 71 | + |
| 72 | +--- |
| 73 | + |
| 74 | +**Resumen:** Si ves *Skipping … native library*, comprueba que exista `stringcare-jni/dist/` con las tres plataformas (o al menos la del host), ejecuta **`./gradlew :plugin:clean :plugin:jar`** y repite. Si el submódulo no está inicializado, haz `git submodule update --init --recursive` o usa `syncPluginNativeLibraries` + commit en `jni/` como respaldo. |
0 commit comments