# Interface: com.pnfsoftware.jeb.core.units.code.android.IGenericUnpacker

Interface for a simple Android APK unpacker that will attempt to gather resources extracted at runtime. An unpacker may be created via an [apk unit](IApkUnit#createGenericUnpacker()) or a [dex decompiler unit](IDexDecompilerUnit#createGenericUnpacker()).

## Method: attemptUnpack

Description: Start the unpacking process. This method should be called only once. Customization or results retrieval can be done via [#getEmulatedAndroid()](#getEmulatedAndroid()) and [#getRecoveredDexHashes()](#getRecoveredDexHashes()).
throws: if unpacking emulation fails

## Method: formatMonitorReport
- parameter: `formatType`, type: `int`
- return type: `java.lang.String`

Description: Retrieve the unpacking report generated by the monitor \(if the monitor was enabled before unpacking\).
parameter: formatType: 0=standard report; 1=short report; 2=detailed report
return: the formatted report

## Method: getEmulatedAndroid
- return type: `com.pnfsoftware.jeb.core.units.code.android.IEmulatedAndroid`

Description: Create or retrieve the emulator that will perform the unpacking task. This method may be called before [#attemptUnpack()](#attemptUnpack()) to customize the emulator components, or after to retrieve fine\-grained emulation results.
return: the emulated Android environment

## Method: getRecoveredDexHashes
- return type: `java.util.Collection<java.lang.String>`

Description: This method can be used to retrieve the sha256 hashes of the dex files that were collected by the emulator during unpacking. Note that additional dex units are created as well, as children of the 'unpacked' container unit.
return: a collection of sha256 hashes of the recovered dex files

## Method: getRecoveredSoHashes
- return type: `java.util.Collection<java.lang.String>`

Description: This method can be used to retrieve the sha256 hashes of the native library \(so\) files that were collected by the emulator during unpacking. Note that additional native units are created as well, as children of the 'unpacked' container unit.
return: a collection of sha256 hashes of the recovered so files

## Method: setAllowExternalPlugins
- parameter: `allowed`, type: `boolean`

Description: Allow or disallow the use of external plugins \(of type `android-emu-hooks`\) by this unpacker. By default, the use of external plugins is allowed.
parameter: allowed: true to allow external plugins

## Method: setIntegrateRecoveredDexFiles
- parameter: `integrateRecoveredDexFiles`, type: `boolean`

Description: Determine whether the unpacked dex files should be integrated into the primary Dex unit, to allow their use during emulation.
parameter: integrateRecoveredDexFiles: true to integrate recovered dex files

## Method: setMaxExecutionTime
- parameter: `maxExecutionTime`, type: `long`

Description: Convenience method to set the maximum emulation time for [unpacking](#attemptUnpack()). This method redirects to [IDState#setMaxDuration(long)](IDState#setMaxDuration(long)).
parameter: maxExecutionTime: a time in ms

## Method: setMonitorEvents
- parameter: `monitorEvents`, type: `boolean`

Description: Enable or disable the events monitor. If the monitor is enabled, a report may be collected after the unpacking process.
parameter: monitorEvents: true to monitor events

## Method: setUseRecoveredSoFiles
- parameter: `useRecoveredSoFiles`, type: `boolean`

Description: Determine whether the unpacked native library \(so\) files should be analyzed and used during emulation.
parameter: useRecoveredSoFiles: true to use recovered native libraries

## Method: shouldAttemptUnpack
- return type: `boolean`

Description: This heuristic may be called to determine whether [#attemptUnpack()](#attemptUnpack()) has a chance of success. The result of this method should be considered a very loose indicator. If this method is to be used, for better performance, it should be invoked before any other method of this interface.
return: true if unpacking is likely to be useful

## Method: teardown

Description: This method should be called after a call to [#attemptUnpack()](#attemptUnpack()), when the unpacker and its underlying resources are no longer needed.

