Android 使用obb扩展App
来源:互联网 发布:sharpdesk软件下载 编辑:程序博客网 时间:2024/06/05 09:11
- jobb Tools
- 在Application中使用
- 用于Google Play Expansion Files
- 读取Obb文件中的图片资源
- 步骤
- 代码示例
- 应该注意的问题some questions
jobb Tools
制作成OBB(Opaque Binary Blob)格式文件的一种工具,在Android SDK中, %ANDROID——HOME/tools%
中,在tools/bin
下有jobb
命令:
jobb -d [目录名称的完整路径] -o [输出目标文件的完整路径] -pn [软件包名] -pv [包版本]
EG:
源文件目录 D:contents 目标文件夹: D:\obb\output.obb 软件包名 com.my.test 包版本 1
jobb -d D:\contents -o D:\obb\output.obb -pn com.my.test -pv 1
- 注意:
- jobb -d,-o 需要指定完整路径。如果指定相对路径,
%ANDROID_HOME%/tools/
将作为相对路径 - JOBB工具如果不能输出有一定容量的.obb的文件的话,出现错误提示
- jobb -d,-o 需要指定完整路径。如果指定相对路径,
在Application中使用
OnObbStateChangeListener listener = new OnObbStateChangeListener() { @Override public void onObbStateChange(String path, int state) { // state == 1 (OnObbStateChangeListener.MOUNTED) 安装成功 }};StorageManager storageManager = ((StorageManager) context.getSystemService(Context.STORAGE_SERVICE));String path = "path/to/obbFile"; // .obb文件的完整路径storageManager.mountObb(path, null, listener); // 如果在创建obb时,指定了一个键,则指定为第二个参数
- 注意:
如果与创建时指定的包名称不同时,onObbStateChange的状态为25(OnObbStateChangeListener.ERROR_PERMISSION_DENIED)
用于Google Play Expansion Files
- OBB 文件需要使用以下命名规则
[main|patch].<expansion-version>.<package-name>.obb
- 注意:
- 上传APK时,OBB会另外上传,不能只更新OBB文件
- 下载应用程序时,OBB文件下载到%external storage%/Android/obb/package name目录。
读取Obb文件中的图片资源
1.步骤
- 获取obb文件路径
- 挂载Obb文件
- 获取挂载后的路径
- 读取obb中的文件.
2.代码示例
public class MainActivity extends AppCompatActivity { private TextView tv; private ImageView iv; private StorageManager mStorageManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.tv); iv = (ImageView) findViewById(R.id.iv); tv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { doAnimation(); } }); } private void doAnimation() { //获取main文件的路径 String apkObbMainFile = getAPKObbMainFile(MainActivity.this, 1); if (apkObbMainFile == null) return; //初始化StorageManager mStorageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE); //挂载OBB文件 mStorageManager.mountObb(apkObbMainFile, null, new OnObbStateChangeListener() { @Override public void onObbStateChange(String path, int state) { super.onObbStateChange(path, state); Log.e("onObbMounted", path + ":" + state); if (state == 1) { //获取挂载后路径 String mountedObbPath = mStorageManager.getMountedObbPath(path); Log.e("mountedObbPath", mountedObbPath == null ? "null" : mountedObbPath); //读取动画图片 AnimationDrawable animationDrawable = new AnimationDrawable(); for (int i = 0; i < 45; i++) { if (i < 10) { Drawable drawable = Drawable.createFromPath(mountedObbPath + "/anims/oshirase_1_houzyo_000" + i + ".png"); animationDrawable.addFrame(drawable, 100); } else { Drawable drawable = Drawable.createFromPath(mountedObbPath + "/anims/oshirase_1_houzyo_00" + i + ".png"); animationDrawable.addFrame(drawable, 100); } } iv.setImageDrawable(animationDrawable); animationDrawable.start(); } } }); } private static final String EXP_PATH = "/Android/obb/"; private String getAPKObbMainFile(Context ctx, int mainVersion) { String packageName = ctx.getPackageName(); if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { File root = Environment.getExternalStorageDirectory(); File expPath = new File(root.toString() + EXP_PATH + packageName); if (expPath.exists() && mainVersion > 0) { String strMainPath = expPath + File.separator + "main." + mainVersion + "." +packageName + ".obb"; File main = new File(strMainPath); if (main.isFile()) { Log.e("MainFile", strMainPath); return strMainPath; } } } return null; }}
应该注意的问题(some questions)
- 文件有一个最大(512),最小限制4M
需要将要存储的文件放置到一个文件夹中,例如:
\data\ 1.png ... n.png
在此情况下打包源目录设置为data时,会发生错误
de.waldheinz.fs.fat.DirectoryFullException: directory is fullException in thread "main" java.lang.RuntimeException: Error adding file with name
更改目录结构为如下:
\data\anim\ 1.png ... n.png
在此时将源目录再次设置为data打包就会成功。
阅读全文
1 0
- Android 使用obb扩展App
- obb扩展文件总结
- Android OBB文件
- Android Obb文件
- Unity Android OBB
- android app开发,如何使用/引入第三方扩展jar
- obb和android版本问题
- Android获取当前APP的data路径,以及获取存储卡上的data路径,obb路径
- Android OBB文件和StorageManager类
- OBB文件和StorageManager类使用介绍
- OBB文件和StorageManager类使用介绍
- OBB文件和StorageManager类使用介绍
- OBB文件和StorageManager类使用介绍
- OBB文件和StorageManager类使用介绍
- OBB文件和StorageManager类使用介绍
- Android学习--App模块化及工程扩展
- Android学习--App模块化及工程扩展
- Android App模块化及工程扩展
- MobaXterm之取消自动关闭连接-yellowcong
- Mongodb基础篇 之有话要说
- eclipse常见问题
- 如何申请与对接支付接口
- 区间dp模板
- Android 使用obb扩展App
- Educational Codeforces Round 26 G. Functions On The Segments 主席树
- 死锁-操作系统-程序员面试
- 剑指offer--二进制中1的个数
- HDU
- java中Map,List与Set的区别
- Java高性能集合类 ConcurrentLinkedHashMap demo
- 实现带header和footer功能的RecyclerView——完善篇
- django 1.11通用视图自带分页功能