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 编辑
Android中jar包封装及调用
在android开发过程中,我们经常会有这种需求,自己开发一个类库jar包,提供给别人调用。 即把项目A封装成jar包,供项目B调用,而在项目B中调用项目A的activity的时候问题就出现了:找不到资源文件(异常:ERROR/AndroidRuntime(3341):Caused by: android.content.res.Resources$NotFoundException: Stringresource ID #0x7f060007)。问题是,只能共享src文件夹下的代码,而不能共享res资源文件,够郁闷!创建一个Androidproject, 用eclipse的export导出,去掉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,例如layout中ee.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就正常了。
|
相关推荐
这个压缩包包含了必要的jar文件和其他资源文件,如libs目录下的BaiduMapSDK_v2.1.2.jar,这是实现百度地图功能的核心库。 1. **集成百度地图SDK** - 将下载的jar包解压,将`BaiduMapSDK_v2.1.2.jar`添加到项目的`...
需要注意的是,这里并不是直接替换原有的英文资源文件`resources_en.jar`,而是保留原有的英文版,以防万一需要切换回英文界面或者遇到未汉化的部分。 具体操作步骤如下: 1. 首先,确保你已经下载了`resources_...
在Java开发中,jar(Java Archive)是用于打包类文件、资源文件和元数据的容器,它允许开发者将多个类文件合并到一个单一的文件中,便于分发和运行。在百度地图Android SDK中,jar包包含了所有需要的API接口和实现,...
这个源码版本包含了处理Android 8.0及以上系统无法获取屏幕快照的问题,同时提供了在Windows 7环境下运行所需的jar包。在Windows 10系统上,可能需要额外替换`swt.jar`包来确保兼容性。 **UiAutomator框架详解:** ...
通常,这些ID在`R.java`文件中生成,它是由Android编译器自动生成的,包含了应用所有资源的引用。然而,在某些情况下,如将代码打包成JAR文件或移植到其他APK时,`R.java`文件不能被包含,这会导致`import`错误。...
在Android开发领域,APK是应用的安装包格式,它包含了所有用于运行应用程序的代码、资源文件和元数据。为了对APK进行分析、修改或优化,开发者有时需要反编译APK。APKTool是一个非常重要的工具,专门用于这个目的。...
在给定的压缩包文件中,我们看到的是"WeChatSDK_Android",这包含了集成所需的所有文件。 3. 集成SDK:将下载的SDK解压后,将lib文件夹下的jar包导入Android项目,同时需要在AndroidManifest.xml中添加必要的权限...
2. **getResource() 方法**: 在Java中,我们可以使用类的`getClass().getResource()`或`getClass().getResourceAsStream()`方法来获取类路径中的资源。这在处理嵌入在JAR文件中的图像时特别有用,因为它们可以直接...
Android应用程序结构清晰,包括src(源代码)、assets(非编译资源)、res(资源文件)、gen(自动生成文件)目录,以及android.jar库文件和AndroidManifest.xml、default.properties等工程文件。其中,R.java文件由...
本文将详细介绍如何对Android应用程序进行反编译,并获取其源代码及资源文件。 #### 二、准备工作 1. **测试环境**: - Windows 7 Ultimate x64 - Ubuntu 12.04 x86_x64 2. **工具下载**: - **dex2jar** 和 **...
在Android开发和维护中,有时候我们需要获取APK文件的一些详细信息,例如文件包名、版本号、SDK版本等。这时,我们可以借助Android SDK中的`aapt`(Android Asset Packaging Tool)命令行工具来实现。`aapt`是一个...
----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...
同时,需要将资源文件复制到项目的`res`目录下,确保它们能在运行时被正确加载。 7. **自定义和扩展**: 除了使用预定义的对话框样式,开发者还可以根据源码修改或扩展对话框的行为和外观,例如改变按钮文字、添加新...
- **ivw_resource.jet**:唤醒资源文件,必须被导入到项目中。 - **libalsa-jni.so**:录音机so库,提供了录音的本地接口。 - **libcae.so**:语言引擎so库,提供了处理语音唤醒和音频抽取的本地接口。 - **...
这个工具支持处理ARSC(Android资源字符串表)文件,能够处理各种类型的资源,如图片、布局、字符串等。 二、无用资源删除 AndResGuard通过对APK进行静态分析,找出在编译后未被引用的资源,这些资源可能是由于代码...
在大多数情况下,图标是以图像文件(如PNG、ICO或ICNS格式)的形式存在于项目资源文件中,或者嵌入在可执行文件或库文件中。提取这些图标通常涉及到解析文件结构,找到存储图标数据的部分,并将其导出为可用的图像...
"一键apktool"工具是Android应用开发者和逆向工程师常用的一款工具,主要用于反编译APK文件,以获取APK内部的源代码、资源文件、XML布局等信息。这款工具的核心在于apktool.jar,它是apktool的主要执行文件,而...
4. **解析资源文件**:资源文件(res/目录)包含布局、图片、字符串等,可以使用Resource Extractor或Apktool等工具将其解析成XML格式。 5. **分析AndroidManifest.xml**:这是应用的核心配置文件,包含权限、组件...
- 在Android项目根目录下,打开或创建`build.xml`文件,这是Ant的构建脚本。 - 添加Ant-contrib任务定义,例如: ```xml <taskdef resource="net/sf/antcontrib/antcontrib.properties"> ...