获取Obb包里面的某个资源文件

获取Obb包里面的某个资源文件

  • 需求说明
    • 原因
    • 解决方法

需求说明

最近在Unity开发中,发现www方法拷贝文件后,内存不会释放。所以更改为用java的方法拷贝后,因为要上架Google,所以需要使用Obb分包,分包后,读取不到需要拷贝的文件。。。

原因

obb扩展文件类似于压缩文件,所有的资源都在里面,而且路径也和不使用分包的apk中的路径不同。所以就找不到需要拷贝的文件

解决方法

//获取Obb扩展文件路径
String path = getObbDir().getPath() + "/main." +getVersionCode(MainActivity.this) + "." + getAppPackageName(MainActivity.this) + ".obb";
//得到obb文件实例                  
ZipResourceFile expansionFile = new ZipResourceFile(path);
//读取
InputStream inputStream = expansionFile.getInputStream("assets/test.mp3"); 

ZipResourceFile脚本位于Android SDK 目录下: /extras/google/google_market_apk_expansion/zip_file/,需要自己拷贝到工程中

  • 获取包名
 public  String getAppPackageName(Context context){
        ActivityManager activityManager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningTaskInfo> taskInfo = activityManager.getRunningTasks(1);
        ComponentName componentInfo = taskInfo.get(0).topActivity;
        return componentInfo.getPackageName();
    }
  • 获取VersionCode
   public int getVersionCode(Context context) {
        try {
            PackageManager packageManager = context.getPackageManager();
            PackageInfo packageInfo = packageManager.getPackageInfo(
                    context.getPackageName(), 0);
            return packageInfo.versionCode;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    }

你可能感兴趣的:(SDK,Unity)