0 सवाल: Chromecast नेटिव एंड्रॉइड टू यूनिटी प्लगिन, संभावित आयात / निर्यात समस्याएं

पर बनाया गया सवाल Wed, May 8, 2019 12:00 AM

उद्देश्य और वर्तमान त्रुटि

मैं वर्तमान में एंड्रॉइड स्टूडियो से एकता के लिए एक देशी प्लगइन बनाने की कोशिश कर रहा हूं। यह प्लगइन्स उद्देश्य क्रोमकास्ट के लिए Google से कास्ट एसडीके का उपयोग करना है। मुझे एक CAF प्रेषक को लागू करने की आवश्यकता है लेकिन मैंने अभी तक ऐसा नहीं किया है:

के कारण
  

java.lang.NoClassDefFoundError

इस त्रुटि के कारण मैं अस्पष्ट हूं क्योंकि यह निम्नलिखित बाहरी पुस्तकालय से किसी भी तत्व के लिए है:

  

com /google /android /gms /cast /फ्रेमवर्क /"कुछ वर्ग या यहाँ खींचने योग्य"

इसके बाद कॉल स्टैक में यह कहना जारी रहता है कि DexPathList पर समान वर्ग नहीं पाया जा सकता है।

इस चरण को प्राप्त करने के लिए मैं निम्नलिखित कार्य करता हूं:

  • .AR
  • पाने के लिए Android स्टूडियो में मेरा मॉड्यूल बनाएं
  • मेरी एकता परियोजना में नया .AR आयात करें
  • Android डिवाइस पर बनाएँ और चलाएँ
  • एक बटन दबाएं जो एक फ़ंक्शन को कॉल करता है जो अनिवार्य रूप से कास्ट संदर्भ
  • के लिए पूछता है
    public void InitFromUnity(final Context ctx, String msg)
    {
        new Handler(Looper.getMainLooper()).post((new Runnable() {
            @Override
            public void run() {
                //Crash here
                castContext = CastContext.getSharedInstance(ctx);

                if(castContext == null)
                {
                    Log.v("ChromeCastApp", "CAST CONTEXT NULL");
                    Toast.makeText(ctx, "No cast context", Toast.LENGTH_SHORT).show();

                }else
                {
                    Log.v("ChromeCastApp", "CAST CONTEXT FOUND");
                    Toast.makeText(ctx, "Cast Context Found", Toast.LENGTH_SHORT).show();
                }
            }
        }));
    }

त्रुटि castContext = CastContext.getSharedInstance(ctx) लाइन से होती है जो मुझे विश्वास है और कोई लॉग या टोस्ट नहीं दिखता है।

मेरा प्रयास किया गया हैकी समाधान

मुझे जो पहली त्रुटि मिल रही थी, उसे इस प्रकार निर्दिष्ट किया गया था:

  

javaj.lang.NoClassDefFoundError: असफल संकल्प: Lcom /google /android /gms /cast /ढांचा /CastContext`

इसलिए इस बिंदु पर मैंने अपने बाहरी पुस्तकालयों को खोजा और देखा कि Google कास्ट पुस्तकालयों में से एक के अंदर classes.jar फ़ाइल थी। मैंने इसे libs फ़ोल्डर में स्थानांतरित किया और इसका नाम बदल दिया। मैंने Google के सभी संबंधित पुस्तकालयों के लिए ऐसा किया था।

इस बिंदु पर मेरी त्रुटि तब निम्न में बदल गई:

  

javaj.lang.NoClassDefFoundError: असफल संकल्प: Lcom /google /android /gms /cast /ढांचा /R $drawable`

अब मुझे पूरा यकीन है कि अंतर्निहित समस्या यह है कि निर्भरताएं एकता को सही ढंग से पार नहीं कर रही हैं। प्रारंभिक समाधान हैकरी लग रहा था लेकिन स्पष्ट रूप से यह है।

