Bạn có thể triển khai tới một thiết bị thông qua Gradle từ dòng lệnh không


89

Câu hỏi thực sự nói lên điều gì - bạn có thể đưa ra bất kỳ lệnh nào trực tiếp để gradlew thông qua dòng lệnh để xây dựng, đóng gói và triển khai cho một thiết bị không?


1
gradle taskslà hữu ích để xem ra trong những nhiệm vụ hộp - trong đó bao gồm cài đặt (nhưng không bắt đầu như đã nêu dưới đây)
Dori

Dòng lệnh không phải là cụ IDE, .ie cách này sẽ làm việc từ Android Studio hoặc dựa trên Eclipse IDE
Paul Verest

gradlew installdebug trong cmd - thư mục gốc nên con đường
c49

Câu trả lời:


97
$ gradle installDebug

Thao tác này sẽ đẩy apk xây dựng gỡ lỗi đến thiết bị, nhưng bạn phải khởi động ứng dụng theo cách thủ công.


2
Như bên dưới, nó đã được đổi tên thành "gradle installDefaultFlavorDebug"
durka42

2
@ durka42 Đây chỉ là trường hợp nếu bạn sử dụng hương vị
Mathijs Segers

3
Tôi muốn nói iD ./gradlew thay vì iD gradle
irudyak

1
Có thể chạy lệnh này bên trong Trình cắm Gradle đã cài đặt trên Eclipse không? Tôi gặp lỗi này: Không tìm thấy tác vụ 'installDebug' trong dự án gốc 'blahblah'.
Dr.jacky

75

Vì bạn đang sử dụng Gradle, bạn có thể đơn giản thêm tác vụ của riêng mình trong 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'      
}

sau đó gọi nó trong gốc dự án của bạn

$ gradle appStart

Cập nhật:

Nếu bạn đang sử dụng applicationIdSuffix ".debug", hãy chỉ thêm .debugvào appId nhưng để nguyên hoạt động:

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


1
Ngoài ra, tham số cuối cùng phải là tham số 'com.your.packagename/.path.relative.to.your.packagename.MyActivity'thay vì 'com.example/.MyActivity'nếu Activity của bạn không nằm trong thư mục gốc của gói.
Sáng

66

1. Xây dựng dự án, cài đặt apk đã tạo vào thiết bị

# at the root dir of project
$ gradle installDebug

2. Mở ứng dụng trên thiết bị

$ adb shell am start -n yourpackagename/.activityname

6
alias arun = "gradle installDebug; adb shell am start -n com.example.app/.activity.MainActivity"
Dominic Bartl

Tôi không thể chọn installDebug trong gradle. Không có nhiệm vụ phù hợp. Nó đã được đổi tên?
Jonas Gröger

1
@ JonasGröger nó dường như đã được đổi tên thành installDefaultFlavorDebug
durka42

@rps_deepan Bạn có thể đổi tên tác vụ vì nó đã được đổi tên không?
Jonas Gröger,

6
alias arun="./gradlew installDebug && adb shell am start -n com.example.package/.LauncherActivity"#Runs STEP2 Chỉ khi Bước 1 là thành công
Thamme Gowda

7

Một câu dòng:

Xây dựng dự án & Cài đặt apk đã tạo & Mở ứng dụng trên thiết bị

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

7

Có ba lệnh để thực hiện điều này:

  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, trong đó $ PACKAGE là gói phát triển và $ ACTIVITY là hoạt động sẽ được khởi chạy (hoạt động của trình khởi chạy).

Tôi đã viết một kịch bản bash để làm điều này , với một số tính năng khác.


4

Một cách linh hoạt hơn để làm điều đó là sử dụng khỉ:

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

Một số ưu điểm của phương pháp này:

  • getAdbExe không yêu cầu adb ở trên đường dẫn và sử dụng phiên bản adb từ sdk được trỏ đến local.properties .
  • Công monkeycụ này cho phép bạn gửi ý định khởi chạy, vì vậy bạn không bắt buộc phải biết tên hoạt động của mình.

Thay vào đó có thể thực hiệnadb shell am start your.package.name.debugsuffix\.Activity
Vikram Bodicherla

Nhưng nếu bạn không biết tên hoạt động của mình thì sao?
0xcaff

1
Sau đó, bạn không nên viết tệp xây dựng.
kevr

3
Tôi nghĩ rằng đó là một ý tưởng thực sự tồi cho tệp xây dựng biết rõ ràng Hoạt động nào sẽ chạy ... có vẻ như có điều gì đó tách biệt các mối quan tâm đi ngược lại. Một lý do đơn giản - nếu bạn đổi tên / di chuyển tệp Hoạt động của mình, điều này hiện yêu cầu thay đổi tệp xây dựng. Ngoài ra, các ý định có vẻ giống như một api tốt hơn để chạy với một tệp - tôi có thể viết một phần mở rộng gradle bổ sung các ý định và cách mặc định để chạy chúng, phiên bản nó và không bao giờ cần biết tên lớp của bất kỳ ai. Mã hóa khó không bao giờ là câu trả lời đúng.
smaudet

1
Câu trả lời này cũng thiếu cách để tìm gói gốc - tôi cũng muốn loại bỏ tên gói - ví dụ: thay vào đó hãy khám phá nó từ tệp kê khai.
smaudet

3

Xây dựng -> gỡ cài đặt xác minh cũ -> cài đặt phiên bản mới -> chạy ứng dụng.

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]

Hoặc nếu bạn muốn cài đặt và chạy ứng dụng trong loại gỡ lỗi.

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

Cảm ơn. @ alexander-polomodov
Goffity

2
task appStart(type: Exec, dependsOn: 'installDebug') {
    commandLine android.adbExe, 'shell', 'am', 'start', '-n', 'com.example/.MyActivity'
}

Giải pháp chạy tốt nhất
Orgatres

1

Tôi đã viết tác vụ này để có thể cài đặt và cũng có thể mở ứng dụng trên thiết bị. Vì tôi có nhiều buildTypesflavorsvới các id ứng dụng khác nhau, nên việc mã hóa tên gói là không khả thi. Vì vậy, tôi đã viết nó như sau:

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(" ")
            }
        }
    }
}

Điều này sẽ cung cấp cho bạn open{variant}cho mọiinstall{variant} nhiệm vụ bạn đã có.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.