android - tools - gradle ماهو



كيفية استخدام ThreeTenABP في مشروع أندرويد (1)

الاكتشاف الأول: لماذا يجب عليك استخدام ThreeTenABP بدلاً من java.time أو ThreeTen-Backport أو حتى Joda-Time

هذه نسخة قصيرة جدًا من عملية VERY LONG PROCESS لتحديد معيار جديد. كل هذه الحزم هي نفس الشيء إلى حد كبير: المكتبات التي توفر وظائف جيدة وحديثة لمعالجة الوقت لجافا. الاختلافات خفية ولكنها مهمة.

سيكون الحل الأكثر وضوحًا هو استخدام الحزمة java.time ، لأن هذه هي الطريقة القياسية الجديدة للتعامل مع الوقت والتواريخ في Java. إنه تطبيق JSR 310 ، الذي كان اقتراحًا قياسيًا جديدًا للتعامل مع الوقت استنادًا إلى مكتبة Joda-Time .

ومع ذلك ، تم تقديم java.time في Java 8 . يعمل Android يصل إلى Marshmallow على Java 7 ("Android N" هو الإصدار الأول لتقديم ميزات لغة Java 8). وبالتالي ، ما لم تكن تستهدف Android N Ngat وما فوقه فقط ، فلن يمكنك الاعتماد على ميزات لغة Java 8 (لست متأكدًا من أن هذا صحيح بنسبة 100٪ ، ولكن هكذا أفهمها). لذلك java.time خارج.

قد يكون الخيار التالي هو Joda-Time ، نظرًا لأن JSR 310 كان يعتمد على Joda-Time. ومع ذلك ، كما يشير الملف التمهيدي ThreeTenABP ، لعدة أسباب ، فإن Joda-Time ليس الخيار الأفضل.

التالي هو ThreeTen-Backport ، الذي ThreeTen-Backport كثيرًا (ولكن ليس كل) وظيفة Java 8 java.time إلى Java 7. هذا جيد لمعظم حالات الاستخدام ، ولكن كما هو موضح في المستند التمهيدي ThreeTenABP ، فإنه يحتوي على مشكلات في الأداء مع ذكري المظهر.

لذا فإن الخيار الأخير والصحيح على ما يبدو هو ThreeTenABP .

الاكتشاف الثاني: بناء الأدوات وإدارة التبعية

نظرًا لأن تجميع برنامج - وخاصة البرنامج الذي يستخدم مجموعة من المكتبات الخارجية - أمر معقد ، فإن Java تستخدم دائمًا "أداة بناء" لإدارة العملية. Make و Apache Ant و Apache Maven و Gradle كلها أدوات بناء تستخدم مع برامج Java (انظر هذا Gradle للمقارنة). كما لوحظ أكثر ، فإن Gradle هي أداة البناء المختارة لمشاريع Android.

وتشمل أدوات البناء هذه إدارة التبعية. يبدو أن Apache Maven هو أول من يتضمن مستودعًا مركزيًا للحزم. قدمت Maven مستودع Maven المركزي ، والذي يسمح بوظيفة مكافئة لـ php مع Packagist و Ruby gem with rubygems.org. بمعنى آخر ، فإن مستودع Maven Central Repository هو Maven (و Gradle) ما هو Packagist للملحن - مصدر نهائي وآمن للحزم التي تم إصدارها.

الاكتشاف الثالث: Gradle يعالج التبعيات في مشاريع Android

على رأس قائمة المهام الخاصة بي قراءة مستندات Gradle here ، بما في ذلك الكتب الإلكترونية المجانية. لو قرأت هذه الأسابيع قبل أن بدأت في تعلم Android ، كنت أعرف بالتأكيد أن Gradle يمكنه استخدام مستودع Maven Central Repository لإدارة التبعيات في مشاريع Android. علاوة على ذلك ، كما هو مفصل في إجابة StackOverflow ، بدءًا من Android Studio 0.8.9 ، يستخدم Gradle مستودع Maven Central Repository ضمنيًا من خلال Bintray's JCenter ، مما يعني أنك لست مضطرًا إلى القيام بأي تهيئة إضافية لإعداد الريبو - أنت فقط تسرد التبعيات.

الاكتشاف الرابع: يتم سرد تبعيات المشروع في [مشروع dir] /app/build.gradle

مرة أخرى ، واضح لأولئك الذين لديهم أي خبرة في استخدام Gradle في Java ، لكن الأمر استغرق بعض الوقت لمعرفة ذلك. إذا رأيت أشخاصًا يقولون "أوه ، compile 'this-or-that.jar' سوى إضافة compile 'this-or-that.jar' "أو شيء مشابه ، فاعلم أن compile عبارة عن توجيه في ملف build.gradle يشير إلى تبعيات وقت الترجمة. Here's صفحة Gradle الرسمية حول إدارة التبعية.

الاكتشاف الخامس: ThreeTenABP يتم إدارته بواسطة Jake Wharton ، وليس بواسطة ThreeTen

قضية أخرى قضيت الكثير من الوقت في اكتشافها. إذا كنت تبحث عن ThreeTen في Maven Central ، فسترى فقط الحزم لـ threetenbp ، وليس threetenabp . إذا ذهبت إلى ThreeTenABP ، فسترى هذا الخط السيئة السمعة compile 'this-or-that' ضمن قسم التنزيل في الملف التمهيدي.

عندما وصلت لأول مرة إلى هذا الريبو github ، لم أكن أعرف معنى هذا الخط المترجم ، وحاولت تشغيله في طرفي (مع فشل واضح ويمكن التنبؤ به). محبط ، لم com.jakewharton.threetenabp إليها إلا بعد فترة طويلة من معرفة الباقي ، وأدركت أخيرًا أنه خط مافن ريبو يشير إلى ريبو com.jakewharton.threetenabp ، بدلاً من ريبو org.threeten . لهذا السبب اعتقدت أن حزمة ThreeTenABP لم تكن في ريبو مافن.

ملخص: جعلها تعمل

الآن يبدو كل شيء سهل جدا. يمكنك الحصول على وظائف معالجة الوقت الحديثة في مشروع Android من خلال التأكد من أن ملف / [project folder]/app/build.gradle يحتوي على compile 'com.jakewharton.threetenabp:threetenabp:1.0.3' في ملف dependencies :

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "me.ahuman.myapp"
        minSdkVersion 11
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}


dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    testImplementation 'junit:junit:4.12'
    implementation 'com.android.support:appcompat-v7:23.4.0'
    implementation 'com.android.support:design:23.4.0'
    implementation 'com.jakewharton.threetenabp:threetenabp:1.0.3'
}

أنا أطرح هذا السؤال لأنني جديد على Java و Android وبحثت عن ساعات نحاول معرفة ذلك. جاءت الإجابة من مجموعة من الإجابات ذات الصلة ، لذلك اعتقدت أنني سأوثق ما تعلمته لأي شخص آخر قد يكافح. انظر للاجابة.

أنا أستخدم Android Studio 2.1.2. إعداد Java الخاص بي هو التالي:

>java -version
> openjdk version "1.8.0_91"
> OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~15.10.1-b14)
> OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)





threetenabp