组装条件升级后,getStartOffset 返回 assets 文件夹中文件的错误值
Posted
技术标签:
【中文标题】组装条件升级后,getStartOffset 返回 assets 文件夹中文件的错误值【英文标题】:getStartOffset returns wrong value of file in assets folder after upgrade of assembly conditions 【发布时间】:2017-06-09 16:50:08 【问题描述】:我升级装配条件后getStartOffset()
方法无法正常工作。
以下代码片段可以很好地使用 api 19(android 插件 1.5.0 + Gradle 版本 2.2.1 构建应用程序>),但是当我尝试对 api 25 和其他构建条件(Android 插件 2.2.0 + Gradle 版本 2.14 .1),getStartOffset()
返回值更大的文件长度。返回的长度为真。
其实读取的“png”-文件不是图片,我按照aapt的要求给了它扩展PNG。
AssetFileDescriptor in = null;
FileInputStream fin = null;
FileChannel channel = null;
try
in = context.getAssets().openFd(file); // .png
fin = in.createInputStream();
channel = fin.getChannel();
int length = (int) in.getLength(); // channel.size();
int offSet = (int) in.getStartOffset();
MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY,
0, length + offSet);
...
...
有什么问题?谢谢
【问题讨论】:
【参考方案1】:这是正常行为。我不得不查看APK file
的内容来散列编辑器。令我惊讶的是,我的 PNG 文件两次出现在 APK-file
中:它的第一个入口偏移量是 52 字节,在第二种情况下,startOffset 超过 2MB。 IE。 StartOffset 是 apk-package 中的偏移。
兴奋是徒劳的。一切正常:
MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY, offSet, length);
int spos = 0;
while(spos < length)
......
【讨论】:
以上是关于组装条件升级后,getStartOffset 返回 assets 文件夹中文件的错误值的主要内容,如果未能解决你的问题,请参考以下文章