คุณสามารถปรับใช้กับอุปกรณ์ผ่าน Gradle จากบรรทัดคำสั่ง


89

สิ่งที่คำถามพูดจริงๆ - คุณสามารถออกคำสั่งโดยตรงกับ gradlew ผ่านทางบรรทัดคำสั่งเพื่อสร้างบรรจุภัณฑ์และปรับใช้กับอุปกรณ์ได้หรือไม่?


1
gradle tasksมีประโยชน์ในการดูงานนอกกรอบ - ซึ่งรวมถึงการติดตั้ง (แต่ไม่เริ่มตามที่ระบุไว้ด้านล่าง)
Dori

บรรทัดคำสั่งไม่ใช่ IDE เฉพาะวิธีนี้จะใช้ได้กับ Android Studio หรือ IDE ที่ใช้ Eclipse
Paul Verest

gradlew installdebugใน cmd - โฟลเดอร์รูทควรเป็นพา ธ
c49

คำตอบ:


98
$ gradle installDebug

การดำเนินการนี้จะส่ง debug build apk ไปยังอุปกรณ์ แต่คุณต้องเริ่มแอปพลิเคชันด้วยตนเอง


2
ด้านล่างนี้เปลี่ยนชื่อเป็น "gradle installDefaultFlavorDebug"
durka42

2
@ durka42 นี่เป็นกรณีที่คุณใช้รสชาติเท่านั้น
Mathijs Segers

3
ฉันจะพูดว่า ./gradlew iD แทน gradle iD
irudyak

1
เป็นไปได้หรือไม่ที่จะรันคำสั่งนี้ภายใน Gradle Plugin ที่ติดตั้งบน Eclipse ฉันได้รับข้อผิดพลาดนี้: ไม่พบงาน 'installDebug' ในรูทโปรเจ็กต์ 'blahblah'
Dr.jacky

76

เนื่องจากคุณใช้ Gradle คุณสามารถเพิ่มงานของคุณเองในbuild.gradle ได้ง่ายๆ

task appStart(type: Exec, dependsOn: 'installDebug') {
    // linux 
    commandLine 'adb', 'shell', 'am', 'start', '-n', 'com.example/.MyActivity'

    // windows
    // commandLine 'cmd', '/c', 'adb', 'shell', 'am', 'start', '-n', 'com.example/.MyActivity'      
}

จากนั้นเรียกมันในรูทโปรเจ็กต์ของคุณ

$ gradle appStart

อัปเดต:

หากคุณกำลังใช้applicationIdSuffix ".debug"ให้เพิ่มลง.debugในappId เท่านั้นแต่ปล่อยให้กิจกรรมนั้นไม่มีใครแตะต้อง:

'com.example.debug/com.example.MyActivity'


1
นอกจากนี้ควรใช้พารามิเตอร์สุดท้าย'com.your.packagename/.path.relative.to.your.packagename.MyActivity'แทน'com.example/.MyActivity'หากกิจกรรมของคุณไม่อยู่ในรูทของแพ็กเกจของคุณ
Light

66

1. สร้างโครงการติดตั้ง apk ที่สร้างขึ้นไปยังอุปกรณ์

# at the root dir of project
$ gradle installDebug

2. เปิดแอปบนอุปกรณ์

$ adb shell am start -n yourpackagename/.activityname

6
นามแฝง arun = "gradle installDebug; adb shell am start -n com.example.app/.activity.MainActivity"
Dominic

ฉันไม่สามารถเลือก installDebug ใน gradle ได้ ไม่มีงานที่เหมาะสม เปลี่ยนชื่อแล้วหรือยัง?
Jonas Gröger

1
@ JonasGrögerดูเหมือนว่าจะถูกเปลี่ยนชื่อเป็น installDefaultFlavorDebug
durka42

@rps_deepan คุณสามารถเปลี่ยนชื่องานได้ไหมเพราะถูกเปลี่ยนชื่อ
Jonas Gröger

6
alias arun="./gradlew installDebug && adb shell am start -n com.example.package/.LauncherActivity"# เรียกใช้ step2 เมื่อขั้นตอนที่ 1 สำเร็จเท่านั้น
ธัมมี่โกวด้า

7

ประโยคบรรทัดเดียว:

สร้างโครงการและติดตั้ง apk ที่สร้างขึ้นและเปิดแอปบนอุปกรณ์

$ ./gradlew installDebug && adb shell am start -n com.example/.activities.MainActivity

7

