ฉันจะ "เขย่า" อุปกรณ์ Android ภายในตัวจำลอง Android เพื่อเปิดเมนู dev เพื่อดีบักแอป React Native ของฉันได้อย่างไร


201

ฉันกำลังทำงานกับแอพมือถือ React Native สำหรับข้ามแพลตฟอร์ม ฉันกำลังเขียนคำสั่ง console.log เมื่อฉันพัฒนา ฉันต้องการดูงบการบันทึกเหล่านี้ใน Chrome ในขณะที่ฉันใช้งานแอพ Android ใน Android emulator เริ่มต้น ตามเอกสารของ Facebookฉันแค่ต้อง "เขย่าอุปกรณ์" ฉันจะทำสิ่งนี้ในโปรแกรมจำลอง Android ได้อย่างไร

วิธีเข้าถึงเมนูผู้พัฒนาในแอป:

บน iOS เขย่าอุปกรณ์หรือกดควบคุม + ⌘ + z ในตัวจำลอง บน Android เขย่าอุปกรณ์หรือกดปุ่มเมนูฮาร์ดแวร์ (พร้อมใช้งานบนอุปกรณ์เก่า> และในตัวเลียนแบบส่วนใหญ่เช่นในจีโนมคุณสามารถกด⌘ + m เพื่อ> จำลองปุ่มเมนูฮาร์ดแวร์คลิก)

คำตอบ:


220

ภายในแอพของคุณใน Android Emulator กดCommand + Mบน OSX หรือCtrl + Mบน Linux และ Windows


2
Sadly F2 ไม่ทำงานบน Linux ใน Android Emulator 2 เบต้าอีกต่อไป เกิดอะไรขึ้น
Szczepan Hołyszewski

7
@ SzczepanHołyszewskiฉันต้องการเพิ่มสิ่งนั้นในปัจจุบันใน linux, ctrl + m จะแสดงเมนูของผู้พัฒนาขึ้นมา
Ozum Safa

<kbd> f1 </kbd>, ... <kbd> f12 </kbd> นั้นสร้างความสับสนและยากที่จะกดในคอมพิวเตอร์ส่วนใหญ่
ericn

223

ด้วย React Native ที่ทำงานในอีมูเลเตอร์,
กดctrl+ m(สำหรับ Linux ฉันคิดว่ามันเหมือนกันสำหรับ Windows และ+ mสำหรับ Mac OS X) หรือเรียกใช้สิ่งต่อไปนี้ในเทอร์มินัล:

adb shell input keyevent 82

2
ไม่ได้ทำงานให้ฉันทันที ฉันต้องเข้าไปที่ "settings" ("... ")> Settings> ส่ง Keyboard Shorcuts ไปที่> Emulator Controls (ไม่ใช่อุปกรณ์เสมือน) จากนั้นก็ใช้งานได้
Ryan Knell

ctrl + m ไม่ทำงานบน linux คำสั่ง adb เปลือกนี้ทำงานแม้ว่าฉันจะชอบทางลัด .... คิดว่าผมสามารถทำให้คนที่เปิดคำสั่งนี้ถ้าฉันไม่พบวิธีอื่นใด
องค์

adb -s <device id/serial> shell input keyevent 82เพื่อระบุอุปกรณ์ที่ต้องทำ ฉันใช้สิ่งนี้เมื่อใช้ทั้งเครื่องจำลองและอุปกรณ์ทางกายภาพ
grisaitis

79

หากคุณกำลังใช้อีมูเลเตอร์ใหม่ที่มาพร้อมกับ Android Studio 2.0 แป้นพิมพ์ลัดสำหรับปุ่มเมนูคือ Cmd + M เหมือนใน Genymotion

หรือคุณสามารถส่งกดปุ่มเมนูโดยใช้adbในเทอร์มินัล:

adb shell input keyevent KEYCODE_MENU

