我正在关注所有官方扩展文件指南,但我找不到它.我无法访问我需要的包含的obb文件.
我需要6个音频文件(80Mb),我在zip文件中"存储"(未压缩)并重命名为"main.2001.test.expansion.proj.obb"并存储在'/ mnt/sdcard/Android/obb/test中.expansion.proj /"
我会尝试访问这些文件
String mainFileName = Helpers.getExpansionAPKFileName(this,true,2001);
if(!Helpers.doesFileExist(this, mainFileName, 27959282L, false))
{
//download
} else {
Log.d("test_file","file exist");
}
ZipResourceFile expansionFile = APKExpansionSupport.getAPKExpansionZipFile(this,2001,2001);
if(expansionFile!=null)
{
ZipEntryRO[] ziro = expansionFile.getAllEntries();
for (ZipEntryRO entry : ziro) {
Log.d("test_files_zip", "fileZip filename: "+entry.getZipFileName());
try{
AssetFileDescriptor ro = entry.getAssetFileDescriptor();
Log.d("test_files_zip", "--fileZip getfiledescriptor.tostring: "+ro.getFileDescriptor().toString());
Log.d("test_files_zip", "--fileZip createinputstring.tostring: "+ro.createInputStream().toString());
AssetFileDescriptor assetFileDescriptor = expansionFile.getAssetFileDescriptor(entry.getZipFileName()+"/audio02.mp3");
if(assetFileDescriptor!=null) {
Log.d("test_files_mp3", "length: "+assetFileDescriptor.getLength()); //checking it exists
}
}catch (IOException e){ Log.e("test_exp","IoExcp: "+e.getMessage()); }
}
}
Run Code Online (Sandbox Code Playgroud)
In - > assetFileDescriptor = …
我的apk版本代码是版本3.使用它我使用的主扩展文件加载了apk版本代码1(文件名类似于main.1.ex.etc.eg.obb).扩展文件在设备上下载正常.
扩展文件有媒体文件,因此我使用APEZProviderGoogle Zip扩展库来播放它VideoView.
调用VideoView.start()会导致Nullpointer异常.
到目前为止我发现的内容:APEZProvider.initIfNecessary()返回主扩展文件版本为3而不是1.因此,尝试打开ZipResourceFile(mAPKExtensionFile)返回null.APEZProvider.openAssetFile()原因NullPointerException为mAPKExtensionFile是null.
APEZProviderGoogle Zip扩展库中类的相关代码:
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 ) { …Run Code Online (Sandbox Code Playgroud)