มีสามคำสั่งที่จะทำให้สำเร็จ:

  1. ./gradlew assembleDebug #To build the project

  2. adb install -r ./app/build/outputs/apk/app-debug.apk #To install it to the device

  3. adb shell am start -n $PACKAGE/$PACKAGE.$ACTIVITY #To launch the application in the deviceโดยที่ $ PACKAGE คือแพ็คเกจการพัฒนาและ $ ACTIVITY คือกิจกรรมที่จะเปิดตัว (กิจกรรมตัวเรียกใช้งาน)

ฉันเขียนสคริปต์ทุบตีเพื่อทำสิ่งนี้พร้อมคุณสมบัติอื่น ๆ อีกเล็กน้อย


4

วิธีที่ยืดหยุ่นกว่านี้คือการใช้ลิง:

task runDebug (type: Exec, dependsOn: 'installDebug') {
    commandLine android.getAdbExe().toString(), "shell",
        "monkey",
        "-p", "your.package.name.debugsuffix",
        "-c", "android.intent.category.LAUNCHER", "1"
}

ข้อดีบางประการของวิธีนี้:

  • getAdbExeไม่จำเป็นต้อง adb ที่จะอยู่บนเส้นทางและใช้รุ่น adb จาก SDK local.propertiesที่ชี้ไปใน
  • monkeyเครื่องมือที่ช่วยให้คุณส่งปล่อยเจตนาเพื่อให้คุณไม่จำเป็นต้องทราบชื่อกิจกรรมของคุณ

คุณสามารถดำเนินการแทนได้adb shell am start your.package.name.debugsuffix\.Activity
Vikram Bodicherla

แต่ถ้าคุณไม่รู้ชื่อกิจกรรมของคุณล่ะ?
0xcaff

1
จากนั้นคุณไม่ควรเขียนไฟล์บิลด์
kevr

3
ฉันคิดว่ามันเป็นความคิดที่แย่มากสำหรับไฟล์บิลด์ที่รู้อย่างชัดเจนว่ากิจกรรมใดที่จะทำงาน ... เหตุผลง่ายๆอย่างหนึ่ง - หากคุณเปลี่ยนชื่อ / ย้ายไฟล์กิจกรรมตอนนี้ต้องมีการเปลี่ยนแปลงไฟล์บิวด์ นอกจากนี้ Intent ดูเหมือน api ที่ดีกว่าที่จะรันกับไฟล์ - ฉันสามารถเขียนส่วนขยาย gradle ที่เพิ่ม Intent เริ่มต้นและวิธีการเรียกใช้เวอร์ชันและไม่จำเป็นต้องรู้ชื่อคลาสของใครเลย การเข้ารหัสอย่างหนักไม่ใช่คำตอบที่ถูกต้อง
smaudet

1
คำตอบนี้ยังไม่มีวิธีค้นหาแพ็กเกจรูท - ฉันต้องการกำจัดชื่อแพ็กเกจด้วยเช่นค้นพบจากไฟล์ Manifest แทน
smaudet

3

สร้าง -> ถอนการติดตั้งเวอร์ชันเก่า -> ติดตั้งเวอร์ชันใหม่ -> เรียกใช้แอปพลิเคชัน

echo "Build application" && ./gradlew clean build && 
echo "Uninstall application" && adb uninstall [application package] && 
echo "Install application" && adb -d install app/build/outputs/apk/<build type>/[apk name].apk echo "Run application" && 
adb shell am start -n [application package]/.[application name]

หรือหากคุณต้องการติดตั้งและเรียกใช้แอปพลิเคชันในประเภทดีบัก

./gradlew installDebug && adb shell am start -n [application package]/.[application name]

ขอบคุณ. @ alexander-polomodov
Goffity


1

ฉันเขียนงานนี้เพื่อให้สามารถติดตั้งและเปิดแอปพลิเคชันบนอุปกรณ์ได้ ตั้งแต่ฉันได้หลายbuildTypesและflavorsมีการประยุกต์ใช้รหัสที่แตกต่างกันมันก็ไม่ได้เป็นไปได้ยากรหัสชื่อแพคเกจ เลยเขียนแบบนี้แทน:

android.applicationVariants.all { variant ->
    task "open${variant.name.capitalize()}" {
        dependsOn "install${variant.name.capitalize()}"

        doLast {
            exec {
                commandLine "adb shell monkey -p ${variant.applicationId} -c android.intent.category.LAUNCHER 1".split(" ")
            }
        }
    }
}

สิ่งนี้จะให้คุณopen{variant}สำหรับทุกinstall{variant}งานที่คุณมีอยู่แล้ว

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