库插件::找不到库资源

时间:2012-12-12 13:54:08

标签: android plugins unity3d

我目前正在将Android库转换为Unity插件。 我已经走了很长的路,但现在我已经陷入无法从Unity访问图书馆资源的地步。

应用程序运行正常,直到我实际调用库中的视图。 这是我当时得到的错误日志:

12-12 13:37:36.495: W/ResourceType(32155): getEntry failing because entryIndex 1 is beyond type entryCount 1
12-12 13:37:36.495: W/ResourceType(32155): Failure getting entry for 0x7f030001 (t=2 e=1) in package 0 (error -2147483647)
12-12 13:37:36.500: D/AndroidRuntime(32155): Shutting down VM
12-12 13:37:36.500: W/dalvikvm(32155): threadid=1: thread exiting with uncaught exception (group=0x4109a2a0)
12-12 13:37:36.505: E/AndroidRuntime(32155): FATAL EXCEPTION: main
12-12 13:37:36.505: E/AndroidRuntime(32155): android.content.res.Resources$NotFoundException: Resource ID #0x7f030001
12-12 13:37:36.505: E/AndroidRuntime(32155): at android.content.res.Resources.getValue(Resources.j ava:1026)
12-12 13:37:36.505: E/AndroidRuntime(32155): at android.content.res.Resources.loadXmlResourceParse r(Resources.java:2131)
12-12 13:37:36.505: E/AndroidRuntime(32155): at android.content.res.Resources.getLayout(Resources. java:865)
12-12 13:37:36.505: E/AndroidRuntime(32155): at android.view.LayoutInflater.inflate(LayoutInflater .java:394)
12-12 13:37:36.505: E/AndroidRuntime(32155): at android.view.LayoutInflater.inflate(LayoutInflater .java:352)
12-12 13:37:36.505: E/AndroidRuntime(32155): at com.mycompany.mylibrary.components.AndroidWebViewD ialog.<init>(AndroidWebViewDialog.java:140)
12-12 13:37:36.505: E/AndroidRuntime(32155): at com.mycompany.mylibrary.FunctionAndroidLibrary.Sho wDialog(FunctionAndroidLibrary.java:163)
12-12 13:37:36.505: E/AndroidRuntime(32155): at com.mycompany.mylibrary.FunctionAndroidLibrary.but tonREGISTER(FunctionAndroidLibrary.java:94)
12-12 13:37:36.505: E/AndroidRuntime(32155): at com.mycompany.myUnityProjectAndroidLibraryTest$1.r un(AndroidLibraryTest.java:78)
12-12 13:37:36.505: E/AndroidRuntime(32155): at android.os.Handler.handleCallback(Handler.java:615 )
12-12 13:37:36.505: E/AndroidRuntime(32155): at android.os.Handler.dispatchMessage(Handler.java:92 )
12-12 13:37:36.505: E/AndroidRuntime(32155): at android.os.Looper.loop(Looper.java:137)
12-12 13:37:36.505: E/AndroidRuntime(32155): at android.app.ActivityThread.main(ActivityThread.jav a:4898)
12-12 13:37:36.505: E/AndroidRuntime(32155): at java.lang.reflect.Method.invokeNative(Native Method)
12-12 13:37:36.505: E/AndroidRuntime(32155): at java.lang.reflect.Method.invoke(Method.java:511)
12-12 13:37:36.505: E/AndroidRuntime(32155): at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:1006)
12-12 13:37:36.505: E/AndroidRuntime(32155): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:773)
12-12 13:37:36.505: E/AndroidRuntime(32155): at dalvik.system.NativeStart.main(Native Method)
  • 这些资源实际存在于库.jar文件中。
  • setContentView()已从Unity Android项目中禁用

任何可以提供帮助的人? 提前谢谢!

[编辑] 我想我在这里发现了问题: http://tools.android.com/recent/dealingwithdependenciesinandroidprojects

Important change: We have changed the way Library Projects generate and package R classes:
The R class is not packaged in the jar output of Library Projects anymore.
Library Project do not generate the R class for Library Projects they depend on. Only main application projects generates the Library R classes alongside their own.

有谁知道与Unity3D一起解决此问题的最佳解决方案是什么?

4 个答案:

答案 0 :(得分:3)

实际上它是由Unity3D的不合适的后期打包过程引起的。它在aapt生成包含资源ID 的R类之前生成dex文件。因此,您没有机会依赖静态资源ID

我已经通过为Unity3D编写一个编辑器插件解决了这个问题。但我现在无法释放它,因为它有问题,而且我现在忙于修复它。

但由于您的问题是移植代码。我建议您更改java中的资源加载代码以采用Unity3D引起的此问题。

// context should be the activity of your unity3d application which raise the call to your plugin.

// Loading string
String myResString = context.getResources().getString(
        context.getResources().getIdentifier("sample_string",
                                             "string",
                                             context.getPackageName()));

// Loading image
AlertDialog.Builder tDialog = new AlertDialog.Builder(context);
tDialog.setIcon(
      context.getResources().getIdentifier("sample_icon", "drawable", context.getPackageName())
);

答案 1 :(得分:1)

请参阅以下帖子:

Custom Resources in a Unity Android Project

显示问题所在以及如何检索资源ID。

答案 2 :(得分:1)

我遇到了同样的问题,但在Unity 4.3上找到了一种干净的方法。

我正在将Google Play游戏服务库与我自己的Java代码集成,并从中创建插件。

首先确保库项目被标记为Android项目的库。 从eclipse导出jar时,导出派生项目的res文件夹,而不是库项目。库项目中的资源会自动合并到派生项目中。完成此步骤后,您应该有一个包含类文件和res文件夹的jar。

从jar中提取此res文件夹并将其放在Plugins / Android文件夹中。

现在,当您从Unity构建项目时,它应该都可以正常工作。

编辑:我认为您可以直接将派生项目的res文件夹复制到Unity的Plugins / Android文件夹中。无需导出到罐子里。

答案 3 :(得分:-1)

我将xml文件复制到Android / Plugin / res / xml /并找到此资源!但是当我将laoyout-file复制到Android / Plugin / res / layout时 - 我收到异常,当为android构建unity3d时:

错误构建Player:CommandInvokationFailure:无法重新打包资源。请参阅控制台了解详细信息 /Android-SDK/sdk/build-tools/22.0.0/aapt package --auto-add-overlay -v -f -m -J gen -M AndroidManifest.xml -S“res”-I“/ Android-SDK /sdk/platforms/android-22/android.jar“-F bin / resources.ap_ --extra-packages com.prime31.IAB:com.facebook.android:com.google.android.gms -S”/ Projects / bottle_client_unity / Bottle_Unity / Temp / StagingArea / android-libraries / facebook / res“-S”/ Projects / bottle_client_unity / Bottle_Unity / Temp / StagingArea / android-libraries / google-play-services_lib / res“

stderr的[ res / drawable / com_facebook_close.png:libpng警告:iCCP:无法识别已编辑的已知sRGB配置文件 res / drawable-ldpi / com_facebook_close.png:libpng警告:iCCP:无法识别已编辑的已知sRGB配置文件 res / drawable-hdpi / com_facebook_close.png:libpng警告:iCCP:无法识别已编辑的已知sRGB配置文件 res / drawable-xhdpi / com_facebook_close.png:libpng警告:iCCP:无法识别已编辑的已知sRGB配置文件