অ্যান্ড্রয়েড স্টুডিও এবং গ্রেডল দিয়ে অ্যান্ড্রয়েড লাইব্রেরি কীভাবে তৈরি করবেন?


144

আমি একটি প্রকল্প Eclipse থেকে স্থানান্তরিত করার চেষ্টা করছি তবে যা চেষ্টা করেছি কিছুই কাজ করছে না। Eclipse এ আমার 3 টি প্রকল্প (2 অ্যান্ড্রয়েড অ্যাপ প্রকল্প এবং 1 অ্যান্ড্রয়েড লাইব্রেরি প্রকল্প) রয়েছে। 2 টি অ্যাপ প্রকল্পগুলি লাইব্রেরি প্রকল্পের উপর নির্ভর করে। যখন আমি গ্রেড এক্সপোর্ট করি তখন আমি 3 টি প্রকল্প পাই যা কার্যকর হয় না। আমি প্রকল্পটি পুনর্গঠনের জন্য উন্মুক্ত কিন্তু কীভাবে এটি করা উচিত তার কোনও নথিপত্র পাইনি।

Eclipse রফতানি একসাথে কাজ করে এমন 3 টি প্রকল্প করার কী উপায় আছে? আমি কি জিনিসগুলিকে পুনর্গঠন করার চেয়ে আরও ভাল করছি এবং যদি এটি করা হয় তবে এর জন্য ডকুমেন্টেশন কি?

হালনাগাদ

আমি পুরো প্রকল্পটি গিটহাব https://github.com/respectTheCode/android-studio-library-example এ আপলোড করেছি

আপডেট 1

পদ্ম কুমারের পরামর্শের ভিত্তিতে এটিই আমি চেষ্টা করেছি।

  1. নামে পরিচিত একটি নতুন প্রকল্প তৈরি করুন MyApp
  2. ক্লিক করুন File > New Module, চয়ন করুন Android Libraryএবং নাম দিনMyLib
  3. ক্লিক Build > Make Project

বিল্ডটি এই ত্রুটির সাথে ব্যর্থ হয়

Module "MyLib" was fully rebuilt due to project configuration/dependencies changes
Compilation completed with 1 error and 0 warnings in 19 sec
1 error
0 warnings
/.../MyApp/MyLib/build/bundles/debug/AndroidManifest.xml
Gradle: <manifest> does not have package attribute.

আমি তখন packageএটি তৈরিতে ম্যানিফেস্টে একটি বৈশিষ্ট্য যুক্ত করেছি

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.mylib" >

বিল্ডিংয়ের পরে আমি এই ত্রুটি পেয়েছি

Module "MyApp" was fully rebuilt due to project configuration/dependencies changes
Compilation completed with 2 errors and 0 warnings in 13 sec
2 errors
0 warnings
/.../MyApp/MyLib/src/main/java/com/example/mylib/MainActivity.java
Gradle: package R does not exist
Gradle: package R does not exist

নির্ভরতা যুক্ত করার ফলে ত্রুটির কোনও প্রভাব আছে বলে মনে হয় না। উপরে থেকে অবিরত

  1. ক্লিক File > Project Structure > Modules > MyApp-MyApp
  2. Dependenciesট্যাবে স্যুইচ করুন
  3. ক্লিক করুন + > Module Dependencyএবং বাছাই করুনMyLib
  4. ক্লিক করুন ApplyএবংOK
  5. ক্লিক Build > Make Project

আপডেট 2

আমরা এখান থেকে ইথানের পরামর্শগুলি ভিত্তি করে তৈরি করেছি

2 টি সাবজেক্টটি build.gradleমনে হয় যে সমস্ত সঠিক অংশ রয়েছে এবং পার্থক্যটি হ'ল প্লাগইন লাইন বেলো MyApp/build.gradle

