क्या आप कमांड लाइन से ग्रैडल के माध्यम से एक उपकरण पर तैनात कर सकते हैं


89

प्रश्न वास्तव में क्या कहता है - क्या आप डिवाइस पर निर्माण, पैकेज और तैनाती के लिए कमांड लाइन के माध्यम से सीधे वर्गीकृत करने के लिए कोई आदेश जारी कर सकते हैं?


1
gradle tasksबॉक्स कार्यों से बाहर देखने में मददगार है - जिसमें इंस्टाल करना शामिल है (लेकिन जैसा कि नीचे बताया नहीं गया है)
डोरी

कमांड लाइन आईडीई विशिष्ट नहीं है, यह इस तरह से एंड्रॉइड स्टूडियो या ग्रहण-आधारित आईडीई से काम करेगा
पॉल वेरेस्ट

gradlew installdebug में cmd - रूट फ़ोल्डर पथ होना चाहिए
c49

जवाबों:


97
$ gradle installDebug

यह डिबग बिल्ड एपीके को डिवाइस पर धकेल देगा, लेकिन आपको एप्लिकेशन को मैन्युअल रूप से शुरू करना होगा।


2
नीचे के रूप में, इसका नाम बदलकर "gradle installDefaultFlavorDebug" रखा गया है
durka42

2
@ durka42 यह केवल मामला है अगर आप जायके का उपयोग
Mathijs Segers

3
मैं कहूंगा / .ग्रेडले के बजाय आईडीडीडब्ल्यू आईडी
इरुदिअक

1
क्या ग्रहण पर स्थापित कमांड प्लग इन के अंदर चलाना संभव है? मुझे यह त्रुटि मिलती है: रूट प्रोजेक्ट 'ब्लाब्लह' में टास्क 'इंस्टॉलडबग' नहीं मिला।
डॉ। जेकैई

75

चूंकि आप ग्रैडल का उपयोग कर रहे हैं, आप 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'यदि आपकी गतिविधि आपके पैकेज की जड़ में नहीं है।
लाइट

66

1. निर्माण परियोजना, डिवाइस के लिए उत्पन्न APK स्थापित करें

# at the root dir of project
$ gradle installDebug

2. डिवाइस पर ऐप खोलें

$ adb shell am start -n yourpackagename/.activityname

6
उर्फ अरुण = "ग्रेडेल इनग्यूब; अदब शेल एम स्टार्ट-एन कॉम.एक्सप्लिंग.प्प / एक्टिविटी।मैनएक्टिविटी"
डोमिनिक बार्टल

मैं चयन में installDebug का चयन नहीं कर सकता। कोई उपयुक्त कार्य नहीं है। क्या इसका नाम बदल दिया गया है?
जोनास ग्रोगर

1
@ जोनास गॉगर ऐसा लगता है कि इसका नाम बदलकर इंस्टाल किया गया है
।DefaultFlavorDebug

@rps_deepan क्या आप कार्य का नाम बदल सकते हैं क्योंकि इसका नाम बदल दिया गया है?
जोनास ग्रोगर

6
alias arun="./gradlew installDebug && adb shell am start -n com.example.package/.LauncherActivity"#Runs step2 केवल जब चरण 1 सफलता है
थम्मी गौड़ा

7

एक पंक्ति वाक्य:

डिवाइस पर प्रोजेक्ट और इंस्टॉल जनरेट एपीके और ओपन ऐप बनाएं

$ ./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, जहां $ पैकेज विकास पैकेज है और $ गतिविधि लॉन्च होने वाली गतिविधि (लॉन्चर गतिविधि) है।

मैं ऐसा करने के लिए एक बैश स्क्रिप्ट लिख रहा हूं , अन्य कुछ विशेषताओं के साथ।


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 की आवश्यकता नहीं है और sdk से बताए गए संस्करण का उपयोग करता है local.properties
  • monkeyउपकरण आप एक लांचर आशय भेजने के लिए है, तो आप अपनी गतिविधि का नाम पता करने के लिए आवश्यक नहीं कर रहे हैं अनुमति देता है।

आप इसके बजाय निष्पादित कर सकते हैंadb shell am start your.package.name.debugsuffix\.Activity
विक्रम बोडिचेर्ला १16

लेकिन अगर आपको अपनी गतिविधि का नाम नहीं पता है तो क्या होगा?
0xcaff

1
तब आपको बिल्ड फ़ाइल नहीं लिखनी चाहिए।
केवेर

3
मुझे लगता है कि बिल्ड फ़ाइल के लिए इसका वास्तव में बुरा विचार स्पष्ट रूप से पता है कि कौन सी गतिविधि चलनी है ... ऐसा लगता है जैसे चिंताओं के कुछ अलग होने के खिलाफ जाता है। एक सरल कारण - यदि आप अपनी गतिविधि फ़ाइल का नाम बदलते / स्थानांतरित करते हैं, तो इसके लिए एक बिल्ड फ़ाइल परिवर्तन की आवश्यकता होती है। इसके अतिरिक्त, एक फ़ाइल की तुलना में चलाने के लिए इंटेंट एक बेहतर एपीआई की तरह लगते हैं - मैं एक ग्रेडल एक्सटेंशन लिख सकता हूं जो डिफ़ॉल्ट इंटेंट और उन्हें चलाने के तरीके जोड़ता है, इसे संस्करण देता है, और कभी भी किसी के वर्ग नामों को जानने की आवश्यकता नहीं होती है। हार्ड कोडिंग कभी सही उत्तर नहीं है।
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]

धन्यवाद। @ एलेक्जेंडर-पोलोमोडोव
18'18


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}काम के लिए देगा जो आपके पास पहले से है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.