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 Game Services ライブラリを独自の Java コードと統合し、これらすべてからプラグインを作成していました。

まず、ライブラリ プロジェクトが Android プロジェクトのライブラリとしてマークされていることを確認します。Eclipse から jar をエクスポートするときは、ライブラリ プロジェクトではなく、派生プロジェクトの res フォルダーをエクスポートします。ライブラリ プロジェクトのリソースは、派生プロジェクトに自動的にマージされます。この手順の後、クラス ファイルと res フォルダーを含む jar が作成されます。

この res フォルダーを jar から抽出し、Plugins/Android フォルダーに配置します。

Unity からプロジェクトをビルドすると、すべてが機能するはずです。

編集: 派生プロジェクトの res フォルダーを Unity の Plugins/Android フォルダーに直接コピーできると思います。jar にエクスポートする必要はありません。

于 2014-01-17T02:45:55.697 に答える
-1

xml-file を Android/Plugin/res/xml/ にコピーすると、このリソースが見つかりました!!! しかし、laoyout-file を Android/Plugin/res/layout にコピーすると、Android 用の unity3d をビルドするときに例外が発生します。

Player の構築エラー: CommandInvokationFailure: リソースの再パッケージ化に失敗しました。詳細については、コンソールを参照してください。/Android-SDK/sdk/build-tools/22.0.0/aapt パッケージ --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 に答える