명령 줄에서 Gradle을 통해 장치에 배포 할 수 있습니까?


89

질문이 실제로 말하는 것-명령 줄을 통해 직접 gradlew 명령을 실행하여 장치를 빌드, 패키징 및 배포 할 수 있습니까?


1
gradle tasks설치를 포함하는 기본 작업을 확인하는 데 도움이됩니다 (아래에 명시된대로 시작되지 않음)
Dori

명령 줄, 안드로이드 Studio 또는에서 일하는 것이이 방법 .IE 이클립스 기반 IDE 특정하지 IDE
폴 Verest

cmd의 gradlew installdebug- 루트 폴더는 경로 여야합니다
c49

답변:


97
$ gradle installDebug

그러면 디버그 빌드 APK가 기기에 푸시되지만 애플리케이션을 수동으로 시작해야합니다.


2
아래와 같이 이름이 "gradle installDefaultFlavorDebug"로 변경되었습니다.
durka42

2
당신이 맛을 사용하는 경우 @ durka42이 단지의 경우
Mathijs SEGERS

3
내가 대신 Gradle을 ID의 ./gradlew ID를 말하고 싶지만
irudyak

1
Eclipse에 설치된 Gradle 플러그인 내에서이 명령을 실행할 수 있습니까? 이 오류가 발생합니다. 루트 프로젝트 'blahblah'에서 'installDebug'작업을 찾을 수 없습니다.
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

최신 정보:

을 사용 하는 경우 appId에만applicationIdSuffix ".debug" 추가 하고 활동은 그대로 둡니다..debug

'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
별명은 "Gradle을 installDebug, ADB 쉘 오전 -n com.example.app/.activity.MainActivity 시작"=이 룬
도미닉 Bartl

gradle에서 installDebug를 선택할 수 없습니다. 적절한 작업이 없습니다. 이름이 바뀌 었습니까?
Jonas Gröger 2013

1
JonasGröger @ installDefaultFlavorDebug로 이름이 변경되었습니다 보인다
durka42

@rps_deepan 작업 이름이 변경 되었기 때문에 이름을 바꿀 수 있습니까?
Jonas Gröger

6
alias arun="./gradlew installDebug && adb shell am start -n com.example.package/.LauncherActivity"1 단계가 성공하면 #Runs 만 2 단계
Thamme Gowda

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는 시작할 활동 (실행기 활동)입니다.

다른 몇 가지 기능을 사용 하여이를 수행하기 위해 bash 스크립트를 작성했습니다 .


4

보다 유연한 방법은 monkey를 사용하는 것입니다.

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

이 방법의 장점 :

  • getAdbExeadb가 경로에 있어야 할 필요가 없으며 .NET에서 가리키는 sdk의 adb 버전을 사용합니다 local.properties.
  • monkey도구를 사용하면 런처 인 텐트를 보낼 수 있으므로 활동 이름을 알 필요가 없습니다.

대신 실행할 수 있습니다adb shell am start your.package.name.debugsuffix\.Activity
비 크람 Bodicherla에게

하지만 활동의 이름을 모르면 어떻게합니까?
0xcaff

1
그런 다음 빌드 파일을 작성하면 안됩니다.
kevr

3
빌드 파일이 실행할 활동을 명시 적으로 알고 있다는 것은 정말 나쁜 생각이라고 생각합니다 ... 우려 사항 분리가 반대하는 것처럼 보입니다. 한 가지 간단한 이유는 활동 파일의 이름을 바꾸거나 이동하는 경우 빌드 파일을 변경해야한다는 것입니다. 또한 인 텐트는 파일보다 실행하기에 더 좋은 API처럼 보입니다. 기본 인 텐트와이를 실행하는 방법을 추가하고 버전을 지정하고 다른 사람의 클래스 이름을 알 필요가없는 gradle 확장을 작성할 수 있습니다. 하드 코딩은 정답이 아닙니다.
smaudet

1
이 답변에는 루트 패키지를 찾는 방법도 없습니다. 패키지 이름도 제거하고 싶습니다. 예를 들어 대신 매니페스트에서 검색하십시오.
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

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

실행의 최상의 솔루션
Orgatres

1

이 작업을 작성하여 장치에 응용 프로그램을 설치하고 열 수도 있습니다. 나는 여러 가지고 있기 때문에 buildTypesflavors다른 응용 프로그램의 ID로를, 그것은 하드 코드 패키지 이름에 가능하지 않았다. 그래서 대신 이렇게 썼습니다.

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.