在Android中挂载加密的obb apk扩展文件

 秦延深_791 发布于 2023-02-13 17:47

我使用jobb工具创建了一个加密的.obb文件.我使用以下代码来安装obb文件:

    public void mountExpansion() {
    final StorageManager storageManager  = (StorageManager) getContext()
        .getSystemService(Context.STORAGE_SERVICE);


    String packageName = "name.of.the.package";
    String filePath = Environment.getExternalStorageDirectory()
            + "/Android/obb/" + packageName + "/" + "main."
            + version + "." + packageName + ".obb";
    final File mainFile = new File(filePath);
    if (mainFile.exists()) {
        Log.d("STORAGE", "FILE: " + filePath + " Exists");
    } else {
        Log.d("STORAGE", "FILE: " + filePath + " DOESNT EXIST");
    }

    String key = "thisIsMyPassword";
    if (!storageManager.isObbMounted(mainFile.getAbsolutePath())) {
        if (mainFile.exists()) {
            if(storageManager.mountObb(mainFile.getAbsolutePath(), key,
                    new OnObbStateChangeListener() {
                        @Override
                        public void onObbStateChange(String path, int state) {
                            super.onObbStateChange(path, state);
                            Log.d("PATH = ",path);
                            Log.d("STATE = ", state+"");
                            expansionFilePath = storageManager.getMountedObbPath(path);
                            if (state == OnObbStateChangeListener.MOUNTED) {
                                expansionFilePath = storageManager
                                        .getMountedObbPath(path);
                                Log.d("STORAGE","-->MOUNTED");
                            } 
                            else {
                                Log.d("##", "Path: " + path + "; state: " + state);
                            }
                        }
                    }))
            {
                Log.d("STORAGE_MNT","SUCCESSFULLY QUEUED");
            }
            else
            {
                Log.d("STORAGE_MNT","FAILED");
            }

        } else {
            Log.d("STORAGE", "Patch file not found");
        }
    }



}

我得到以下输出: FILE:filePath存在成功的QUEUED

但是在onObbStateChangeListener中没有任何内容被调用.我从自定义视图调用此函数并在Nexus 4/KitKat上测试它.

这种行为可能是什么原因?

1 个回答
  • 我知道这个问题已经过时了,但这可能有助于其他人.

    StorageManager将侦听器存储在弱引用中,这意味着,给定您的示例代码(在方法调用中创建的匿名实例),它几乎在您创建它之后就会消失,并且通常在安装完成之前就已经消失.您必须在自己的代码中维护对侦听器对象的引用,直到不再需要它为止.

    这样的事情应该有效:

    public class MyClass {
    
        ...
        private OnObbStateChangeListener mListener =
                    new OnObbStateChangeListener() {
                        @Override
                        public void onObbStateChange(String path, int state) {
                           // your code here
                        }
                    };
    
        public void mountExpansion() {
            ...
            if (storageManager.mountObb(mainFile.getAbsolutePath(), key, mListener)
            {
                Log.d("STORAGE_MNT","SUCCESSFULLY QUEUED");
            }
            else
            {
                Log.d("STORAGE_MNT","FAILED");
            }
            ...
         }
         ...
    }
    

    根据我的知识,这种特殊的obb安装特征已经存在,至少是蜂窝状.

    2023-02-13 17:48 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有