私は自分のAndroid用Androidプラグインを構築する方法を理解しようとしています。
Javaクラス(AndroidStudioで作成されたクラス)で静的メソッドを呼び出すことはできましたが、非静的メソッドを呼び出すことはできません。
私はそれらのリンクをチェックします:
https://answers.unity.com/questions/884503/cant-call-non-static-method-in-androidjavaclass.html
http://leoncvlt.com/blog/a-primer-on-android-plugin-development-in-unity/
https://answers.unity.com/questions/1327186/how-to-get-intent-data-for-unity-to-use.html
- Unity Androidプラグインから非静的メソッドを呼び出す方法は?
しかし、どれも機能しません。
Unityのボタンから次のように呼び出しを取得しようとしています:
AndroidJavaClass UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject currentActivity = UnityPlayer.Get<AndroidJavaObject>("currentActivity");
currentActivity.Call("SayHi");
Androidでの私の活動は次のようになります。
public class MainActivity extends UnityPlayerActivity {
private static final String TAG = "LibraryTest";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "Created!");
}
public void SayHi()
{
Log.d(TAG, "HI_");
}
}
UnityPlayerではなく、次のように呼び出してみました。
AndroidJavaClass pluginClass = new AndroidJavaClass("com.example.eric.librarytest.MainActivity");
編集: これは私のAndroidManifest.xmlです
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.eric.librarytest"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="24"
android:targetSdkVersion="28" />
<application android:label="@string/app_name" >
<activity
android:name="com.example.eric.librarytest.MainActivity"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
しかし、非静的メソッドでも機能せず、静的メソッドでのみ機能しますpluginClass.CallStatic("")
。
編集2:
Taras LeskivはUnityPlayer.GetをUnityPlayer.GetStaticに変更することを提案していますが、次のエラーが発生します:
エラー:java.lang.NoSuchMethodError:クラスLjava.lang.Objectにname = 'SayHi' signature = '()V'の非静的メソッドはありません。
- Proguardはアクティブではありません。
Activity
ます。だから、どういうわけかそれをキャストする必要があります。