โปรดทราบว่าทางลัดของปุ่มเมนูไม่ได้เป็นข้อกำหนดที่เข้มงวด แต่เป็นเพียงพฤติกรรมเริ่มต้นที่จัดทำโดยReactActivityคลาส Java (ซึ่งจะใช้เป็นค่าเริ่มต้นหากคุณสร้างโครงการด้วยreact-native init) นี่คือรหัสที่เกี่ยวข้องจากonKeyUpในReactActivity.java:

if (keyCode == KeyEvent.KEYCODE_MENU) {
  mReactInstanceManager.showDevOptionsDialog();
  return true;
}

หากคุณเพิ่ม React Native ลงในแอปที่มีอยู่ ( เอกสารที่นี่ ) และคุณไม่ได้ใช้ReactActivityงานคุณจะต้องขอปุ่มเมนูขึ้นในทำนองเดียวกัน นอกจากนี้คุณยังสามารถโทรReactInstanceManager.showDevOptionsDialogผ่านกลไกอื่น ๆ ตัวอย่างเช่นในแอปที่ฉันใช้งานอยู่ฉันเพิ่มรายการเมนูแถบเครื่องมือแบบ dev-only ที่แสดงเมนูเนื่องจากฉันพบว่าสะดวกกว่าการเขย่าอุปกรณ์เมื่อทำงานกับอุปกรณ์ทางกายภาพ


นี่ไม่ทำงานกับ MIUI บน mi4i ของฉัน มันเพิ่งเปิดถาดแอป จะมีวิธีอื่นหรือไม่ ฉันไม่ต้องการเรียกใช้บนอีมูเลเตอร์เพราะนั่นทำให้อึของแล็ปท็อปของฉันช้าลง
Shreyans

ดูเหมือนว่ามีปัญหาอื่น ๆ ที่เฉพาะเจาะจงกับ miui หลังจากเปิดใช้งานการอนุญาตการแจ้งเตือนฉันสามารถเขย่าอุปกรณ์เพื่อรับเมนู ตรวจสอบกระทู้นี้ในกรณีที่คนอื่นกำลังมีปัญหากับ MIUI github.com/facebook/react-native/issues/2754
Shreyans

ฉันแก้ไขโพสต์ของฉันเพื่อเพิ่มรายละเอียดเพิ่มเติมเกี่ยวกับการทำงานของสิ่งนี้ทั้งหมดซึ่งอาจช่วยให้คุณติดตามปัญหาได้ การคาดเดาที่ดีที่สุดของฉันคือคุณไม่ได้ใช้ReactActivityและยังไม่ได้เชื่อมโยงปุ่มเมนูผ่านวิธีการอื่น
Alan Pierce

ขอบคุณสำหรับการตอบกลับที่รวดเร็ว :) แม้ว่าปัญหาจะเกิดขึ้นกับตัวจัดการการอนุญาต MIUI ซึ่งไม่อนุญาตให้แสดงเมนูโต้ตอบ
Shreyans

1
เคล็ดลับที่ดีเกี่ยวกับปฏิกิริยา ดูเหมือนว่าตอนนี้รหัสถูกย้ายไปที่ ReactActivityDelegate.java
Ryan H.

20

'Ctrl + m' ทำงานได้กับ Windowsในโปรแกรมจำลอง Android เพื่อแสดงเมนูนักพัฒนา React-Native

ไม่พบเอกสารที่ใดก็ได้ พบทางของฉันที่นี่เดาส่วนที่เหลือ ... ความเศร้าโศกที่ดี

โดยวิธีการ: OP: คุณไม่ได้พูดถึงระบบปฏิบัติการที่คุณใช้


14

สำหรับ Linux คุณคลิกที่จุดสามจุด "... " ข้างตัวจำลองบนเซนเซอร์เสมือนให้ตรวจสอบ "ย้าย" จากนั้นลองย้ายพิกัด x, y หรือ z อย่างรวดเร็ว

