谷歌obb机制简单使用

首先,obb的下载过程,默认上传了obb,在安装过程是会自动下载obb文件的。

有很多博客介绍了如何下载obb,如果没有特殊要求的话,下载obb这个步骤我觉得可以跳过。
目前的工作流程是:
安装游戏同时下载obb->解压obb到指定的路径->运行app

这样即使obb被用户删掉,解压的资源还在就没问题。

一般的接入流程请参考下面这个博客:

Google Play APK扩展文件机制及开发流程详解

APK扩展文件及使用

接入这个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;
    }

你可能感兴趣的:(工作总结)