Gradle

    apply plugin: 'com.android.library'

    android {
        compileSdkVersion 28

        defaultConfig {
            minSdkVersion 16
            targetSdkVersion 28
            versionCode 1
            versionName "1.0"

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

        }

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

        dexOptions {
            javaMaxHeapSize "4g"
        }

    }

    dependencies {
        implementation fileTree(include: ['*.jar'], dir: 'libs')
        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'
        implementation 'com.google.android.gms:play-services-cast:16.2.0'
        // https://mvnrepository.com/artifact/com.google.android.gms/play-services-cast
        implementation 'com.google.android.gms:play-services-cast-framework:16.2.0'
        // https://mvnrepository.com/artifact/com.android.support/appcompat-v7
        implementation group: 'com.android.support', name: 'appcompat-v7', version: '28.0.0'
        // https://mvnrepository.com/artifact/com.android.support/support-media-compat
        implementation group: 'com.android.support', name: 'support-media-compat', version: '28.0.0'
        // https://mvnrepository.com/artifact/com.android.support/support-compat
        implementation group: 'com.android.support', name: 'support-compat', version: '28.0.0'
        // https://mvnrepository.com/artifact/com.android.support/palette-v7
        implementation group: 'com.android.support', name: 'palette-v7', version: '28.0.0'
        // https://mvnrepository.com/artifact/com.android.support/mediarouter-v7
        implementation group: 'com.android.support', name: 'mediarouter-v7', version: '28.0.0'
        // https://mvnrepository.com/artifact/com.android.support/recyclerview-v7
        implementation group: 'com.android.support', name: 'recyclerview-v7', version: '28.0.0'
        implementation 'com.android.support:support-v4:28.0.0'
    }

प्रकट

    <?xml version="1.0" encoding="utf-8" standalone="no"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="pp.zerolight.com.cc_plugin">

        <application
            android:allowBackup="true"
            android:supportsRtl="true">

            <meta-data
                android:name=
                    "com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
                android:value="pp.zerolight.com.cc_plugin.CastOptionsProvider" />
        </application>
    </manifest>

ढाल से आप उस रूट रूट को देख सकते हैं जहां यह मारा जाएगा और कलाकारों को लाएगा। .जर फ़ाइलें फिर भी मैं संसाधन समस्या के साथ समस्या को हिट करता हूं।

प्रकटन सरल है और मुझे लगता है कि मुझे काम करने के लिए कास्ट प्लगइन की आवश्यकता है।

इसके लिए मैंने अब तक जिन संसाधनों का उपयोग किया है, वे हैं:

  1. https://developers.google.com/android/guides/setup
  2. https://developers.google.com/cast/docs/android_sender/एक>
  3. https://developers.google.com/cast/docs/android_sender/integrate

एंड्रॉइड के लिए कुछ अन्य सेट अप गाइड के साथ-साथ यूनिटी प्लगइन्स।

एकता पक्ष

यहां पूरा करने के लिए एकता के अंत में कोड है जहां यह प्रसारण वर्ग के अंदर फ़ंक्शन को कॉल करता है:

    AndroidJavaClass unityPlayerClass;
    AndroidJavaObject unityActivity;
    AndroidJavaObject broadcasterObj;

    #region Native Setup

    override protected void Setup()
    {
        unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        unityActivity = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity");
        broadcasterObj = new AndroidJavaObject("pp.zerolight.com.cc_plugin.Broadcaster");
    }
    #endregion

    #region Features
    override public void SendMessage()
    {
        string msg = "Hello World";
        Debug.Log("Sending a message of " + msg);

        object[] parameters = new object[2];
        parameters[0] = unityActivity;
        parameters[1] = msg;

        broadcasterObj.Call("InitFromUnity", parameters);
    }
    #endregion

यह कोड तब कहा जाता है जब मैं एक बटन को एक परीक्षण के रूप में एकता में दबाता हूं।

सारांश

मुझे उम्मीद है कि मैं ब्रॉडकास्टर फ़ंक्शन में कास्टेन्क्स्ट प्राप्त कर सकता हूं, लेकिन इसके बजाय मुझे कक्षा लापता त्रुटियां मिलेंगी। //>

दुर्भाग्य से मैंने इसमें लगभग एक सप्ताह तक बिना किसी भाग्य के शोध किया है और मुझे आशा है कि कोई और मेरी मदद कर सकता है। यह सवाल कास्ट एपीआई का उपयोग करने के तरीके के बारे में कम है। यह सुनिश्चित करने के बारे में अधिक है कि सभी बाहरी पुस्तकालय एकता में मौजूद हैं और परियोजना के साथ पैक किए गए हैं।

इसे पढ़ने के लिए अपने समय और धैर्य के लिए धन्यवाद।

    
0
0 उत्तर                              0                         
स्रोत रखा गया यहाँ