buildscript {
    repositories {
        maven { url 'http://repo1.maven.org/maven2' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
}
apply plugin: 'android'

dependencies {
    compile files('libs/android-support-v4.jar')
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 16
    }
}

মূল প্রকল্পটি build.gradleখালি ছিল তাই আমি এই দুটি প্রকল্প যুক্ত করেছি

dependencies {
    compile project(":MyLib")
    compile project(":MyApp")
}

নির্মাণের সময় আমি এখন এই ত্রুটিটি পেয়েছি

Gradle:
FAILURE: Build failed with an exception.
* Where:
Build file '/Users/kevin/GitHub/AppPress/MyApp/build.gradle' line: 2
* What went wrong:
A problem occurred evaluating root project 'MyApp'.
> Could not find method compile() for arguments [project ':MyLib'] on root project 'MyApp'.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

আপডেট 3

এটিকে সমাধান করার জন্য এথনকে অনেক ধন্যবাদ।

  1. যোগ compile project(':SubProjects:MyLib')করুনMyLib/build.gradle
  2. compile files('libs/android-support-v4.jar')থেকে সরানMyLib/build.gradle
  3. প্রকল্প বন্ধ করুন এবং গ্রেড থেকে মূল প্রকল্পটি আমদানি করুন

আপডেট 4

0.1.2 হিসাবে আপনি এখন এর compile "com.android.support:support-v4:13.0.0"পরিবর্তে অন্তর্ভুক্ত করতে পারেন compile files('libs/android-support-v4.jar')। যেহেতু এটি এখন মাভিন থেকে আসছে তাই আপনি সমস্যা ছাড়াই একাধিক প্রকল্পে এটি অন্তর্ভুক্ত করতে পারেন।

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:0.4.2'
    }
}

apply plugin: 'android'

dependencies {
    compile "com.android.support:support-v4:13.0.0"

    compile project(':SubProjects:MyLib')
}

আপডেট 5

0.1.3 হিসাবে এখন সরঞ্জামদণ্ডে একটি "সিঙ্ক প্রকল্প" বোতাম রয়েছে। আপনি .gradleফাইলগুলিতে পরিবর্তন করার পরে আপনার প্রকল্পটিকে পুনরায় গুরুত্বের পরিবর্তে ক্লিক করতে পারেন ।


আপনার গিথুব প্রকল্পের জন্য আমি একটি অনুরোধ করেছি। দুটি সাধারণ পরিবর্তন ছিল। আপনার / বিল্ড.gradle থেকে সামগ্রী সরান। This আমি এটি করেছি কারণ আপনি কী ধরণের প্রকল্পটি সংজ্ঞায়িত করেননি, তাই এটির সাথে কী করণীয় তা না জানার জন্য অভিযোগ করা হয়েছিল}, তারপরে আমি নির্ভরতা যুক্ত করেছি: সাবপ্রজেক্ট: মাইলিব থেকে: সাবপ্রজেক্ট: মাই অ্যাপ। আমি তখন দৌড়েছি। / গ্রেডলিউ: সাবপ্রজেক্ট: মাই অ্যাপ: আইডি (আইডি মানচিত্রগুলি ইনস্টলডিব্যাগ)। আমাকে নকল লিবস / অ্যান্ড্রয়েড-সাপোর্ট-ভি 4.জারও সরিয়ে ফেলতে হয়েছিল। যেহেতু এটি 'আসল' নির্ভরতা নয়, আপনি এটি দুটি জায়গায় রাখতে পারবেন না।
ইথান

আমি টান অনুরোধ মন্তব্য। github.com/respectTheCode/android-studio-library-example/pull/1
आदर TheCode

1
এটি উল্লেখ করার মতো, যদি আপনি compile 'com.google.android:support-v4:r6'গ্রেডের পরিবর্তে আপনার প্রতিটি প্রকল্প এবং মাভেন প্লাগইনকে (নীচে বিল্ড.gradle উদাহরণের মতো) যুক্ত করেন compile files('libs/android-support-v4.jar')তবে বুঝতে পারবেন যে উভয় প্রকল্পই একই জিনিসকে অন্তর্ভুক্ত করেছে এবং কেবল একবার এটি অন্তর্ভুক্ত করবে।
ইথান

@ অস্পষ্টকোড আমি আপনার নমুনা গিথুব প্রকল্পটি কিছুটা সাফ করার জন্য একটি টান অনুরোধ পাঠিয়েছি। ভাগ করে নেওয়ার জন্য ধন্যবাদ!
জনিলম্বদা

উত্তর:


115

দ্রষ্টব্য : এই উত্তরটি খাঁটি গ্রেডল উত্তর, আমি এটি নিয়মিত ভিত্তিতে ইন্টেলিজিতে ব্যবহার করি তবে অ্যান্ড্রয়েড স্টুডিওর সাথে সংহতকরণ কীভাবে হয় তা আমি জানি না। আমার জন্য কী চলছে তা জেনে আমি বিশ্বাসী, সুতরাং আমি গ্র্যাডল এবং অ্যান্ড্রয়েডকে এভাবে ব্যবহার করি।