ป้อนคำอธิบายรูปภาพที่นี่


4
ที่จริงแล้วนั่นเป็นทางออกเดียวที่เหมาะกับฉัน
DsCpp

1
คุณยังสามารถคลิกที่กราฟิกของอุปกรณ์ในหน้าต่างที่แสดงและลากไปมา
brismith


8

ฉันอยู่บน Mac OS ดังนั้นเมื่อฉันกด Command มันเปิดใช้งานตัวเลือกการซูม นี่คือทางออกของฉัน

  • เปิดหน้าต่างการตั้งค่าคอนฟิก [... ]
  • ไปที่Settingsแท็บ -> Generalแท็บ -> Send keyboard shortcuts toฟิลด์
  • เปลี่ยนค่าVirtual device"เป็นตามที่แสดงในภาพ

หลังจากนั้นโฟกัสไปที่ตัวจำลองและกด Command + M เมนู dev จะปรากฏขึ้น

ตัวเลือก Emulator -> การตั้งค่า -> ทั่วไป


4

ใช้command + m(cmd + M)บน MAC และmake sure that you are accessing your application while you try to access the Debug Menuนั่นคือแอปของคุณจะต้องทำงานมิฉะนั้นCmd + Mจะส่งคืนเมนูโทรศัพท์ธรรมดาตามปกติ


4

ในขณะที่การพัฒนาตอบสนองแอพพื้นฐานเราเล่นกับเทอร์มินัลมากมาย

ดังนั้นฉันจึงเพิ่มสคริปต์ในสคริปต์ในไฟล์package.json

"menu": "keybent input adb เชลล์ของ 82"

และฉันกดปุ่มเมนูเส้นด้าย

เพื่อให้เมนูปรากฏบนอีมูเลเตอร์มันจะส่งต่อคีย์โค้ด 82 ไปยังอีมูเลเตอร์ผ่าน ADB ไม่ใช่วิธีที่ดีที่สุด แต่ฉันชอบและรู้สึกว่าจะแบ่งปันมัน

ป้อนคำอธิบายรูปภาพที่นี่


2

บน linux ctrl + m ควรใช้งานได้ แต่ไม่สามารถแก้ปัญหาได้ให้คลิกที่ (... ) (ส่วนขยายที่ขยาย) แล้วปิด window.now คุณสามารถเปิดเมนูด้วย ctrl + m แล้ว:

  1. คลิกที่ (... ) (ส่วนควบคุมเพิ่มเติม)

  2. ปิดการควบคุมแบบขยาย

  3. Ctrl + M


1

อาจไม่ใช่วิธีแก้ปัญหาโดยตรง แต่ฉันได้สร้าง lib ที่ให้คุณใช้ 3 นิ้วสัมผัสแทนการสั่นเพื่อเปิดเมนู dev เมื่ออยู่ในโหมดพัฒนา

https://github.com/pie6k/react-native-dev-menu-on-touch

คุณจะต้องห่อแอพของคุณภายใน:

นำเข้า DevMenuOnTouch จาก 'react-native-dev-menu-on-touch'; // หรือ: นำเข้า {DevMenuOnTouch} จาก 'react-native-dev-menu-on-touch'

class YourRootApp extends Component {
  render() {
    return (
      <DevMenuOnTouch>
        <YourApp />
      </DevMenuOnTouch>
    );
  }
}

มันมีประโยชน์จริง ๆ เมื่อคุณต้องตรวจแก้จุดบกพร่องบนอุปกรณ์จริงและคุณมีเพื่อนร่วมงานนั่งถัดจากคุณ


1

ฉันกำลังลองรุ่นวางจำหน่ายผ่านทางadb install -r -d <app-release>.apk🤦

ตรวจสอบให้แน่ใจว่าคุณใช้งานบิลด์ debugจากนั้นเมนูจะทำงานผ่านทางลัดหรือ CLI


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.