วิธีการเรียกใช้แอปที่เฉพาะเจาะจงผ่านเทอร์มินัล


13

ฉันจำเป็นต้องเรียกใช้แอพ android ของฉันจากคอมพิวเตอร์ระยะไกลผ่าน SSH แต่ฉันไม่ใช่ผู้เชี่ยวชาญบรรทัดคำสั่งดังนั้นฉันต้องการทราบ: วิธีเรียกใช้แอคชั่นเฉพาะของแอป (ไม่เพียงแค่เปิดมัน) ซึ่งบอกเป็นนัย: จะรู้ได้อย่างไรว่าซินแทกซ์ที่แท้จริงของการกระทำที่เป็นไปได้ของแอพ

เช่น: ฉันต้องการเริ่มแอปบันทึกเสียงบนโทรศัพท์จากคอมพิวเตอร์ของฉันและเริ่มบันทึกจากระยะไกล เป็นไปได้ไหม?

ขอบคุณ Andrea

คำตอบ:


12

ใช้สิ่งนี้:

am start -a android.intent.action.MAIN -n <package_name>/<full_class_name>

ในการควบคุมแอพคุณจะต้องใส่ค่าที่ถูกต้องของ<package_name>และ<full_class_name>ในคำสั่ง ตัวอย่างเช่นคุณสามารถใช้com.google.gmail/com.google.gmail.check_mail(ชื่อสมมุติ) เป็นส่วนสุดท้ายของคำสั่ง

การได้รับชื่อแพคเกจของแอปนั้นง่ายแต่การได้รับชื่อของแอคชันไม่ มีสองปัญหาคือ

  1. นักพัฒนาแอพจำนวนมากเก็บข้อมูลคลาสไว้เป็นส่วนตัว

  2. นักพัฒนาบางคนไม่ทำการเขียนโปรแกรมแบบแยกส่วนอัจฉริยะ มันเป็นนิสัยที่ดีในการแบ่งแอพในหลาย ๆ คลาสซึ่งอาจถูกกระตุ้นโดยเจตนา แต่ไม่ใช่นักพัฒนาทั้งหมดที่ฉลาด

การแก้ปัญหาที่ 1: ถอดรหัสแอปโดยใช้apktoolและดูข้อมูลทั้งหมด นอกจากนี้ยังมีวิธีอื่นด้วย แต่วิธีนี้เป็นวิธีที่ใช้งานได้ตลอดเวลา (ยกเว้นว่าแอพใช้ NDK แทน SDK)

ทางออกของปัญหาที่สอง: ไม่มีอะไร

ไม่ต้องกังวลแอพยอดนิยมส่วนใหญ่ปฏิบัติตามแนวทางการเขียนโปรแกรมที่ดีที่สุดและมีแอพPublic APIที่คุณสามารถรับข้อมูลชั้นเรียนได้


คุณสามารถเพิ่มคำอธิบายเกี่ยวกับพารามิเตอร์<package_name>และ<full_class_name>และวิธีรับได้อย่างไร สำหรับฉันอย่างน้อยหลังไม่ชัดเจน
Izzy

@Izzy เพิ่มคำอธิบายแล้ว ... ทบทวนคำตอบอีกครั้ง
Android Quesito

ขอบคุณ! +1 จากฉัน: D กะทัดรัดและเข้าใจง่าย ฉันจะมีอิสระในการเพิ่มลิงค์ถ้าคุณไม่สนใจสำหรับapktools(ไม่ใช่นักพัฒนามิฉะนั้นอาจคิดว่ามันเป็นส่วนหนึ่งของ SDK และหลงทาง)
Izzy

@Izzy นี่คือปัญหาของฉัน: ฉันไม่สามารถที่จะเปิดตัวกิจกรรมการตั้งค่าของ app com.android.settings/.Settings$StorageSettingsActivityนี้: ลองด้วยตัวคุณเอง ที่จริงแล้วสตริงนั้นหลังจาก$เซ็นชื่อคืออะไร? มันเหมือนเป็นคลาสย่อยในกิจกรรมการตั้งค่าหรือไม่
Gokul NC

@GokulNC คุณอาจต้องอ้างถึงทุกสิ่ง (อัญประกาศเดี่ยว) หรือ$StorageSettingsActivityอาจถูกมองว่าเป็นตัวแปรและ "ขยาย" เป็นสตริงว่าง (เว้นแต่จะมีตัวแปรที่กำหนดโดยชื่อนั้น)
Izzy

9

เช่นเดียวกับ Sachin Shekhar กล่าวว่าคุณต้องใช้คำสั่งต่อไปนี้:

am start -a android.intent.action.MAIN -n <package_name>/<full_class_name>

ดูตัวอย่างที่เป็นรูปธรรม:

  • รับไฟล์ apk จากอุปกรณ์ Android ของคุณหรือที่ใด ๆ ในตลาด
  • ใช้คำสั่งนี้:

aapt dump xmltree com.android.settings*.apk AndroidManifest.xml

ฉันต้องการเริ่มเมนู "การปล่อยสัญญาณ" ดังนั้นฉันจึงค้นหากิจกรรมในผลลัพธ์:

(...)
   E: activity (line=190)
    A: android:name(0x01010003)=".TetherSettings" (Raw: ".TetherSettings")
(...)

ดังนั้นคำสั่งสุดท้ายคือ:

am start -a android.intent.action.MAIN -n com.android.settings/.TetherSettings

aaptคำสั่งเป็นส่วนหนึ่งของAndroid SDK


1
: D ทดสอบใช้งานได้ดี นี่เป็นตัวอย่างการทำงาน©®™ในชีวิตจริง
Gilles Quenot

2
โชคและวิทยาศาสตร์คอมพิวเตอร์ค่อนข้างตรงกันข้าม มันเป็นเส้นทางญาติ
Gilles Quenot

2
ไม่คุณสามารถใช้com.android.settingsเส้นทางได้นั่นคือเหตุผลที่ฉันบอกว่ามันเป็นญาติ ทดสอบในแอพที่คุณต้องการ
Gilles Quenot

2
ฉันไม่ได้บอกว่ามันจะไม่ทำงานกับแอพอื่น ๆ จุดก่อนที่ชื่อคลาสจะใช้เวทย์มนตร์ แต่สิ่งนี้ไม่ควรได้รับการสนับสนุน
Android Quesito

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