अपना खुद का क्लाउड एमुलेटर बनाएं

यह आलेख वर्णन करता है कि एएओएस एम्यूलेटर को वेब सेवा के रूप में कैसे चलाया जाए और इसे उपयोगकर्ताओं के लिए दूरस्थ रूप से सुलभ बनाने के लिए इसे वेब ब्राउज़र में कैसे चलाया जाए। ऐसा करने से Google क्लाउड कंप्यूट इंजन के माध्यम से शुरू से अंत तक, न्यूनतम व्यवहार्य संदर्भ मिलता है। उस ने कहा, आप इस सेवा का उपयोग अपनी पसंद के किसी भी सार्वजनिक या निजी क्लाउड प्लेटफॉर्म पर कर सकते हैं।

उद्देश्य

यह केंद्रीकृत कॉन्फ़िगरेशन और सेटअप AAOS एमुलेटर को पूरी कंपनी, सप्लायर और वर्क-फ्रॉम-होम डेवलपर्स के लिए सुलभ बनाता है। ऐसा करने से AAOS एमुलेटर को नए संस्करणों में प्रबंधित और अपग्रेड करना अधिक कुशल हो जाता है और व्यक्तिगत उपयोगकर्ताओं के लिए स्थानीय मशीनों को स्थापित करने और प्रबंधित करने के लिए आवश्यक समय समाप्त हो जाता है। यह समाधान हार्डवेयर संसाधनों के उपयोग को अनुकूलित करता है और कम लागत वाले ऐप विकास वातावरण को सक्षम बनाता है। उदाहरण के लिए, के प्रयोजनों के लिए:

  • उपयोगकर्ता अनुसंधान, उपयोगकर्ता अनुभव समीक्षा, ग्राहक सहायता और प्रशिक्षण।
  • संभावित ग्राहकों और बिक्री चैनलों में डेमो।
  • परीक्षण, सत्यापन, और यहां तक ​​कि डिबग ऐप्स (दैनिक OEM HMI बिल्ड सहित) बड़े पैमाने पर। एम्यूलेटर को ऐप विकसित करने के लिए उपयोग किए जाने वाले परीक्षण बेंच के विकल्प के रूप में देखें।
  • OEM ग्राहक कॉल सेंटर एजेंटों के पास एक समान, उपयोग में आसान HU UI है।

AAOS एमुलेटर का उपयोग करने के कई लाभ हैं:

  • एक अनुकूलित और क्लाउड-आधारित AAOS एमुलेटर (क्लाउड एमुलेटर) बनाने के लिए सेटअप स्क्रिप्ट का उपयोग करें।
  • VM इंस्टेंस के लिए एक अनुकूलित AAOS क्लाउड एमुलेटर इमेज बनाएं:
    • क्लाउड-आधारित एमुलेटर का तैयार सेट-अप।
    • एक कमांड के साथ AAOS AVD शुरू करने के लिए सर्विस क्रिएटर के लिए उपलब्ध सार्वजनिक AAOS AVD इमेज। उदाहरण के लिए, भागीदारों के अनुकूल और लागू करने के लिए नमूने के रूप में सार्वजनिक OEM AVD चित्र।

आर्किटेक्चर

क्लाउड एमुलेटर उदाहरण का आर्किटेक्चर नीचे दिखाया गया है। आपकी पहली न्यूनतम व्यवहार्य सेवा आपकी स्वयं की OEM AVD छवियों को जोड़कर काम करेगी।

चित्र 1. क्लाउड AVD आर्किटेक्चर

प्रमुख एमुलेटर बिल्डिंग ब्लॉक हैं:

वस्तु उद्देश्य
एंड्रॉइड एमुलेटर एम्यूलेटर इंस्टेंस एवीडी छवियों को होस्ट करता है
सुनहरीमछली-webrtc ब्रिज प्रतिक्रिया ऐप और एएओएस एमुलेटर के बीच संचार प्रदान करने के लिए लिनक्स एप्लिकेशन
android-एमुलेटर-webrtc वेब ब्राउज़र में एमुलेटर यूआई प्रदर्शित करने के लिए रिएक्ट एप्लिकेशन। रिएक्ट उपयोगकर्ता इनपुट घटनाओं को भी कैप्चर करता है और उन्हें सर्वर पर वापस भेजता है।
एंड्रॉइड एमुलेटर कंटेनर स्क्रिप्ट उपरोक्त सॉफ़्टवेयर मॉड्यूल के लिए डॉकर छवियों और कंटेनरों को प्रबंधित करने और बनाने के लिए पायथन स्क्रिप्ट।
JWT सेवा (JSON वेब टोकन सेवा) एमुलेटर की एक्सेस अनुमतियों को प्रबंधित करने के लिए टोकन जेनरेट करता है।
सर्वर चालू करें क्लाइंट और सर्वर के बीच एक WebRTC सीधा संबंध स्थापित करता है। टर्न सर्वर की आवश्यकता तभी होती है जब एम्यूलेटर सेवा फायरवॉल या प्रॉक्सी के पीछे चल रही हो।
दूत

