El acceso al archivo de expansión APK con URI (con la biblioteca de expansión Zip de Google) provoca un bloqueo si la versión del archivo de expansión es diferente de la versión de apk código

Mi código de la versión apk es la versión 3. con él estoy usando el archivo de expansión principal que se cargó con el código 1 de la versión apk (el nombre del archivo es similar a main.1.ex.etc.eg.obb). El archivo de expansión se descarga bien en un dispositivo.

El archivo de expansión tiene un archivo multimedia, por lo que estoy usandoAPEZProvider de la Biblioteca de Expansión de Google Zip para jugar conVideoView.

VocaciónVideoView.start() provoca una excepción Nullpointer.

Lo que he encontrado hasta ahora: EnAPEZProvider.initIfNecessary() devuelve la versión del archivo de expansión principal como 3 en lugar de 1. Intentando abrirZipResourceFile (mAPKExtensionFile) devuelve nulo.APEZProvider.openAssetFile() causasNullPointerException comomAPKExtensionFile esnull.

Código relevante deAPEZProvider clase en la Biblioteca de Expansión de Google Zip:

<code>  private boolean initIfNecessary() {
    if ( !mInit ) {
        Context ctx = getContext();
        PackageManager pm = ctx.getPackageManager();
        ProviderInfo pi = pm.resolveContentProvider(getAuthority(), PackageManager.GET_META_DATA);
        PackageInfo packInfo;
        try {
            packInfo = pm.getPackageInfo(ctx.getPackageName(), 0);
        } catch (NameNotFoundException e1) {
            e1.printStackTrace();
            return false;
        }
        int patchFileVersion;
        int mainFileVersion;
        int appVersionCode = packInfo.versionCode;
        if ( null != pi.metaData ) {
            mainFileVersion = pi.metaData.getInt("mainVersion", appVersionCode);
            patchFileVersion = pi.metaData.getInt("patchVersion", appVersionCode);          
        } else {
            mainFileVersion = patchFileVersion = appVersionCode;
        }
        try {
            mAPKExtensionFile = APKExpansionSupport.getAPKExpansionZipFile(ctx, mainFileVersion, patchFileVersion);
            return true;
        } catch (IOException e) {
            e.printStackTrace();                
        }
    }
    return false;       
}



@Override
public AssetFileDescriptor openAssetFile(Uri uri, String mode)
        throws FileNotFoundException {
    initIfNecessary();
    String path = uri.getEncodedPath();
    if ( path.startsWith("/") ) {
        path = path.substring(1);
    }
    return mAPKExtensionFile.getAssetFileDescriptor(path);      
}
</code>

No estoy seguro de esta línea de código en el anterior:ProviderInfo pi = pm.resolveContentProvider(getAuthority(), PackageManager.GET_META_DATA); ¿Es esto correcto?

Desde la referencia de Android para PackageManager.resolveContentProvider ().

public abstract ProviderInfo resolutionContentProvider (nombre de cadena, indicadores int)

Desde: API Nivel 1 Encuentre un único proveedor de contenido por su nombre de ruta base. Parámetros

nombre: El nombre del proveedor a buscar.

banderas: banderas de opciones adicionales. Actualmente siempre debe ser 0.

¿Alguien puede confirmar si estoy haciendo algo mal o es un error?

Editar: todo funciona como se esperaba cuando subo mi aplicación por primera vez; solo cuando actualizo la aplicación, lo que da como resultado diferentes códigos de versión, ocurre este problema.

Respuestas a la pregunta(3)

Su respuesta a la pregunta