টিএল; ডিআর পূর্ণ উদাহরণ - https://github.com/ethankhall/driving-time-tracker/

দাবি অস্বীকার : এটি এমন একটি প্রকল্প যা আমি কাজ করছি / যাচ্ছিলাম।

গ্রেডলের একটি সংজ্ঞায়িত কাঠামো রয়েছে (যা আপনি পরিবর্তন করতে পারেন, নীচে লিঙ্কটি আপনাকে জানায়) এটি যদি আপনি কখনও ব্যবহার করেন তবে ম্যাভেনের সাথে এটি খুব মিল।

Project Root
+-- src
|   +-- main (your project)
|   |   +-- java (where your java code goes)
|   |   +-- res  (where your res go)
|   |   +-- assets (where your assets go)
|   |   \-- AndroidManifest.xml
|   \-- instrumentTest (test project)
|       \-- java (where your java code goes)
+-- build.gradle
\-- settings.gradle

আপনার যদি কেবল একটি প্রকল্প থাকে তবে সেটিংস.gradle ফাইলের প্রয়োজন হয় না। তবে আপনি আরও প্রকল্প যুক্ত করতে চান, সুতরাং আমাদের এটির প্রয়োজন।

এখন সেই বিল্ড.gradle ফাইলটি দেখে নেওয়া যাক। আপনার এটির প্রয়োজন হবে (অ্যান্ড্রয়েড সরঞ্জামগুলি যুক্ত করতে)

build.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.3'
    }
}

এখন গ্র্যাডলকে অ্যান্ড্রয়েডের কয়েকটি অংশ সম্পর্কে আমাদের বলতে হবে। এটা বেশ সহজ। একটি বেসিক (যা আমার বেশিরভাগ ক্ষেত্রে কাজ করে) নীচের মত দেখাচ্ছে। আমার এই ব্লকে একটি মন্তব্য আছে, এটি আমাকে APK তৈরি করার সময় সংস্করণটির নাম এবং কোড নির্দিষ্ট করার অনুমতি দেবে।

build.gradle

apply plugin: "android"
android {
        compileSdkVersion 17
        /*
        defaultConfig {
            versionCode = 1
            versionName = "0.0.0"
        }
        */
    }

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

build.gradle

task wrapper(type: org.gradle.api.tasks.wrapper.Wrapper) {
    gradleVersion = '1.4'
}

সুতরাং এখন আমরা একটি প্রকল্প নির্মাণ করতে হবে। এখন আমরা অন্যদের যুক্ত করতে যাচ্ছি। আমি এগুলিকে একটি ডিরেক্টরিতে রেখেছি, সম্ভবত এটিকে ডিপ্স বা উপ-প্রকল্পগুলি বলে। এটি আসলে গুরুত্বপূর্ণ নয়, তবে আপনি এটি কোথায় রেখেছিলেন তা আপনার জানতে হবে। গ্র্যাডলকে কোথায় প্রকল্পগুলি হচ্ছে তা জানাতে আপনার সেগুলি সেটিংসে যোগ করতে হবে rad

ডিরেক্টরি কাঠামো:

Project Root
+-- src (see above)
+-- subProjects (where projects are held)
|   +-- reallyCoolProject1 (your first included project)
|       \-- See project structure for a normal app
|   \-- reallyCoolProject2 (your second included project)
|       \-- See project structure for a normal app
+-- build.gradle
\-- settings.gradle

settings.gradle:

include ':subProjects:reallyCoolProject1'
include ':subProjects:reallyCoolProject2'

আপনার শেষটি যে বিষয়টি নিশ্চিত করা উচিত তা হ'ল উপ-প্রকল্পগুলি / সত্যই কুলপ্রজেক্ট 1 / বিল্ড . gradle এর apply plugin: "android-library"পরিবর্তে apply plugin: "android"

প্রতিটি গ্র্যাডেল প্রকল্পের (এবং মাভেন) এর মতো আমাদের এখন এটির নির্ভরতা সম্পর্কে মূল প্রকল্পটি জানাতে হবে। এটি আপনার যে কোনও সাধারণ জাভা নির্ভরতাও অন্তর্ভুক্ত করতে পারে।

