4

我目前正在将 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

4 回答 4

4

实际上是由于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())
);
于 2013-05-03T06:19:59.137 回答
1

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

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

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

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

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

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

于 2014-01-17T02:45:55.697 回答
1

请参阅以下帖子:

Unity Android 项目中的自定义资源

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

于 2013-06-17T14:22:29.343 回答
-1

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

错误构建播放器: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 配置文件

于 2015-04-15T06:52:49.237 回答