Acessar o arquivo de expansão do APK com o URI (com a biblioteca de expansão do Google Zip) causa uma falha se a versão do arquivo de expansão for diferente do apkcode

Meu código de versão apk é a versão 3. com ele estou usando o arquivo de expansão principal que foi carregado com o código de versão apk 1 (nome do arquivo é semelhante ao main.1.ex.etc.eg.obb). O arquivo de expansão é baixado corretamente em um dispositivo.

O arquivo de expansão tem arquivo de mídia, então eu usandoAPEZProvider da Biblioteca de Expansão do Google Zip para reproduzi-lo comVideoView.

ChamandoVideoView.start() provoca uma exceção Nullpointer.

O que eu encontrei até agora: emAPEZProvider.initIfNecessary() retorna a versão do arquivo de expansão principal como 3 em vez de 1. Assim, tentando abrirZipResourceFile (mAPKExtensionFile) retorna nulo.APEZProvider.openAssetFile() causasNullPointerException ComomAPKExtensionFile énull.

Código relevante deAPEZProvider classe na Biblioteca de Expansão do 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>

Não tenho certeza sobre essa linha de código no acima:ProviderInfo pi = pm.resolveContentProvider(getAuthority(), PackageManager.GET_META_DATA); Isso está correto?

De referência Android para PackageManager.resolveContentProvider ().

Resumo público ProviderInfo resolveContentProvider (nome da string, int flags)

Desde: API Nível 1 Encontre um único provedor de conteúdo por seu nome de caminho base. Parâmetros

name: o nome do provedor a ser encontrado.

flags: sinalizadores de opção adicionais. Atualmente deve ser sempre 0.

Alguém pode confirmar se estou fazendo algo errado ou é um bug.

Edit: tudo funciona como esperado quando eu carregar meu aplicativo pela primeira vez - é só quando eu atualizar o apk resultando em códigos de versão diferente que esse problema ocorre.

questionAnswers(3)

yourAnswerToTheQuestion