আপনি কি কমান্ড লাইন থেকে গ্রেডলের মাধ্যমে কোনও ডিভাইসে স্থাপন করতে পারেন


89

প্রশ্নটি আসলে কী বলে - আপনি কোনও ডিভাইস তৈরি, প্যাকেজ এবং মোতায়েনের জন্য কমান্ড লাইনের মাধ্যমে গ্রেডলুতে সরাসরি কোনও আদেশ দিতে পারেন?


4
gradle tasksবাক্সের কাজগুলি শেষ করতে সহায়তা করে - যার মধ্যে ইনস্টলিং রয়েছে (তবে নীচে বর্ণিত হিসাবে শুরু করা হয়নি)
ডোরি

কমান্ড লাইনটি আইডিই নির্দিষ্ট নয়, এই পদ্ধতিতে অ্যান্ড্রয়েড স্টুডিও বা এক্লিপস ভিত্তিক আইডিই থেকে কাজ করবে
পল ভেরেস্ট

সেন্টিমিডিতে গ্রেডল ইনস্টলডব্যাগ - মূল ফোল্ডারটি হওয়া উচিত
c49

উত্তর:


98
$ gradle installDebug

এটি ডিবাগ বিল্ড এপিকে ডিভাইসে চাপ দেবে, তবে আপনাকে ম্যানুয়ালি অ্যাপ্লিকেশনটি শুরু করতে হবে।


4
নীচের হিসাবে, এটির নামকরণ করা হয়েছে "গ্রেডল ইনস্টলডাফল্টফ্লেভারডেবাগ"
দুরকা 42

4
@ durka42 এটি কেবলমাত্র যদি আপনি স্বাদ ব্যবহার করেন তবে
ম্যাথিজস সেগার্স

4
আমি বলব ./ গ্রেড আইডির পরিবর্তে গ্রেড আইডি
ইরাদ্যক

4
Eclipse এ গ্র্যাডল প্লাগইন ইনস্টল থাকা ভিতরে কি এই কমান্ডটি চালানো সম্ভব? আমি এই ত্রুটিটি পেয়েছি: টাস্ক 'ইনস্টলডিবগ' মূল প্রকল্প 'ব্লেব্লাহ' তে পাওয়া যায় নি।
ডাঃ জ্যাকি

76

যেহেতু আপনি গ্রেডল ব্যবহার করছেন তাই আপনি বিল্ড.গ্রাডলে আপনার নিজের কাজটি সহজেই যুক্ত করতে পারেন

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'


4
এছাড়াও, আপনার ক্রিয়াকলাপটি আপনার প্যাকেজের মূলটিতে না থাকলে 'com.your.packagename/.path.relative.to.your.packagename.MyActivity'তার পরিবর্তে শেষ প্যারামিটারটি হওয়া উচিত 'com.example/.MyActivity'
হালকা

66

1. প্রকল্প তৈরি করুন, ডিভাইসে উত্পন্ন এপিপি ইনস্টল করুন

# at the root dir of project
$ gradle installDebug

2. ডিভাইসে অ্যাপ খুলুন Open

$ adb shell am start -n yourpackagename/.activityname

6
ওরফে আরুন = "গ্রেড ইনস্টলডিবুগ; অ্যাডবি শেল am--com.example.app/.activity.MainActivity"
ডমিনিক

আমি গ্রেডে ইনস্টলডিবগ নির্বাচন করতে পারি না। কোন উপযুক্ত কাজ নেই। এর নামকরণ হয়েছে?
জোনাস গ্রেগার

4
@ জোনাসগ্রিগের মনে হয় এটি ইনস্টল করে নতুন নামকরণ করা হয়েছে ডিফল্টফ্ল্যাভারডেবগ
durka42

@ আরপিএস_দীপন এই কাজের নাম বদলে দেওয়ার কারণে আপনি কি নামটির নামকরণ করতে পারবেন?
জোনাস গ্রেগার

6
alias arun="./gradlew installDebug && adb shell am start -n com.example.package/.LauncherActivity"# পদক্ষেপ 2 কেবল পদক্ষেপ 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যেখানে $ প্যাকেজটি হ'ল ডেভলপমেন্ট প্যাকেজ এবং IV 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পথে চলার জন্য অ্যাডাবির প্রয়োজন হয় না এবং এসডিকে ইনড পয়েন্ট থেকে অ্যাডবি সংস্করণ ব্যবহার করে local.properties
  • monkeyটুল আপনি একটি লঞ্চার অভিপ্রায় পাঠাতে, যাতে আপনি আপনার কার্যকলাপের নাম জানতে প্রয়োজন হয় না পারেন।

আপনি পরিবর্তে মৃত্যুদন্ড কার্যকর করতে পারেনadb shell am start your.package.name.debugsuffix\.Activity
বিক্রম বডিচরেলা

তবে যদি আপনি আপনার ক্রিয়াকলাপের নামটি না জানেন?
0xcaff

4
তারপরে আপনার বিল্ড ফাইলটি লেখা উচিত নয়।
কেভর

4
আমার মনে হয় বিল্ড ফাইলটির জন্য এটি খুব খারাপ ধারণা স্পষ্টভাবে জানে যে কোন ক্রিয়াকলাপটি চালানো উচিত ... মনে হচ্ছে উদ্বেগের কিছু আলাদা হওয়ার বিরুদ্ধে goes একটি সাধারণ কারণ - যদি আপনি আপনার ক্রিয়াকলাপের ফাইলটির নাম পরিবর্তন / সরান, তবে এটির জন্য এখন একটি বিল্ড ফাইল পরিবর্তন দরকার। অতিরিক্ত হিসাবে, উদ্দেশ্যগুলি কোনও ফাইলের চেয়ে চালানোর জন্য আরও ভাল অ্যাপির মতো বলে মনে হয় - আমি গ্রেড এক্সটেনশন লিখতে পারি যা ডিফল্ট অভিপ্রায় এবং সেগুলি চালনার উপায়গুলি যুক্ত করে, সংস্করণ করে, এবং কারও শ্রেণির নাম জানার দরকার পড়ে না। হার্ড কোডিং কখনই সঠিক উত্তর হয় না।
স্মুডেট

4
এই উত্তরেও মূল প্যাকেজটি খুঁজে পাওয়ার কোনও অভাব রয়েছে - আমিও প্যাকেজটির নামটি থেকে মুক্তি পেতে চাই - উদাহরণস্বরূপ এটি ম্যানিফেস্ট থেকে আবিষ্কার করুন।
স্মুডেট

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]

ধন্যবাদ @ আলেকজান্দার-পোলোমোডোভ
গফটি


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.