करने के लिए एक प्रॉक्सी सेवा:

  • स्व-हस्ताक्षरित प्रमाणपत्र का उपयोग करके HTTPS प्रदान करें।
  • पोर्ट 80 (http) पर पोर्ट 443 (https) पर यातायात को पुनर्निर्देशित करें।
  • एमुलेटर के लिए जीआरपीसी प्रॉक्सी के रूप में कार्य करें।
  • एमुलेटर जीआरपीसी एंडपॉइंट तक पहुंच की अनुमति देने के लिए टोकन सत्यापित करें।
  • अन्य अनुरोधों को Nginx घटक पर पुनर्निर्देशित करें, जो एक प्रतिक्रिया एप्लिकेशन को होस्ट करता है।

क्लाउड VM पर एमुलेटर सेट करें

GCP प्रोजेक्ट बनाने के लिए:

  1. Google क्लाउड कंसोल पर जाएं और एक प्रोजेक्ट चुनें
  2. यह पुष्टि करने के लिए कि आपके Google क्लाउड प्रोजेक्ट के लिए बिलिंग सक्षम है , किसी प्रोजेक्ट के लिए बिलिंग सक्षम करें, अक्षम करें या बदलें देखें।
  3. एपीआई सक्षम करें

GCE में Linux VM बनाएं

1. नेस्टेड वर्चुअलाइजेशन सक्षम करें

डिफ़ॉल्ट रूप से, प्रोजेक्ट, फ़ोल्डर या संगठन स्तर पर नेस्टेड वर्चुअलाइजेशन की अनुमति है। जब तक आपके संगठन में किसी ने नेस्टेड वर्चुअलाइजेशन को अक्षम नहीं किया है, आपको इसे सक्षम करने के लिए कुछ भी करने की आवश्यकता नहीं है।

  1. नेस्टेड वर्चुअलाइजेशन की अनुमति है, इसकी पुष्टि करने के लिए gcloud कमांड-लाइन टूल का उपयोग करें:
    gcloud beta resource-manager org-policies describe   \
      constraints/compute.disableNestedVirtualization  --effective --project=[PROJECT_ID]
    

2. एक Ubuntu-1804-lts बूट करने योग्य डिस्क बनाएं

  1. क्लाउड कंसोल पर जाएं।
  2. GCP प्रोजेक्ट चुनें.
  3. नेविगेशन मेनू> कंप्यूट इंजन> डिस्क> डिस्क बनाएं पर जाएं।
    1. एक डिस्क नाम प्रदान करें। उदाहरण के लिए, ubuntu1804lts
    2. एक क्षेत्र और क्षेत्र का चयन करें। नेस्टेड वर्चुअलाइजेशन का समर्थन करने के लिए, सुनिश्चित करें कि आप जिस क्षेत्र और क्षेत्र का चयन करते हैं वह हैसवेल (या बाद के) प्रोसेसर का समर्थन करता है। अधिक जानने के लिए, क्षेत्र और क्षेत्र देखें।
    3. ubuntu-1804-bionic-v20210211 . की स्रोत छवि का चयन करें
    4. एक उपयुक्त डिस्क आकार सेट करें (100GB या इससे अधिक की अनुशंसा की जाती है)।

चित्र 1. उबंटू बूट करने योग्य डिस्क बनाएं

3. वीएमएक्स सक्षम करने के लिए विशेष लाइसेंस कुंजी के साथ एक कस्टम छवि बनाएं

  1. क्लाउड कंसोल पर जाएं।
  2. क्लाउड शेल खोलें और निम्न कमांड का उपयोग करें:
    gcloud compute images create [IMAGE NAME] --source-disk-zone [DISK ZONE] --source-disk [DISK NAME] \
      --licenses "https://www.googleapis.com/compute/v1/projects/vm-options/global/licenses/enable-vmx"
    
    • एक छवि नाम दर्ज करें। उदाहरण के लिए, aaos-emulator-image
    • डिस्क ज़ोन को उस ज़ोन पर सेट करें जिसमें आपने डिस्क बनाई है।
    • डिस्क नाम को उस नाम पर सेट करें जिसका उपयोग आपने डिस्क बनाने के लिए किया था।

    उदाहरण के लिए:

    gcloud compute images create aaos-emulator-image --source-disk-zone us-central1-a \
        --source-disk ubuntu1804lts \
        --licenses \
        "https://www.googleapis.com/compute/v1/projects/vm-options/global/licenses/enable-vmx"
    

