| 648 | |
| 649 | |
| 650 | == Resolución de error: conflicto entre librería apache commons-codec en Android: Could not find method org.apache.commons.codec.binary.Base64.init == |
| 651 | |
| 652 | Luego de descifrar el archivo ddoc con la clave de transporte resta extraer el DataFile que mantiene el archivo original. |
| 653 | |
| 654 | {{{ |
| 655 | ... |
| 656 | Log.d("Decrypting file", "antes de m_sdoc.getDataFile(0)"); |
| 657 | DataFile df = m_sdoc.getDataFile(0); |
| 658 | Log.d("Decrypting file", "despues de m_sdoc.getDataFile(0)"); |
| 659 | |
| 660 | fos = openFileOutput(/*outFile*/"descifrado.pdf", Context.MODE_PRIVATE); |
| 661 | InputStream is = df.getBodyAsStream(); |
| 662 | |
| 663 | if(is == null) { |
| 664 | System.err.println("DataFile has no data!"); |
| 665 | return; |
| 666 | } |
| 667 | byte[] data = new byte[4096]; |
| 668 | int n = 0, m = 0; |
| 669 | while((n = is.read(data)) > 0) { |
| 670 | fos.write(data, 0, n); |
| 671 | m += n; |
| 672 | } |
| 673 | fos.close(); |
| 674 | is.close(); |
| 675 | ... |
| 676 | }}} |
| 677 | |
| 678 | La función {{{df.getBodyAsStream()}}} lanzaba una excepción porque no se encontraban unos métodos de apache-commons-code. Para resolver esto, en el archivo DataFile.java de jdigidoc se comentó lo siguiente: |
| 679 | |
| 680 | {{{ |
| 681 | // comentado para probar el shaded |
| 682 | //import org.apache.commons.codec.binary.Base64InputStream; |
| 683 | import com.example.shaded.org.apache.commons.codec.binary.Base64InputStream; |
| 684 | }}} |
| 685 | |
| 686 | para poder utilizar en el sistema Android la biblioteca jdigidoc correctamente. |
| 687 | |
| 688 | Esto requirió: |
| 689 | |
| 690 | 1. Descargar los códigos fuentes de apache.commons.code 1.6 |
| 691 | {{{ |
| 692 | wget -c https://archive.apache.org/dist/commons/codec/source/commons-codec-1.6-src.tar.gz |
| 693 | }}} |
| 694 | |
| 695 | 2. Editar el archivo {{{~/desarrollo/andriod/pruebas/apache-commons-mod/commons-codec-1.6-src/pom.xml}}} para utilizar el [https://maven.apache.org/plugins/maven-shade-plugin/ Maven Shade Plugin] de acuerdo a la respuesta [http://stackoverflow.com/questions/12285615/how-to-resolve-a-library-conflict-apache-commons-codec]. Se agregó lo siguiente al bloque {{{<build> <plugins>}}} |
| 696 | |
| 697 | {{{ |
| 698 | <plugin> |
| 699 | <groupId>org.apache.maven.plugins</groupId> |
| 700 | <artifactId>maven-shade-plugin</artifactId> |
| 701 | <executions> |
| 702 | <execution> |
| 703 | <phase>package</phase> |
| 704 | <goals> |
| 705 | <goal>shade</goal> |
| 706 | </goals> |
| 707 | <configuration> |
| 708 | <relocations> |
| 709 | <relocation> |
| 710 | <pattern>org.apache.commons</pattern> |
| 711 | <shadedPattern>com.example.shaded.org.apache.commons</shadedPattern> |
| 712 | </relocation> |
| 713 | </relocations> |
| 714 | <promoteTransitiveDependencies>true</promoteTransitiveDependencies> |
| 715 | </configuration> |
| 716 | </execution> |
| 717 | </executions> |
| 718 | </plugin> |
| 719 | }}} |
| 720 | |
| 721 | 3. Luego se ejecutó el comando: |
| 722 | {{{ |
| 723 | aaraujo@moe:~/desarrollo/andriod/pruebas/apache-commons-mod/commons-codec-1.6-src$ mvn package |
| 724 | }}} |
| 725 | |
| 726 | 4. Luego se ejecutó el comando siguiente para instalar la versión shaded de common-codec-1.6 en el repositorio de maven: |
| 727 | {{{ |
| 728 | aaraujo@moe:~/desarrollo/andriod/pruebas/apache-commons-mod/commons-codec-1.6-src$ mvn install |
| 729 | }}} |
| 730 | |
| 731 | 5. Luego se compiló la biblioteca jdigidoc y se copió al directorio libs del proyecto tibisay: |
| 732 | {{{ |
| 733 | aaraujo@moe:~/desarrollo/andriod/pruebas/jdigidoc-3.7/jdigidoc/jdigidoc$ mvn install |
| 734 | |
| 735 | aaraujo@moe:~/desarrollo/andriod/pruebas/jdigidoc-3.7/jdigidoc/jdigidoc/target$ cp jdigidoc-3.7.0.459.jar ~/desarrollo/andriod/android/workspace/tibisay/libs/ |
| 736 | }}} |
| 737 | |
| 738 | |
| 739 | 6. Luego se agregó la biblioteca {{{commons-codec-1.6.jar}}} al BUILD_PATH de la aplicación tibisay. |
| 740 | |
| 741 | 7. Finalmente se ejecutó la aplicación tibisay y se pudo descifrar el archivo correctamente. |
| 742 | |
| 743 | |
| 744 | |