Changes between Version 4 and Version 5 of revisionHerramientas:encryption


Ignore:
Timestamp:
Jun 20, 2013, 5:16:00 PM (11 years ago)
Author:
aaraujo
Comment:

Agregada sección de información de resolución de conflicto de biblioteca apache.commons.codec en Android

Legend:

Unmodified
Added
Removed
Modified
  • revisionHerramientas:encryption

    v4 v5  
    646646}}}
    647647
     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
     652Luego de descifrar el archivo ddoc con la clave de transporte resta extraer el DataFile que mantiene el archivo original.
     653
     654{{{
     655...
     656Log.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
     678La 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;
     683import com.example.shaded.org.apache.commons.codec.binary.Base64InputStream;
     684}}}
     685
     686para poder utilizar en el sistema Android la biblioteca jdigidoc correctamente.
     687
     688Esto requirió:
     689
     690 1. Descargar los códigos fuentes de apache.commons.code 1.6
     691{{{
     692wget -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{{{
     723aaraujo@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{{{
     728aaraujo@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{{{
     733aaraujo@moe:~/desarrollo/andriod/pruebas/jdigidoc-3.7/jdigidoc/jdigidoc$ mvn install
     734
     735aaraujo@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