我正在关注所有官方扩展文件指南,但我找不到它.我无法访问我需要的包含的obb文件.
我需要6个音频文件(80Mb),我在zip文件中"存储"(未压缩)并重命名为"main.2001.test.expansion.proj.obb"并存储在'/ mnt/sdcard/Android/obb/test中.expansion.proj /"
我会尝试访问这些文件
String mainFileName = Helpers.getExpansionAPKFileName(this,true,2001);
if(!Helpers.doesFileExist(this, mainFileName, 27959282L, false))
{
//download
} else {
Log.d("test_file","file exist");
}
ZipResourceFile expansionFile = APKExpansionSupport.getAPKExpansionZipFile(this,2001,2001);
if(expansionFile!=null)
{
ZipEntryRO[] ziro = expansionFile.getAllEntries();
for (ZipEntryRO entry : ziro) {
Log.d("test_files_zip", "fileZip filename: "+entry.getZipFileName());
try{
AssetFileDescriptor ro = entry.getAssetFileDescriptor();
Log.d("test_files_zip", "--fileZip getfiledescriptor.tostring: "+ro.getFileDescriptor().toString());
Log.d("test_files_zip", "--fileZip createinputstring.tostring: "+ro.createInputStream().toString());
AssetFileDescriptor assetFileDescriptor = expansionFile.getAssetFileDescriptor(entry.getZipFileName()+"/audio02.mp3");
if(assetFileDescriptor!=null) {
Log.d("test_files_mp3", "length: "+assetFileDescriptor.getLength()); //checking it exists
}
}catch (IOException e){ Log.e("test_exp","IoExcp: "+e.getMessage()); }
}
}
Run Code Online (Sandbox Code Playgroud)
In - > assetFileDescriptor = …
我正在对已经存储在商店中的应用程序进行一些修复.该应用程序使用扩展文件.我创建了一个新版本的应用程序并上传了apk和相关的扩展文件.当我尝试从eclipse运行应用程序时,应用程序启动,但随后下载的扩展文件失败并显示消息:"下载失败,因为您可能没有购买此应用程序." 显然我没有购买应用程序,我正在开发它!那么我该如何让它发挥作用呢?
我的应用程序已经增长到超过50mb,所以我现在需要使用扩展文件.在搜索时我发现有不同的文件可以用作扩展文件,如zip,pdf等.我试图将我的数据放在.obb文件中,但我不知道如何创建这些文件并放入这些文件中的数据.
先更新
:
我发现该jobb
工具用于创建obb文件.但我很困惑这个$ jobb -d /temp/assets/ -o my-app-assets.obb -k secret-key -pn com.my.app.package -pv 11
命令是如何运行的.
我试图($ jobb -d /temp/assets/ -o my-app-assets.obb -k secret-key -pn com.my.app.package -pv 11
在cmd 上运行它,但我的cmd说jobb无法识别为内部或外部命令.
第二: 我可以在这些obb文件中放入哪种类型的文件?我在考虑布局,可绘制的文件?
我正在使用sdks中给出的扩展文件演示,并将obb文件放在以下位置的SD卡上:
/Android/obb/package-name/package-name/main.versioncode.package-name.obb
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
XAPK文件验证失败
为了生成.obb
文件,这是我遵循的程序:
1)将所有图像复制到一个名为的文件夹main.versioncode.package-name.obb
,然后压缩该文件.
2)删除.zip文件扩展名并将其放入此文件中 /Android/obb/package-name/myobbfile.obb
这是正确的做法吗?
我们使用Google Play扩展APK机制获得了一个约600MB的大型扩展文件。我们还必须解压缩该文件以进行实际使用。因此,整个应用程序加上数据需要大约1.4 GB的存储空间。
据我所知,Google Play坚持将.obb下载到“内部” SD上,并且似乎没有任何方法可以更改它。我们有许多用户的“外部” SD卡上有很多可用空间,但内部的SD卡上的空间却有限。他们为该应用占用如此多的空间而尖叫。我们有什么可以做的吗?
目前,我们将.obb文件扩展为:
getExternalStorageDirectory()/ Android / data
我想我们可以问用户他们想要的地方,他们可以选择真正的外部SD卡。但是,这仍然会在内部SD卡上留下一个(大部分没用的).obb文件,Google Play表示我们无法删除此文件。
有人对如何正确处理有任何建议吗?
我的Google Play控制台中有一个“草稿” APK,它已连接到APK扩展文件。版本代码为9,扩展文件为“ main.9.com.something.something.obb”。
现在,我试图在发布前更新APK。我增加了版本代码,并进行了一些代码更改。上传APK时,我选择使用“ main.9.com.something.something.obb”作为扩展名。
现在,Google Play告诉我:
由于以下原因,无法发布此配置:版本9不能用于任何设备配置:可能收到版本9的所有设备都将收到版本10。
但是,如果我尝试删除版本9,它不会放任我,因为它表示还有其他版本取决于其扩展文件!
因此,这是一个无限循环,我无法更新我的APK。我发现的唯一解决方案是重新上传APK扩展(400MB),这是不可接受的。我不想每次更新应用程序时都这样做,因为用户将需要重新下载扩展程序。
另外,我几乎可以肯定,这绝不是那样,这是上一期引入的错误。我记得APK选项(例如“停用”等),现在找不到。有什么帮助吗?
我有两个文件(例如),我想放在我的apk主扩展文件中.让这些文件是img1.jpg和img2.jpg.我使用以下命令压缩它们:
zip -n .jpg main.123.in.example.app.obb *.jpg
Run Code Online (Sandbox Code Playgroud)
(版本代码为123,包为in.example.app).这将创建一个obb文件:main.123.in.example.app.obb
我将此代码放在适当的路径上.我可以通过调用以下内容轻松访问文件img1.jpg和img2.jpg:
File root = Environment.getExternalStorageDirectory();
File expPath = new File(root.toString() + "/Android/obb/in.example.app");
String pathToObb = expPath + File.separator + "main.123.in.example.app.obb";
ZipResourceFile zip = new ZipResourceFile(pathToObb);
InputStream iStream = zip.getInputStream("img1.jpg");
Bitmap bmp = BitmapFactory.decodeStream(iStream, null, options);// options to decode
Run Code Online (Sandbox Code Playgroud)
这非常有效.现在,如何读取使用以下内容创建的加密zip文件:
zip -n -encrypt .jpg main.123.in.example.app.obb *.jpg
Run Code Online (Sandbox Code Playgroud)
有什么方法可以读取这样的加密zip文件吗?或者我们是否使用jobb工具进行加密并使用StorageManager来挂载加密的obb并从那里读取?
在Android 6设备上,我们注意到扩展文件现在需要我们WRITE_EXTERNAL_STORAGE
在运行时请求权限,这允许用户拒绝,这不允许我们继续启动应用程序.
有没有办法阻止扩展文件使用WRITE_EXTERNAL_STORAGE
或防止用户拒绝?
如果在使用扩展文件时必须出现该请求,我们如何才能优雅地处理它?
我在处理APK扩展时遇到问题.在Java方面,我可以设置我应该设置的所有内容,但似乎我无法在c ++端正确修改代码.
在CCFileUtilsAndroid :: getFileData函数内:
if (fullPath[0] != '/')
{
CCLOG("GETTING FILE RELATIVE DATA: %s", fullPath.c_str());
pData = CCFileUtils::sharedFileUtils()->getFileDataFromZip("/storage/sdcard0/Android/obb/com.example.package/main.1.com.example_package.obb", fullPath.c_str(), pSize);
}
Run Code Online (Sandbox Code Playgroud)
但是pData var总是为null(如果我是对的,这意味着它无法加载).我想念的是什么人?
提前谢谢了
(ps:包在那里,我正在使用正确的路径)
我正在尝试在我的android项目中使用apk扩展文件,我已经阅读了此
http://developer.android.com/google/play/expansion-files.html
我试图按照这些步骤操作,但是我不知道该怎么做建立/ include
在我的项目/ Google Play上的APK扩展库。我一直在找几个小时,找不到正确的答案。有什么帮助吗?