विवरण के लिए, नेस्टेड वर्चुअलाइजेशन वीएम इंस्टेंस देखें।

4. अनुकूलित छवि का उपयोग करके VM इंस्टेंस बनाएं

  1. क्लाउड कंसोल पर जाएं।
  2. GCP प्रोजेक्ट चुनें.
  3. नेविगेशन मेनू> कंप्यूट इंजन> वीएम इंस्टेंस पर जाएं।

    चित्र 1. एक VM उदाहरण बनाएँ

  4. एक उदाहरण नाम दर्ज करें। उदाहरण के लिए, aaosemulator
  5. वांछित मशीन परिवार का चयन करें और टाइप करें। सुनिश्चित करें कि मशीन में चार वीसीपीयू और 16 जीबी मेमोरी (या अधिक) है।
  6. इंटेल कैस्केड लेक (या बाद में) होने के लिए सीपीयू प्लेटफॉर्म का चयन करें।
  7. बूट डिस्क को पिछले चरण में बनाई गई छवि में बदलें।
  8. इसके लिए फ़ायरवॉल सक्षम करें:
    • HTTP ट्रैफ़िक की अनुमति दें
    • HTTPS ट्रैफ़िक की अनुमति दें

5. पोर्ट 80 और 443 . खोलने के लिए फ़ायरवॉल कॉन्फ़िगर करें

  1. क्लाउड कंसोल पर जाएं।
  2. जीसीपी परियोजना का चयन करें।
  3. नेविगेशन मेनू> कंप्यूट इंजन> वीएम इंस्टेंस> फायरवॉल नियम सेट करें पर जाएं।

VM पर आवश्यक सॉफ़्टवेयर स्थापित करें

  1. Python3 और Python3-env स्थापित करें:
    sudo apt update
    sudo apt install python3
    sudo apt-get install python3-venv
    
  2. पथ पर उपलब्ध Android SDK और ADB स्थापित करें।
    sudo apt install android-sdk
    

    Docker और Docker-compose को स्थापित करने के लिए, Docker और Docker-compose देखें। सुनिश्चित करें कि आप इन्हें गैर-रूट उपयोगकर्ता के रूप में चला सकते हैं।

  3. यह पुष्टि करने के लिए कि सीपीयू हार्डवेयर वर्चुअलाइजेशन का समर्थन करता है (कमांड का परिणाम गैर-शून्य संख्या में होना चाहिए):
    egrep -c '(vmx|svm)' /proc/cpuinfo
    
  4. कर्नेल वर्चुअल मशीन (KVM) स्थापित करें। KVM स्थापित करने के लिए, चलाएँ:
    sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
    
  5. यह सत्यापित करने के लिए कि KVM काम कर रहा है:
    sudo apt install cpu-checker
    kvm-ok
    
    आउटपुट होना चाहिए:
    INFO: /dev/kvm exists
    KVM acceleration can be used
    
  6. Node.js और नोड पैकेट मैनेजर (NPM) स्थापित करने के लिए:
    sudo apt install nodejs npm
    

होस्ट किए गए कंटेनर शुरू करें

  1. स्थापना को सत्यापित करने के लिए, सार्वजनिक भंडार से होस्टेड Android एमुलेटर कंटेनर चलाएं। आप यहां कंटेनरों के बारे में विवरण पा सकते हैं। अब आप इन कंटेनरों को बिना बनाए चला सकते हैं। उदाहरण के लिए:
    docker run \
      -e ADBKEY="$(cat ~/.android/adbkey)" \
      --device /dev/kvm \
      --publish 8554:8554/tcp \
      --publish 5555:5555/tcp  \
      us-docker.pkg.dev/android-emulator-268719/images/30-google-x64:30.1.2
    

    यह कंटेनर को नीचे खींचता है (यदि यह स्थानीय रूप से उपलब्ध नहीं है) और इसे लॉन्च करता है।

  2. जब कंटेनर लॉन्च किया जाता है, तो एडीबी को उसी तरह कॉन्फ़िगर करके डिवाइस से कनेक्ट करें जैसे स्थानीय होस्ट पर एवीडी कनेक्ट करना। उदाहरण के लिए:
    adb connect localhost:5555
    adb devices
    
    आउटपुट होना चाहिए:
    List of devices attached
    localhost:5555 device
    

