首先,obb的下载过程,默认上传了obb,在安装过程是会自动下载obb文件的。
有很多博客介绍了如何下载obb,如果没有特殊要求的话,下载obb这个步骤我觉得可以跳过。
目前的工作流程是:
安装游戏同时下载obb->解压obb到指定的路径->运行app
这样即使obb被用户删掉,解压的资源还在就没问题。
一般的接入流程请参考下面这个博客:
接入这个obb下载,要接入两个工程:
1)Google Market Licensing package
2)Google Market APK Expansion Library package
可以通过Android SDK Manager来下载,也可以直接通过如下链接下载:
https://dl-ssl.google.com/android/repository/market_licensing-r02.zip
https://dl-ssl.google.com/android/repository/market_apk_expansion-r01.zip
下载完成后使用market_licensing-r02.zip文件中的目录google_market_licensing\library来创建一个库项目;
然后使用market_apk_expansion-r01.zip中的google_market_apk_expansion\downloader_library来创建另外一个库项目。
同时为了简化对ZIP格式扩展文件的处理,在market_apk_expansion-r01.zip文件中还包含了一个对ZIP文件处理的库项目:google_market_apk_expansion\zip_file。 如果您使用的扩展文件格式是ZIP,那么也可以创建这个库项目。
这两个库我在github 上也找到了,现在找不到连接了,因为这个代码太老了,有一些bug,修改的参考https://blog.csdn.net/ithouse/article/details/84103847 对源码填坑
private static class XAPKFile {
public final boolean mIsMain;
public final String mFileVersion;
public final long mFileSize;
XAPKFile(boolean isMain, String fileVersion, long fileSize) {
mIsMain = isMain;
mFileVersion = fileVersion;
mFileSize = fileSize;
}
}
private Activity activity;
private final XAPKFile xAPK;
// 类构造函数
public GoogleApkExpansion(Activity activity)
{
this.activity = activity;
xAPK = new XAPKFile(true, getVersionCode(activity),687801613L);
}
public String getPackageName(Activity activity)
{
return activity.getPackageName();
}
public String getVersionCode(Activity activity)
{
String versionCode = "";
try {
PackageInfo pki = activity.getPackageManager().getPackageInfo(activity.getPackageName(), 0);
versionCode = pki.versionCode + "";
}catch (Exception e)
{
}
return versionCode;
}
public String getMainExpansionFileName()
{
String packageName = getPackageName(this.activity);
String versionCode = getVersionCode(this.activity);
return "main." + versionCode + "." + packageName + ".obb";
}
public static final String EXP_PATH = File.separator + "Android" + File.separator + "obb" + File.separator;
static public String getSaveFilePath(Context c)
{
File root = Environment.getExternalStorageDirectory();
String path = root.toString() + EXP_PATH + c.getPackageName();
return path;
}
// 这个函数对Helper进行了一个修改,由于我们只有一个主obb文件
private boolean expansionFilesDelivered(Context context) {
XAPKFile xf = xAPK;
{
String fileName = Helpers.getExpansionAPKFileName(context, xf.mIsMain,
xf.mFileVersion);
// if (!Helpers.doesFileExist(context, fileName, xf.mFileSize, false))
// return false;
Log.i(GameView.TAG, "check google obb:" + fileName);
// 这里不做文件大小的校验,只做一个文件的检查
if(!Helpers.doesFileExistSimple(context, fileName))
{
Log.i(GameView.TAG, "google obb:" + fileName + " not exist");
return false;
}
Log.i(GameView.TAG, "google obb:" + fileName + " exist");
}
return true;
}