build.gradle

dependencies{
    compile 'com.fasterxml.jackson.core:jackson-core:2.1.4'
    compile 'com.fasterxml.jackson.core:jackson-databind:2.1.4'
    compile project(":subProjects:reallyCoolProject1")
    compile project(':subProjects:reallyCoolProject2')
}

আমি জানি এটি অনেক ধাপের মতো মনে হয় তবে আপনি একবার বা দু'বার এটি করার পরে এগুলি বেশ সহজ। আপনি অ্যান্ড্রয়েড এসডিকে সেখানে ইনস্টল করেছেন তা ধরে নিয়ে এই পদ্ধতি আপনাকে সিআই সার্ভার তৈরির অনুমতি দেয়।

এনডিকে সাইড নোট: আপনি যদি এনডিকে ব্যবহার করতে যাচ্ছেন তবে নীচের মতো কিছু আপনার প্রয়োজন হবে। Build.gradle ফাইলের উদাহরণ এখানে পাওয়া যাবে: https://gist.github.com/khernyo/4226923

build.gradle

task copyNativeLibs(type: Copy) {
    from fileTree(dir: 'libs', include: '**/*.so' )  into  'build/native-libs'
}
tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs }

clean.dependsOn 'cleanCopyNativeLibs'

tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
  pkgTask.jniDir new File('build/native-libs')
}

সূত্র:

  1. http://tools.android.com/tech-docs/new-build-system/user-guide
  2. https://gist.github.com/khernyo/4226923
  3. https://github.com/ethankhall/driving-time-tracker/

1
ধন্যবাদ @ ইথান এটি শূন্যতার কিছু পূরণ করে। অ্যান্ড্রয়েড স্টুডিওতে কেবল প্রোজেক্ট বিল্ড.gradle অনুপস্থিত ছিল। আমি এখন যে ত্রুটিটি পাচ্ছি তা দিয়ে আমি প্রশ্নটি আপডেট করব।
শ্রদ্ধাজনিত কোড

1
আমি আপনার ড্রাইভিং টাইম ট্র্যাকার রেপো ক্লোনিং এবং প্রকল্পটি আমদানি করার চেষ্টা করেছি কিন্তু এটি সংকলন হবে না।
শ্রদ্ধার কোড 19

আমি কিছু ভুলে গেছি, আমি একটি নতুন অনুরোধ করেছি
ইথান

1
: হাই @Ethan, মনে হচ্ছে আপনি Gradle সঙ্গে অভিজ্ঞ হয়, আপনি ভাল হিসাবে আমার সমস্যার সাথে সাহায্যের কিছু মনে করবে stackoverflow.com/questions/17479076/...
TacB0sS

@ ইথান আপনি কি অ্যান্ড্রয়েডের জন্য গ্রেডলের সাথে নির্ভরশীলতার সমস্যাটিতে সহায়তা করতে পারেন দয়া করে?
জেজেডি

6

গ্রেড বিল্ডিং / জজার লাইব্রেরি যুক্ত করার সাথে আমার কেবল খুব একই সমস্যা ছিল। আমি এটি একটি সংমিশ্রণ দ্বারা কাজ পেয়েছিলাম:

  1. প্রকল্পের মূল পর্যন্ত 'libs ফোল্ডারটি সরানো (' src 'হিসাবে একই ডিরেক্টরি)) এবং ফোল্ডারে এই ফোল্ডারে লাইব্রেরি যুক্ত করা হচ্ছে (ম্যাক ওএস এক্স ব্যবহার করে)
  2. অ্যান্ড্রয়েড স্টুডিওতে লাইব্রেরি হিসাবে যুক্ত করতে ফোল্ডারে ডান ক্লিক করুন
  3. Build.gradle ফাইলটিতে নির্ভরতা সম্পাদনা করা হচ্ছে compile fileTree(dir: 'libs', include: '*.jar')}

তবে আরও গুরুত্বপূর্ণ এবং বিরক্তিকরভাবে, আমি এটি কাজ করার কয়েক ঘন্টা পরে, অ্যান্ড্রয়েড স্টুডিও মাত্র ০.০..7 প্রকাশ করেছে, যা জাজার লাইব্রেরি যুক্ত করার মতো অনেকগুলি গ্রেডের সমস্যার সমাধান করেছে বলে দাবি করেছে claims

