【问题标题】:in titanium, is it possible to access the 3rd-party-jar-bundled resource files( xml ) from an android module?在钛中,是否可以从 android 模块访问 3rd-party-jar-bundled 资源文件( xml )?
【发布时间】:2015-06-20 01:16:40
【问题描述】:

我一直在研究如何从 android 模块访问 3rd-party-jar-bundled 资源 文件(xml 文件、图像、引用 here)。可以这样做吗?

因为这些资源文件是由已编译的第 3 方 jar 文件调用的,这意味着,除非我:

  1. 将jar文件反编译成java代码。
  2. 将所有原生资源引用替换为 TiRHelper.getApplicationResource
  3. 重新编译第三方java源代码为jar文件。

(这个第三方项目是https://github.com/ShareSDKPlatform/ShareSDK-for-Android/tree/master/Sample,我可以轻松编译运行。你可以看到/res文件夹中有资源文件,其中一个jar文件使用了这些资源文件。)

我搜索了一整天,但没有找到答案。

我从官方document那里得到了一些线索,尝试了但没有成功。该错误表明钛模块中的 java 代码无法访问该资源。

同样,同样的问题(http://developer.appcelerator.com/question/178857/unable-to-load-resources-from-3rd-party-librarys-resourced-in-android-module)没有得到解答。

这个答案(http://developer.appcelerator.com/question/49671/android-r-references-in-appcelerator-module#answer-266726)给了我一个线索,方法是:

getResource() gives an Error
getAndroidResource() gives an Error
but getApplicationResource() DOES work

并且有一个线索表明'apklib'可能有用,但是在阅读了一些帖子后,我发现它已从maven官方网站上删除。现在 Google 建议改用“aar”文件。但是根据这个 Titanium 官方问题 (https://jira.appcelerator.org/browse/TIMOB-18565 ),它还没有被钛支持。

所以,我想知道,是否可以让 java 代码(例如活动)从 Titanium 模块访问其 3rd-party-jar-bundled 资源文件( value/string.xml 左右)?如果有,有没有可以参考的示例代码?

非常感谢!

【问题讨论】:

  • JAR 文件不包含 res/ 文件夹中的资源。 AAR 文件(或过去的 apklib)也包含资源作为捆绑包的一部分。当您“将第 3 方 java 源代码重新编译为 jar 文件”时,您可能会丢失资源。
  • @androidLearner 是的,jar 不包含资源文件,apklib 仅适用于旧 Maven 版本,Titanium 尚不支持 aar 文件。但是,我提到的资源文件是原生 android 项目的 android/res 文件夹下的文件。我找到了答案。无论如何,感谢您的关注!

标签: android module resources titanium


【解决方案1】:

(快速简短的回答:将资源文件作为“Titanium”项目的一部分,但不要将它们放入“模块”。如果您坚持将它们放入“模块”,请继续阅读。)

终于,我得到了答案。

官方文档是正确的,只是把3rd-party-jar的资源文件(原生android项目的res文件夹)放到了钛模块的android/platform/android文件夹下。而已!

例如我的模块项目结构如下图:

# name: test_ti_module_qq_login:
android
  \--assets
  \--build
  \--dist
  \--lib
  \--libs
  \--src
  \--platform
     \--android
        \--res    # just put the resources here in your module! 
           \--drawable
           \--drawable-hdpi
           \--drawable-xhdpi
           \--layout
           \--values
assets
documentation
example
LICENSE
... 

仅供参考,原生 android 资源文件夹如下所示:

# A native Android project structure   
▸ assets/          
▸ bin/             
▸ gen/             
▸ libs/           
▾ res/     # these are the bundled resource files
  ▸ drawable-hdpi/     
  ▸ drawable-xhdpi/    
  ▸ layout/     
  ▸ values/    
  ▸ src/       

Titanium 一直显示resource files missing 的根本原因是我错过了一些资源文件。 (不过有点直截了当,本机代码demo可以正常运行,无论如何,终于找到解决方案了)

补充:

好像很多人都遇到过同样的问题?这些天我将开源我的项目。

【讨论】:

  • 嗨,您知道如何使用 AAR 文件中的 Android Manifest.xml 文件吗?
  • 将该文件合并到钛的 tiapp.xml 中。阅读有关其官方文档的更多信息。
【解决方案2】:

根据新信息进行更新。为了让它工作,你只需要将 github 中的 res 文件夹合并到你的 platforms/android/res 文件夹中。然后当你正常编译你的模块时。

============================

如果您是从 java 中的模块内部访问,请尝试使用 TiRHelper.getApplicationResource 用于您提供的东西。

例如,如果您添加了:

平台/android/values/strings.xml 你好!

电话是

TiRHelper.getApplicationResource("string.helloworld");

Class Srouce

Javadoc

如果您觉得这有帮助,请投票。如果不告诉我,我可以调整。

【讨论】:

  • 感谢 Brad,资源是由 3rd-party-jar 文件调用的,而不是 Ti 生成的 java 文件。它在其 Demo(原生 android 项目)中运行良好。但是当我将它迁移到我的 ti 项目时,它会抱怨no resource found
  • 资源与 3rd-party-jar 文件捆绑在一起。
  • 您是否可以访问第 3 方模块的源代码?如果是这样,您希望将其编译为库,并且在构建所有内容时应将其解析出来。如果没有,您可能需要将字符串添加到资源文件中。
  • 我没有第三方模块的“源代码”,只有“jar”文件和捆绑的资源文件。 '将字符串添加到资源文件中'是什么意思?
  • 我的意思是进入您的 strings.xml 文件并添加缺失值。
猜你喜欢
  • 1970-01-01
  • 2015-04-16
  • 2017-06-20
  • 2012-03-20
  • 1970-01-01
  • 2016-01-07
  • 2012-04-26
  • 2013-12-07
  • 1970-01-01
相关资源
最近更新 更多