`
ericbaner
  • 浏览: 177431 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【转】Android jar resource 资源文件的获取

 
阅读更多

jar引用的资源文件必须放在assets文件夹中,并且布局文件和Drawable必须是编译过的格式,否则布局文件无法解析,一般的Drawable尺寸不正确,Nine-Patch无法拉伸。

  抽取布局文件的方法如下,其中fileName必须包含assets/路径:

    public static View extractView(Context context, String fileName, ViewGroup root) throws Exception {
            XmlResourceParser parser = context.getAssets().openXmlResourceParser(fileName);
            LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            return inflater.inflate(parser, root);

    }

    注意,如果root为null,那么该布局文件的根元素属性会被忽略,比如固定的长和宽等,解决的一个办法是在外层再嵌套一个ViewGroup。

  抽取Drawable的方法是,其中fileName不必包含assets/路径:

    public static Drawable extractDrawable(Context context, String fileName) throws Exception {

      InputStream inputStream = context.getAssets().open(fileName);
      TypedValue value = new TypedValue();

      /** 传入TypeValue,指定资源的像素密度是基于320*480屏幕的 */
      value.density = 160; 

      /** 传入Resources,以获取目标屏幕像素密度 */ 

      Drawable drawable = Drawable.createFromResourceStream(context.getResources(), value, inputStream, fileName);
      inputStream.close();
      return drawable;
    }

  StateListDrawable添加状态时,enabled状态必须放在最后,值为false的状态只需取状态常量的相反数即可。

 

本帖最后由 维王 于 2012-4-6 16:08 编辑

Androidjar包封装及调用
        android开发过程中,我们经常会有这种需求,自己开发一个类库jar包,提供给别人调用。 即把项目A封装成jar包,供项目B调用,而在项目B中调用项目Aactivity的时候问题就出现了:找不到资源文件(异常:ERROR/AndroidRuntime(3341):Caused by: android.content.res.Resources$NotFoundException: Stringresource ID #0x7f060007)。问题是,只能共享src文件夹下的代码,而不能共享res资源文件,够郁闷!创建一个Androidproject, eclipseexport导出,去掉AndroidManifest.xml,res 什么的,这样只共享了代码,而此代码中所调用的res资源文件却不能正常使用,否则会抛出res.Resources$NotFoundException异常。那么如何解决呢?        
        1.如果只用共享代码,而共享的代码中不涉及到res资源文件的调用的话,直接在Eclipse中导出jar包,在所需要的项目中引用即可。        
        2.如果共享代码,而且共享的代码中涉及到res资源文件的调用,网上通用的方法是把res资源文件放到assets文件夹中,再在src代码中加载处理,然后再用eclipse导出jar包,引用即可(res资源虽然可以打进jar包,但当其他项目调用jar包时jar包中引用ID 指向的是当前项目的资源,关于如何让jar包中的资源引用只想jar包中的res文件暂无解决方案。我的问题已解决,解决方案:把图片资源放入assets包中一并打入jar包,布局就只能用代码了。jar包中代码可以成功引用jar包内的assets文件。
另:JNI层不可被打包入jar包,只能同jar包一同提供给第三方并放入工程目录下的libs包中)。        
        3.如果共享代码,而且涉及到res资源文件的调用,而且不想把res资源文件放到assets文件夹中的,直接生成jar包会出现的问题:
                1).当在别的项目中引用此jar包时,在项目名上出现小红叉,并且在console控制台上直接自动提示:Errorgenerating final archive: Found duplicate file for APK:res/drawable-hdpi/icon.png,通常的解决方法时,在能编译通过的此项目中直接去掉提示的资源文件,再生成jar包。
                2).把公共的icon等资源文件删除,生成jar包之后,此时在项目中引用,console控制台上无自动报错现象。如果jar包中的activity调用了res资源文件夹中的文件,在当前项目中调用jar包中的acticity时,问题就出现了,activity所引用的res资源,如果引用的是Strings.xml文件中的值,则抛出异常ERROR/AndroidRuntime(3341):Caused by: android.content.res.Resources$NotFoundException:Stringresource ID#0x7f060007。如果引用的是layout文件夹中的文件,能找到layout中的xml,例如layoutee.xml,可以找到R.layout.ee,但是在ee.xml中定义的控件id却引用不到,抛出异常ERROR/AndroidRuntime(13703):Caused by:java.lang.NullPointerException。如果在当前项目中调用不涉及jar包中的res的调用,一切OK        
        4.如果共享代码,而且共享的代码中涉及到res资源文件的调用,如果封装成jar包,这种方法是达不到要求的(调用jar中封装的activity,还得保证jar包中activity正常调用jar中所封装的res资源,上面说了,jar包中的res资源部分调用为空),那么如何能满足需求呢?把要生成jar包的项目做一下处理,在jar包项目的properties窗口中选择android的选项卡的isLibaray,点击apply按钮或者ok按钮(此时,jar包项目再点击右键选择runas →  AndroidApplication就能正常运行了)。在要引用jar包的项目中,右击项目名称,打开properties框口,选择android的选项卡的isLibaray右侧的Add按钮,添加jar包项目。这样jar包项目中的activity就能正常引用到jar包项目中的res资源了。项目调用jar包项目的activity就正常了。
分享到:
评论

相关推荐

    android 百度地图的使用jar包

    这个压缩包包含了必要的jar文件和其他资源文件,如libs目录下的BaiduMapSDK_v2.1.2.jar,这是实现百度地图功能的核心库。 1. **集成百度地图SDK** - 将下载的jar包解压,将`BaiduMapSDK_v2.1.2.jar`添加到项目的`...

    AndroidStudio3.0汉化

    需要注意的是,这里并不是直接替换原有的英文资源文件`resources_en.jar`,而是保留原有的英文版,以防万一需要切换回英文界面或者遇到未汉化的部分。 具体操作步骤如下: 1. 首先,确保你已经下载了`resources_...

    百度地图Android的jar包

    在Java开发中,jar(Java Archive)是用于打包类文件、资源文件和元数据的容器,它允许开发者将多个类文件合并到一个单一的文件中,便于分发和运行。在百度地图Android SDK中,jar包包含了所有需要的API接口和实现,...

    UiAutomatorViewer源码 (附带jar包)

    这个源码版本包含了处理Android 8.0及以上系统无法获取屏幕快照的问题,同时提供了在Windows 7环境下运行所需的jar包。在Windows 10系统上,可能需要额外替换`swt.jar`包来确保兼容性。 **UiAutomator框架详解:** ...

    androidjava源码-ResourcesId:android动态获取资源ID,避免打包成jar文件,或者移植代码到别的APK中时,R.j

    通常,这些ID在`R.java`文件中生成,它是由Android编译器自动生成的,包含了应用所有资源的引用。然而,在某些情况下,如将代码打包成JAR文件或移植到其他APK时,`R.java`文件不能被包含,这会导致`import`错误。...

    apktool.jar最新版2.4.1

    在Android开发领域,APK是应用的安装包格式,它包含了所有用于运行应用程序的代码、资源文件和元数据。为了对APK进行分析、修改或优化,开发者有时需要反编译APK。APKTool是一个非常重要的工具,专门用于这个目的。...

    WeChatSDK_Android2018

    在给定的压缩包文件中,我们看到的是"WeChatSDK_Android",这包含了集成所需的所有文件。 3. 集成SDK:将下载的SDK解压后,将lib文件夹下的jar包导入Android项目,同时需要在AndroidManifest.xml中添加必要的权限...

    image资源文件,winrar.zip

    2. **getResource() 方法**: 在Java中,我们可以使用类的`getClass().getResource()`或`getClass().getResourceAsStream()`方法来获取类路径中的资源。这在处理嵌入在JAR文件中的图像时特别有用,因为它们可以直接...

    android 复习知识.doc

    Android应用程序结构清晰,包括src(源代码)、assets(非编译资源)、res(资源文件)、gen(自动生成文件)目录,以及android.jar库文件和AndroidManifest.xml、default.properties等工程文件。其中,R.java文件由...

    android 反编译

    本文将详细介绍如何对Android应用程序进行反编译,并获取其源代码及资源文件。 #### 二、准备工作 1. **测试环境**: - Windows 7 Ultimate x64 - Ubuntu 12.04 x86_x64 2. **工具下载**: - **dex2jar** 和 **...

    Android通过aapt命令获取apk详细信息(包括:文件包名,版本号,SDK等信息)

    在Android开发和维护中,有时候我们需要获取APK文件的一些详细信息,例如文件包名、版本号、SDK版本等。这时,我们可以借助Android SDK中的`aapt`(Android Asset Packaging Tool)命令行工具来实现。`aapt`是一个...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...

    仿iPhone风格对话框示例,Jar包及源码.zip

    同时,需要将资源文件复制到项目的`res`目录下,确保它们能在运行时被正确加载。 7. **自定义和扩展**: 除了使用预定义的对话框样式,开发者还可以根据源码修改或扩展对话框的行为和外观,例如改变按钮文字、添加新...

    科大讯飞6麦CAE集成指南_android_V1.2

    - **ivw_resource.jet**:唤醒资源文件,必须被导入到项目中。 - **libalsa-jni.so**:录音机so库,提供了录音的本地接口。 - **libcae.so**:语言引擎so库,提供了处理语音唤醒和音频抽取的本地接口。 - **...

    基于AndResGuard开源库对apk进行无用资源删除、重复资源删除、大图检测

    这个工具支持处理ARSC(Android资源字符串表)文件,能够处理各种类型的资源,如图片、布局、字符串等。 二、无用资源删除 AndResGuard通过对APK进行静态分析,找出在编译后未被引用的资源,这些资源可能是由于代码...

    提取应用程序图标的源代码资源

    在大多数情况下,图标是以图像文件(如PNG、ICO或ICNS格式)的形式存在于项目资源文件中,或者嵌入在可执行文件或库文件中。提取这些图标通常涉及到解析文件结构,找到存储图标数据的部分,并将其导出为可用的图像...

    一键apktool

    "一键apktool"工具是Android应用开发者和逆向工程师常用的一款工具,主要用于反编译APK文件,以获取APK内部的源代码、资源文件、XML布局等信息。这款工具的核心在于apktool.jar,它是apktool的主要执行文件,而...

    apk 可视化一键反编译工具

    4. **解析资源文件**:资源文件(res/目录)包含布局、图片、字符串等,可以使用Resource Extractor或Apktool等工具将其解析成XML格式。 5. **分析AndroidManifest.xml**:这是应用的核心配置文件,包含权限、组件...

    Android ant 多渠道批量打包解决方案

    - 在Android项目根目录下,打开或创建`build.xml`文件,这是Ant的构建脚本。 - 添加Ant-contrib任务定义,例如: ```xml <taskdef resource="net/sf/antcontrib/antcontrib.properties"> ...

Global site tag (gtag.js) - Google Analytics