AAOS एमुलेटर सेवा सेट करें

एमुलेटर सेवा स्थापित करने के लिए:

  1. एंड्रॉइड एमुलेटर डॉकर कंटेनर स्क्रिप्ट स्थापित करें:
    git clone https://github.com/google/android-emulator-container-scripts.git
    
    cd android-emulator-container-script
    source ./configure.sh
    
  2. यह एक आभासी वातावरण को सक्रिय करता है और निष्पादन योग्य इमू-डॉकर उपलब्ध कराता है। इसके उपयोग के बारे में विस्तृत जानकारी प्राप्त करने के लिए इसे लॉन्च करें:
    emu-docker -h
    
  3. डॉकर कंटेनर बनाने के लिए, लाइसेंस समझौतों को स्वीकार करें।
  4. AAOS एमुलेटर डॉकर कंटेनर बनाएँ।
  5. संस्करण 7154743 की तुलना में बाद में एक एमुलेटर बिल्ड डाउनलोड करें। उदाहरण के लिए:
    sdk-repo-linux-emulator-7154743.zip
    
  6. AAOS एमुलेटर सिस्टम इमेज डाउनलोड करें। उदाहरण के लिए, sdk-repo-linux-system-images-7115454.zip :
    emu-docker create <emulator-zip> <system-image-zip>
    
  7. वेब कंटेनर बनाएं और रिमोट एक्सेस के लिए यूजरनेम और पासवर्ड सेट करें।
    ./create_web_container.sh -p user1,passwd1
    
  8. AAOS एम्यूलेटर वेब सेवा प्रारंभ करें:
    docker-compose -f js/docker/docker-compose-build.yaml -f js/docker/development.yaml up
    

आपने सफलतापूर्वक AAOS एमुलेटर वेब सेवा शुरू कर दी है! वेब ब्राउज़र पर इसे एक्सेस करने के लिए निम्नलिखित का उपयोग करें:

https://<VM_External__IP>

समस्या निवारण

यदि VM बाहरी IP में कोई कनेक्शन त्रुटि होती है, तो सुनिश्चित करें कि VM HTTP और HTTPS दोनों ट्रैफ़िक की अनुमति देने के लिए सेट है। इसे सत्यापित करने के लिए, एक बुनियादी अपाचे वेब सर्वर चलाना देखें।

टर्न सर्वर सेट करें

आप हमेशा अपने स्वयं के टर्न सर्वर का उपयोग कर सकते हैं। Google क्लाउड VM इंस्टेंस पर एक नमूना नीचे दिया गया है।

नोट: टर्न सर्वर को Google क्लाउड वीएम इंस्टेंस पर काम करने के लिए, टीसीपी और यूडीपी पोर्ट 3478 और 3479 पर ट्रैफिक की अनुमति देने के लिए वीएम फ़ायरवॉल नियम को कॉन्फ़िगर करना सुनिश्चित करें।

  1. कॉटर्न सर्वर स्थापित करें:
    sudo apt install coturn
    systemctl stop coturn
    echo "TURNSERVER_ENABLED=1"|sudo tee -a /etc/default/coturn
    
  2. निम्नलिखित पंक्तियों को जोड़कर /etc/turnserver.conf संशोधित करें:
    lt-cred-mech
    #set your realm name
    realm=test
    #coturn username and password
    user=test:test123
    # external-ip=<VM-Public-IP>/<VM-Private-IP>
    external-ip=34.193.52.134/10.128.0.2
    
    systemctl start coturn
    
  3. टर्न कॉन्फ़िगरेशन को शामिल करने के लिए डॉकर कंपोज़ YAML फ़ाइल को संशोधित करें:
    cd android-emulator-container-script
    nano  js/docker/docker-compose-build.yaml
    
  4. एमुलेटर सेक्शन में निम्नलिखित दो पर्यावरण लाइनें जोड़ें:
         shm_size: 128M
         expose:
           - "8554"
    +    environment:
    +       - TURN=printf $SNIPPET
    
  5. टर्न कॉन्फ़िगरेशन के साथ AAOS एमुलेटर सेवा को पुनरारंभ करें। नीचे दिए गए टर्न सर्वर आईपी, उपयोगकर्ता नाम और क्रेडेंशियल को अपने स्वयं के साथ बदलना सुनिश्चित करें:
    export SNIPPET="{\"iceServers\":[{\"urls\":\"turn:35.193.52.134:3478\",\"username\":\"test\",\"credential\":\"test123\"}]}"
    docker-compose -f js/docker/docker-compose-build.yaml up