UnitySendMessage краш-игра - PullRequest
       3

UnitySendMessage краш-игра

0 голосов
/ 04 марта 2019

У меня такой вопрос, я делаю плагин для Unity Android.Единство 5.6.5.Я собираю в Android Studio 3.3.Я собираю плагин через сборку выпуска.настройки Gradle:

apply plugin: 'com.android.library'

android 
{
    compileSdkVersion 28
    defaultConfig 
    {

        minSdkVersion 21
        targetSdkVersion 28

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    buildTypes 
    {
        release 
        {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies 
{
    implementation fileTree(dir: 'libs', include: ['*.jar'], exclude: ['classes.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    compileOnly files('libs/classes.jar')
}

Код класса:

package andlancer.unity.custom.web;


import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;

import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;


public class TrueWeb extends UnityPlayerActivity 
{
    public static String EXTRA_URL = "extra.url";

    static CustomTabsClient mClient;
    static String packageName = "com.android.chrome";

    private boolean mCustomTabsOpened = false;

    private static final int CHROME_CUSTOM_TAB_REQUEST_CODE = 100;

    public static Context mContext;



    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        mContext=this;

        Log.e("Unity", "OnCreate...........");
    }

    public static void startFunc(UnityPlayerActivity activity)
    {
        Log.e("test","-----------------test");
        UnityPlayer.UnitySendMessage("Core", "CloseWeb", null);
    }
}

Плагин манифеста (в AAR):

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="andlancer.unity.custom.web">

    <application
        android:allowBackup="true"

        android:label="@string/app_name">
        <activity
            android:name=".TrueWeb"
            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>

Код Unity:

AndroidJavaClass plugin;
plugin = new AndroidJavaClass("andlancer.unity.custom.web.TrueWeb");

using (var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
    using (var activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"))
        plugin.CallStatic("startFunc", activity);

Журнал:

Log.e("Unity", "OnCreate..........."); // not shown
Log.e("test","-----------------test"); // shown

и при вызове UnityPlayer.UnitySendMessage происходит сбой приложения без ошибок на устройстве, в журналах пишет:

03-04 19:24:23.183 201-201/? A/DEBUG: backtrace:
03-04 19:24:23.183 201-201/? A/DEBUG:     #00 pc 000188ac  
/system/lib/libc.so (strlen+71)
03-04 19:24:23.183 201-201/? A/DEBUG:     #01 pc 0059d270  
/data/app/bla.bla.huyar-2/lib/arm/libunity.so (UnitySendMessage+24)
03-04 19:24:23.183 201-201/? A/DEBUG:     #02 pc 005f3a2c  
/data/app/bla.bla.huyar-2/lib/arm/libunity.so
03-04 19:24:23.183 201-201/? A/DEBUG:     #03 pc 00b34b45  
/data/app/bla.bla.huyar-2/oat/arm/base.odex (offset 0x6ce000)

Ответы [ 3 ]

0 голосов
/ 04 марта 2019

попробуйте заменить последний параметр с 'null' на "".

UnityPlayer.UnitySendMessage("Core", "CloseWeb", "");

0 голосов
/ 04 марта 2019

Пожалуйста, отправьте пустую строку в качестве аргумента, ожидаемая строка null может быть причиной сбоя

0 голосов
/ 04 марта 2019

Если у вас есть другой aar с классом, который содержит «extends UnityPlayerActivity», только первый загруженный примет этот контекст.Для решения знакомой проблемы я передаю контекст из Unity в aar (в качестве функции Init).Создайте функцию внутри класса «TrueWeb», которая будет возвращать вам mContext.Затем используйте этот контекст для каждого места, где вам нужен контекст внутри Android aar

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...