`
喧嚣求静
  • 浏览: 580203 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

android使用build.xml配置assert文件中不压缩的类型文件

 
阅读更多

问题:

在做文本文件读取时,从assert文件中获取文件

getResources().getAssets().openFd("test.txt").getFileDescriptor()

会报错,提示File not Found ,because the file compressed,查找了很多资料,android打包成apk时,在assert文件中,除了音视频文件不压缩外,像txt之类的会进行压缩成zip包,以节约空间,所以getFileDescriptor()时获取不到,

通用都是获取文件流,但在做大文件读取时,最新技术推荐使用java nio中内存映射技术MappedByteBuffer

 

public void openbook(FileDescriptor fileD) throws IOException {
  
  //book_file = new File(strFilePath);
  FileInputStream in=new FileInputStream(fileD);
  long lLen = in.available();
  m_mbBufLen = (int) lLen;
  m_mbBuf =in.getChannel().map(
    FileChannel.MapMode.READ_ONLY, 0, lLen);
 }

 问题参考:

http://ponystyle.com/blog/2010/03/26/dealing-with-asset-compression-in-android-apps/

When developing an Android app, any data file, image or XML file (that is, any Resource or Asset) you use is bundled into your application package (APK) for distribution. The Android Asset Packaging Tool, or aapt, is responsible for creating this bundle, which you can think of as a ZIP file with a particular layout that the Android OS can understand. When your application is installed, whether in development mode or by an end user, this APK file is simply dropped into a special location on the device’s (or emulator’s) filesystem.

As part of preparing your APK, aapt selectively compresses various assets to save space on the device. The way aapt determines which assets need compression is by their file extension. The following code, taken from Package.cpp in the aaptsource code, sheds some light on which types of files are not compressed by default:

/* these formats are already compressed, or don't compress well */
static const char* kNoCompressExt[] = {
    ".jpg", ".jpeg", ".png", ".gif",
    ".wav", ".mp2", ".mp3", ".ogg", ".aac",
    ".mpg", ".mpeg", ".mid", ".midi", ".smf", ".jet",
    ".rtttl", ".imy", ".xmf", ".mp4", ".m4a",
    ".m4v", ".3gp", ".3gpp", ".3g2", ".3gpp2",
    ".amr", ".awb", ".wma", ".wmv"
};

 

 

解决方案:

配置build.xml时配置不压缩txt文件

D:\android-eclipse\sdk\tools\ant

<!-- Puts the project's resources into the output package file
         This actually can create multiple resource package in case
         Some custom apk with specific configuration have been
         declared in default.properties.
         -->
    <target name="-package-resources" depends="-crunch">
        <!-- only package resources if *not* a library project -->
        <do-only-if-not-library elseText="Library project: do not package resources..." >
            <aapt executable="${aapt}"
                    command="package"
                    versioncode="${version.code}"
                    versionname="${version.name}"
                    debug="${build.is.packaging.debug}"
                    manifest="${out.manifest.abs.file}"
                    assets="${asset.absolute.dir}"
                    androidjar="${project.target.android.jar}"
                    apkfolder="${out.absolute.dir}"
                    nocrunch="${build.packaging.nocrunch}"
                    resourcefilename="${resource.package.file.name}"
                    resourcefilter="${aapt.resource.filter}"
                    libraryResFolderPathRefid="project.library.res.folder.path"
                    libraryPackagesRefid="project.library.packages"
                    libraryRFileRefid="project.library.bin.r.file.path"
                    previousBuildType="${build.last.target}"
                    buildType="${build.target}"
                    ignoreAssets="${aapt.ignore.assets}">
                <res path="${out.res.absolute.dir}" />
                <res path="${resource.absolute.dir}" />
              <nocompress extension="txt" />
                <!-- <nocompress /> forces no compression on any files in assets or res/raw -->
                <!-- <nocompress extension="xml" /> forces no compression on specific file extensions in assets and res/raw -->
            </aapt>
        </do-only-if-not-library>
    </target>

 

 

 

 

 

分享到:
评论

相关推荐

    java、android解压缩Assert文件夹下的压缩文件

    通过调用UnzipUtils下面的UnzipUtils.createFile&#40;locationZip&#41;;UnzipUtils.copyBigDataToSD(MainActivity.this, locationZip, ZIP_NAME);UnzipUtils.upZipFile&#40;new File(locationZip&#41;...

    assert.h头文件

    assert.h头文件下载

    junit的jar包

    junit.framework.Assert.class junit.framework.AssertionFailedError.class junit.framework.ComparisonCompactor.class junit.framework.ComparisonFailure.class junit.framework.JUnit4TestAdapter.class junit....

    android用webview加载assert中的html并且可拨打页面中的电话

    这篇教程将详细介绍如何在Android应用中使用Webview加载assert目录下的HTML文件,并且使用户能够通过Webview拨打电话。 首先,我们需要了解`WebView`。`WebView`是Android SDK提供的一种控件,用于在应用程序内嵌入...

    AndroidO图标.zip

    接下来,"Android O图标.odt"可能是文档教程,详细解释如何在AndroidManifest.xml文件中设置Adaptive Icon。开发者需要添加标签内的&lt;application android:icon="@mipmap/my_icon"&gt;,其中"my_icon"是之前创建的mipmap...

    读写Android中assets目录下的文件的方法详解

    下面是一段示例代码,展示了如何在`B.apk`(一个拥有系统权限的服务或活动)中使用`AssetManager`从`A.apk`(只包含资源的apk)复制文件到特定目录: ```java public void onCreate(Bundle savedInstanceState) { ...

    Android读取Assert资源目录下数据库,数据库操作

    `assets`是Android应用中的一个特殊目录,用于存放原始的、未处理的文件,如文本文件、数据库文件、音频文件等。这些文件不会被编译或转换,可以在运行时通过`AssetManager`访问。 要从`assets`目录读取数据库,你...

    android-power-assert-plugin-0.10.5.zip

    这个压缩文件“android-power-assert-plugin-0.10.5.zip”包含了Android开发中一个名为“Power Assert”的插件的0.10.5版本。Power Assert是一种增强型断言工具,它在调试时能提供更丰富的信息,帮助开发者更好地...

    Assert使用

    `Assert` 通常在 C++、Java、C# 和 Python 等多种编程语言中被使用,它的主要功能是检查程序中的条件是否满足,如果条件不满足,即断言失败,程序会抛出一个错误或者终止执行,这对于找出代码中的逻辑错误非常有帮助...

    Android 加载assets文件夹的文本文件 图片

    在Android开发中,`assets`文件夹是一个非常重要的资源存储位置,它允许开发者存放各种非结构化的数据,如文本文件、图片、音频等。这些文件不会被编译到APK的资源表中,但可以在运行时通过AssetManager访问。本篇...

    wildfly-common-1.5.2.Final-API文档-中文版.zip

    赠送jar包:wildfly-common-1.5.2.Final.jar; 赠送原API文档:wildfly-common-1.5.2.Final-javadoc.jar; 赠送源代码:wildfly-common-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    Gradle编译打包Android apk详细介绍

    理解Gradle构建过程,解读Android Gradle插件的配置 阅读本文一定是要使用过Gradle生成apk,文中不会讲如何安装运行Gradle,如有需要可先看文末的参考文章。 APK包是一个ZIP压缩包,从Java源代码、资源文件到生成这...

    Generating Artifacts问题解决.doc

    这个错误提示表明,在使用Proxool作为连接池提供者时,Hibernate无法加载必要的配置文件`proxool_mysql.xml`。这通常是因为配置文件缺失或路径不正确导致的。 ##### 解决方案 1. **检查配置文件是否存在**:首先...

    assets下使用gson进行json文件读取

    首先,`assets`目录是Android项目中的一个特殊目录,用于存放应用运行时所需的静态资源,如文本文件、配置文件等。由于它不包含在编译过程中,所以对于非代码的资源,如JSON文件,我们通常选择将其放入`assets`。 ...

    业务异常提示处理 springboot+Assert(自定义断言)

    在IT行业中,异常处理是系统稳定性和健壮性的重要组成部分,尤其是在使用Spring Boot进行Web开发时。本项目“业务异常提示处理 springboot+Assert(自定义断言)”着重于利用Spring Boot的特性来构建高效、易维护的...

    Maven下载、安装、配置与使用教程.md

    import static org.junit.Assert.assertEquals; public class AppTest { @Test public void testApp() { String result = App.main(new String[]{"Hello, Maven!"}); assertEquals("Hello, Maven!", result);...

    Android 使用MediaPlayer播放assets或者raw目录的音频文件

    Android 使用MediaPlayer播放assets或者raw目录的音频文件 https://blog.csdn.net/qq_31939617/article/details/80491552

    HowTo 抓取 Assert Memory dump.pdf

    确保`.axf`文件与下载到设备中的modem bin文件来自同一编译,否则在Trace32工具中恢复现场时可能会出现信息不完整或错位的情况。如果未提供`.axf`文件,需向研发团队提供正确的版本号,这可以通过查看`.ass`文件或在...

    Huffman编码源代码压缩文本文件用

    3. **#include&lt;assert.h&gt;**:包含了断言库,用于在调试阶段检查程序中的某些条件是否满足。 4. **#include**:包含了C++标准字符串库。 5. **#include**:包含了C++标准队列容器库,可能用于在解码过程中按层遍历...

Global site tag (gtag.js) - Google Analytics