【问题标题】:Starting AppCompatActivity from Unity C# Script从 Unity C# 脚本启动 AppCompatActivity
【发布时间】:2020-08-01 23:30:08
【问题描述】:

我有一个 hello world 项目。我有一个名为 StartActivity 的类,它从 AppCompatActivity 扩展。我创建了一个 .aar 库并将其放在统一插件文件夹下。这个想法是从统一 android 应用程序启动活动,所以我从统一开始活动。当我尝试从统一开始我的活动时,它会抛出一个错误,指出找不到类 StartActivity。当我从 Activity 或 UnityPlayerActivity 类扩展同一个类时,它可以工作。但我需要 AppCompatActivity 类功能,所以不能移动到其他类。 这是我的清单文件

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.sitagy.helloworld">
 
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
 
        <activity android:name="com.example.sitagy.helloworld.StartUpActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name = "com.example.sitagy.helloworld.StartActivity"></activity>
        <activity android:name = "com.example.sitagy.helloworld.MainActivity"></activity>
        <activity android:name="com.unity3d.player.UnityPlayerNativeActivity"
          android:label="@string/app_name">
        <meta-data android:name="unityplayer.UnityActivity" android:value="true"/>
        <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true" />
        </activity>
 
    </application>
 
</manifest>

以下是我的java类

public class StartActivity extends AppCompatActivity {
 
    private String TAG = "Plug.StartActivity";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        System.out.println("SY : on create start neew activity");
 
    }
    public static void Call(Activity activity)
    {
        // Creating an intent with the current activity and the activity we wish to start
        Intent myIntent = new Intent(activity, StartActivity.class);
        activity.startActivity(myIntent);
    }
    public static void CallStatic()
    {
        System.out.println("CallStatic")
    }

以下是我的c#代码

   void Start()
    {
   
        var androidJC = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        var jo = androidJC.GetStatic<AndroidJavaObject>("currentActivity");
        var jc = new AndroidJavaClass("com.example.sitagy.helloworld.StartActivity");
        jc.CallStatic("Call", jo);
 
}

如果我将 StartActivity 扩展到常规活动,它就可以工作。不确定我是否做错了什么。我在插件文件夹下有 AppCompat 库 enter image description here

这是 adb log 的错误

--------- 崩溃开始 08-01 17:43:04.766 26868 26868 E AndroidRuntime: 致命异常: main 08-01 17:43:04.766 26868 26868 E AndroidRuntime:进程:com.captivereality.javaunityplugin,PID:26868 08-01 17:43:04.766 26868 26868 E AndroidRuntime: java.lang.NoClassDefFoundError: 解析失败: Lcom/example/sitagy/helloworld/StartActivity; 08-01 17:43:04.766 26868 26868 E AndroidRuntime: 在 com.example.sitagy.helloworld.StartUpActivity.onCreate(StartUpActivity.java:17) 08-01 17:43:04.766 26868 26868 E AndroidRuntime: 在 android.app.Activity.performCreate(Activity.java:7802) 08-01 17:43:04.766 26868 26868 E AndroidRuntime: 在 android.app.Activity.performCreate(Activity.java:7791) 08-01 17:43:04.766 26868 26868 E AndroidRuntime: 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1306) 08-01 17:43:04.766 26868 26868 E AndroidRuntime: 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245) 08-01 17:43:04.766 26868 26868 E AndroidRuntime: 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) 08-01 17:43:04.766 26868 26868 E AndroidRuntime: 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 08-01 17:43:04.766 26868 26868 E AndroidRuntime: 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 08-01 17:43:04.766 26868 26868 E AndroidRuntime: 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 08-01 17:43:04.766 26868 26868 E AndroidRuntime: 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) 08-01 17:43:04.766 26868 26868 E AndroidRuntime: 在 android.os.Handler.dispatchMessage(Handler.java:107) 08-01 17:43:04.766 26868 26868 E AndroidRuntime: 在 android.os.Looper.loop(Looper.java:214) 08-01 17:43:04.766 26868 26868 E AndroidRuntime: 在 android.app.ActivityThread.main(ActivityThread.java:7356) 08-01 17:43:04.766 26868 26868 E AndroidRuntime:在 java.lang.reflect.Method.invoke(本机方法) 08-01 17:43:04.766 26868 26868 E AndroidRuntime: 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 08-01 17:43:04.766 26868 26868 E AndroidRuntime: 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 08-01 17:43:04.766 26868 26868 E AndroidRuntime: 引起: java.lang.ClassNotFoundException: com.example.sitagy.helloworld.StartActivity 08-01 17:43:04.766 26868 26868 E AndroidRuntime: ... 16 更多 08-01 17:43:04.769 910 26893 I DropBoxManagerService:添加标签=data_app_crash isTagEnabled=true flags=0x2 08-01 17:43:04.770 910 2871 W ActivityTaskManager: 强制完成活动 com.captivereality.javaunityplugin/com.example.sitagy.helloworld.StartUpActivity

任何帮助都会很棒! 先谢谢大家了

【问题讨论】:

    标签: android android-studio unity3d


    【解决方案1】:

    我能够解决它。因此,我们需要将 Android Studio 中的 External Libraries 下提到的所有支持的库添加到 Unity Plugin/Android 文件夹中。

    【讨论】:

      猜你喜欢
      • 2023-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-17
      • 1970-01-01
      相关资源
      最近更新 更多