Android-发布/测试带有扩展文件的apk-它是如何工作的?
我还是一名Android学生,我开发了一个超过100Mb的应用程序,因此我需要使用扩展文件 我读了成千上万的文件,但我很困惑 有很多mp3文件,我需要在这种“扩展文件”中压缩,以便只上传apk代码,而不是整个应用程序+mp3文件 我想如果我生成一个文件“.obb”和所有的mp3文件,我会超过谷歌播放所需的50MB 我知道这个“.obb”文件也必须在我设备的scard/Android/obb文件夹中 目前,我的代码从mp3文件中获取“int”资源,以对其进行如下操作: intMyResource=R.raw.name\u我的音乐文件 但是,正如我所说的,当前文件的路径是“R.raw” 我的问题是:最好的替换方法是什么 intMyResource=R.raw.name\u我的音乐文件 到我的“.obb”文件所在的实际路径/名称 谢谢大家Android-发布/测试带有扩展文件的apk-它是如何工作的?,android,expansion-files,Android,Expansion Files,我还是一名Android学生,我开发了一个超过100Mb的应用程序,因此我需要使用扩展文件 我读了成千上万的文件,但我很困惑 有很多mp3文件,我需要在这种“扩展文件”中压缩,以便只上传apk代码,而不是整个应用程序+mp3文件 我想如果我生成一个文件“.obb”和所有的mp3文件,我会超过谷歌播放所需的50MB 我知道这个“.obb”文件也必须在我设备的scard/Android/obb文件夹中 目前,我的代码从mp3文件中获取“int”资源,以对其进行如下操作: intMyResource=
Mauro您应该使用以下zip命令创建扩展文件:
zip -r -9 -n ".mp3" main-expansion-file.zip *
使用-n选项对于不压缩媒体文件至关重要,因为如果压缩了媒体文件,则无法在android应用程序中使用它。
将名称zip更改为“main.VERSIONCODE.YOURPACKAGENAME.obb”,并将此.obb文件复制到scard/Android/obb文件夹设备中
使用Google ZipFile库读取zip扩展文件很容易(可在Pathandoridk/extras/Google/play_apk_expansion/zip_文件中找到)
通过调用此方法替换R.raw.name_music_file:
public static AssetFileDescriptor getFileDescriptor(Context ctx, String path) {
AssetFileDescriptor descriptor = null;
try {
ZipResourceFile zip = APKExpansionSupport.getAPKExpansionZipFile(ctx, 1, -1);
descriptor = zip.getAssetFileDescriptor(path);
} catch (IOException e) {
Log.e("APKExpansionSupport", "ERROR: " + e.getMessage(), e);
e.printStackTrace();
}
return descriptor;
}
使用MediaPlayer播放扩展文件中音乐的示例代码:
AssetFileDescriptor descriptor = null;
try {
descriptor = getFileDescriptor(this, "name_music_file.mp3"));
MediaPlayer reproductor = new MediaPlayer();
reproductor.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
reproductor.setOnCompletionListener(this);
reproductor.prepare();
reproductor.start();
} catch (Exception e) {
Log.e("Play mp3", "ERROR: " + e.getMessage(), e);
} finally {
if (descriptor != null)
try{descriptor.close();} catch (IOException e) {}
}
希望这对你有帮助