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

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

उद्देश्य

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

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

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

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

वास्तुकला

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

चित्र 1. क्लाउड एवीडी आर्किटेक्चर

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

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

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

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

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

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

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

जीसीई में एक लिनक्स वीएम बनाएं

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. एक उचित डिस्क आकार सेट करें (100 जीबी या इससे बड़ा अनुशंसित है)।

चित्र 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. GCP प्रोजेक्ट चुनें.
  3. नेविगेशन मेनू > कंप्यूट इंजन > वीएम इंस्टेंस > फ़ायरवॉल नियम सेट करें पर जाएँ।

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

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

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

  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. इंस्टॉलेशन को सत्यापित करने के लिए, सार्वजनिक रिपॉजिटरी से होस्ट किए गए एंड्रॉइड एमुलेटर कंटेनर को चलाएं। आप यहां कंटेनरों के बारे में विवरण पा सकते हैं। अब आप इन कंटेनरों को बिना बनाये चला सकते हैं। उदाहरण के लिए:
    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 को स्थानीय होस्ट पर AVD कनेक्ट करने की तरह ही कॉन्फ़िगर करके डिवाइस से कनेक्ट करें। उदाहरण के लिए:
    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 क्लाउड VM इंस्टेंस पर काम करने के लिए, टीसीपी और यूडीपी पोर्ट 3478 और 3479 पर ट्रैफ़िक की अनुमति देने के लिए VM फ़ायरवॉल नियम को कॉन्फ़िगर करना सुनिश्चित करें।

  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. TURN कॉन्फ़िगरेशन को शामिल करने के लिए डॉकर कंपोज़ 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