2016-12-21 5 views
0

Я пытаюсь интегрировать SDK Layar в Unity. Но у меня есть проблема.Unity C# и Layar SDK Java - AndroidJavaException

Вот AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.layar.player" 
android:versionCode="1" 
android:versionName="8.5.2" > 

<uses-sdk 
    android:minSdkVersion="15" 
    android:targetSdkVersion="23" /> 

<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

<uses-feature android:name="android.hardware.camera" /> 

<application> 
    <activity 
     android:name="com.layar.sdk.LayarSDKActivity" 
     android:launchMode="singleTask" 
     android:screenOrientation="nosensor" 
     android:theme="@android:style/Theme.Light.NoTitleBar" /> 
    <activity 
     android:name="com.layar.player.geo.FilterSettingsActivity" 
     android:configChanges="keyboard|keyboardHidden|orientation|screenSize" 
     android:theme="@style/FilterTheme" /> 
    <activity 
     android:name="com.layar.LayerDetailsActivity" 
     android:configChanges="keyboard|keyboardHidden|orientation|screenSize" 
     android:theme="@style/LayarTitleTheme" /> 
    <activity 
     android:name="com.layar.WebActivity" 
     android:configChanges="keyboard|keyboardHidden|orientation|screenSize" 
     android:theme="@style/LayarTitleTheme" /> 
    <activity 
     android:name="com.layar.ShareSocialActivity" 
     android:configChanges="keyboard|keyboardHidden|orientation|screenSize" 
     android:theme="@style/Layar.Theme.Default" /> 
    <activity 
     android:name="com.layar.VideoActivity" 
     android:configChanges="keyboard|keyboardHidden|orientation|screenSize" 
     android:theme="@style/FullScreenTheme" /> 
    <activity 
     android:name="com.layar.AudioActivity" 
     android:configChanges="keyboard|keyboardHidden|orientation|screenSize" 
     android:theme="@style/SmartDialogTheme" /> 
    <activity 
     android:name="com.layar.ScreenshotActivity" 
     android:configChanges="keyboard|keyboardHidden|orientation|screenSize" 
     android:screenOrientation="nosensor" 
     android:theme="@android:style/Theme.Light.NoTitleBar" /> 
    <activity 
     android:name="com.layar.ShareOnFacebookActivity" 
     android:theme="@android:style/Theme.Light.NoTitleBar" 
     android:windowSoftInputMode="stateAlwaysVisible|adjustResize" /> 

    <receiver 
     android:name="com.layar.localytics.CloseSesionBroadcastReciever" 
     android:exported="false" > 
     <intent-filter> 
      <action android:name="com.layar.close_session" /> 
     </intent-filter> 
    </receiver> 
</application> 

и это мой C#

using UnityEngine; 

public class IntegrationLayar : MonoBehaviour { 

private AndroidJavaObject LayarSDK = null; 
private AndroidJavaObject activity = null; 
private AndroidJavaObject context = null; 

private string oauthKey = "code"; 
private string oauthSecret = "code2"; 


void Start() 
{ 
     if (LayarSDK == null) 
     { 
      using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) 
      { 
       activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); 
       context = activity.Call<AndroidJavaObject>("getApplicationContext"); 

       //activity.Call("runOnUiThread", new AndroidJavaRunnable(runOnUiThread)); 
       Debug.Log("unity3D JAVA - Working"); 
      } 

      using (AndroidJavaClass pluginClass = new AndroidJavaClass("com.layar.player")) 
      { 
       if (pluginClass != null) 
       { 
        Debug.Log("Layar Java - Working"); 
        pluginClass.CallStatic("initialize", context, oauthKey, oauthSecret); 
        pluginClass.CallStatic("startLayarActivity", context); 
       } 
      } 
    } 
} 
} 

Ошибка:

AndroidJavaException: java.lang.ClassNotFoundException: com.layar.player

Как я понимаю, он не нашел класс, названный так на Java. Итак, проблема в том, что? Я называю неправильную деятельность?

Вот ссылка на Layar API link

Как я вижу в API Layar класс "LayarVisionSDK".

AndroidJavaClass pluginClass = new AndroidJavaClass("com.layar.player.LayarVisionSDK") 

Возможно, это должно сработать?

Я, конечно, делать это неправильно, но если какой-либо из вас есть направление, чтобы следовать, я буду рад узнать :)

UPDATE 1:

Это из APK

Class LayarVisionSDK 

java.lang.Object 
com.layar.sdk.LayarVisionSDK 

Таким образом, вместо того, чтобы использовать

AndroidJavaClass pluginClass = new AndroidJavaClass("com.layar.player.LayarVisionSDK") 

Я использую

AndroidJavaObject LayarVisionSDK = new AndroidJavaObject("com.layar.sdk.LayarVisionSDK"); 

Но все еще не удается. Я спрашиваю себя, может ли проблема быть не там, где она кажется.

UPDATE 2:

OK! Я нашел, почему я получил эту ошибку, API-документ не был обновлен, поэтому я проверил в пакете java и нашел, где был метод «initialize».

Итак, вот новый код C#.

using (AndroidJavaClass pluginClass = new AndroidJavaClass("com.layar.sdk.LayarSDK")) 
       { 
        if (pluginClass != null) 
        { 
         Debug.Log("SDK LAYAR FOUND !!! "); 
         pluginClass.CallStatic("initialize", context, oauthKey, oauthSecret); 
         Debug.Log("INITIALIZED"); 
         //pluginClass.Call("startLayarActivity", context); 
        } 
       } 

Но я получил новую ошибку:

AndroidJavaException: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/content/ContextCompat; 

Am Я отсутствующий в андроиде библиотеку?

ответ

1

Убедитесь, что у вас есть android-support-v4.jar под Плагины/Android/libs.

Вы можете скачать файл с here.

+0

Вот что я сделал в эту ночь, но теперь я получил новую ошибку - AndroidJavaException: java.lang.NoClassDefFoundError: Failed разрешение: LKotlin.Pair – Kyan

0

Хорошо, я заработал!

Я просто добавлю поддержку android support lib и kotlin lib.

Спасибо за вашу помощь :)