http://tools.android.com/recent

আশা করি এটি মানুষকে সাহায্য করবে!


1
এই ইস্যুটি জাভা জজার লাইব্রেরি নয় অ্যানড্রায়ড লাইব্রেরি সম্পর্কে কথা বলছে।
শ্রদ্ধাবাদ কোড

2
সত্য! তবে, আমার সমস্যা গ্রেড বিল্ডস এবং অ্যান্ড্রয়েড স্টুডিও জড়িত ছিল এবং এই পোস্টটি আমাকে আমার সমাধানের দিকে নিয়ে যেতে সহায়তা করার পক্ষে যথেষ্ট ছিল - কেবল এই ভেবেছিল যে আমি এই সুসংবাদ ছড়িয়ে দেব অন্য কারও পক্ষে যদি এই প্রশ্নটির দিকে না যায়, এবং একই অবস্থানে ছিলাম আমাকে.
জোয়েল বাল্মার

1

এখানে ম্যাক ব্যবহারকারীদের জন্য আমার সমাধানটি আমি মনে করি এটি উইন্ডোতেও কাজ করে:

প্রথমে আপনার অ্যান্ড্রয়েড স্টুডিও সরঞ্জামদণ্ডে যান

বিল্ড> প্রজেক্ট তৈরি করুন (আপনি লোকেরা অনলাইনে থাকাকালীন ফাইলগুলি ডাউনলোড করতে দিন) এবং তারপরে

তৈরি করুন> মডিউলটি সংকলন করুন "আপনার অ্যাপ্লিকেশনটির নাম এখানে দেখানো হয়েছে" (এখনও অনলাইনে ফাইলগুলি
ডাউনলোড করে শেষ করা যাক) এবং তারপরে

আপনার অ্যাপটি চালান যা হয়ে গেছে এটি আপনার এমুলেটরটি চালু করবে এবং এটি কনফিগার করবে তারপরে এটি চালান!

হ্যাঁ, ওটাই!!! শুভ কোডিং ছেলেরা !!!!!!!


0

গ্রেডেল বিল্ড সরঞ্জাম 2.2.0+ - সবকিছু ঠিক কাজ করে

এটি করার সঠিক উপায় এটি

এনডিকে এবং তার সমস্ত হ্যাকারি সম্পর্কে পরীক্ষামূলকভাবে এবং অকপটভাবে বিরক্ত হওয়ার চেষ্টা করার জন্য আমি খুশি যে গ্রেডল বিল্ড সরঞ্জামগুলির ২.২.x প্রকাশিত হয়েছে এবং এখন এটি কার্যকরভাবে কাজ করে। চাবিকাঠি externalNativeBuildএবং প্রতি নির্দেশ ndkBuildএকটি এ পথ যুক্তি Android.mkবা পরিবর্তন ndkBuildকরতে cmakeহবে এবং একটি সময়ে পথ যুক্তি বাতলান CMakeLists.txtবিল্ড স্ক্রিপ্ট।

android {
    compileSdkVersion 19
    buildToolsVersion "25.0.2"

    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 19

        ndk {
            abiFilters 'armeabi', 'armeabi-v7a', 'x86'
        }

        externalNativeBuild {
            cmake {
                cppFlags '-std=c++11'
                arguments '-DANDROID_TOOLCHAIN=clang',
                        '-DANDROID_PLATFORM=android-19',
                        '-DANDROID_STL=gnustl_static',
                        '-DANDROID_ARM_NEON=TRUE',
                        '-DANDROID_CPP_FEATURES=exceptions rtti'
            }
        }
    }

    externalNativeBuild {
        cmake {
             path 'src/main/jni/CMakeLists.txt'
        }
        //ndkBuild {
        //   path 'src/main/jni/Android.mk'
        //}
    }
}

আরও তথ্যের জন্য নেটিভ কোড যুক্ত করার জন্য গুগলের পৃষ্ঠাটি পরীক্ষা করুন

এটি সঠিকভাবে সেট আপ হওয়ার পরে ./gradlew installDebugআপনি যেতে পারেন এবং করতে পারেন। আপনার আরও সচেতন হওয়া দরকার যে জিডিসি এখন অ্যান্ড্রয়েড এনডিকে নষ্ট হয়ে যাওয়ার পরে এনডিকে ঝাঁকুনির দিকে চলেছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.