Bagaimana cara terbaik saya mengelola Strings filter Intent Android di beberapa proyek?

8

Dalam IntentExamples proyek saya, saya memiliki filter ini, terkait dengan layanan.

<intent-filter>
                <action android:name="biz.rpcodes.apps.intentexamples.START_SERVICE" />
</intent-filter>

Di proyek lain, UseExampleService, saya punya sesuatu seperti:

Intent i = new Intent("biz.rpcodes.apps.intentexamples.START_SERVICE");
                startService(i);

... dipandu oleh jawaban ini: https://stackoverflow.com/a/16439551/5181778

Pertanyaan saya adalah: Bagaimana cara terbaik saya mengelola Intent filter Strings ini di beberapa proyek? Solusi terbaik yang saya miliki sekarang adalah membuat kelas yang saya salin dan tempelkan dari proyek Layanan ke proyek lain, yaitu:

class ExampleServiceIntents {
public static final String ExampleServiceIntents.START_SERVICE = 
    "biz.rpcodes.apps.intentexamples.START_SERVICE";
...

Sementara saya dapat mengimpor kelas Layanan sendiri new Intent(this, ExampleService.class), saya ingin menjaga kelas Layanan di proyek mereka sendiri.

Rick Page
sumber
Mengapa Anda ingin menyimpan layanan dalam proyek terpisah? Itu hanya memperkenalkan kemungkinan bahwa aplikasi dengan Servicetidak diinstal. Dan Anda selalu dapat membuat perpustakaan yang berisi konstanta ini dan kemudian menggunakan perpustakaan itu di setiap proyek.
Xaver Kapeller
Saat ini saya memiliki perpustakaan, dan saya merasa kesulitan di Android Studio untuk mengimpornya. Biasanya Android Studio akan merusak sesuatu dan saya tinggal menyalin file yang ditempel satu per satu. (Pertanyaan / masalah terpisah) Plus, Aplikasi ini sudah ada di dalam, saya dapat mengontrol persyaratan, ini bukan untuk Google Play Store dll. Plus tidak memerlukan ketiga aplikasi yang menjalankan kode yang sama, dalam beberapa hal lebih baik untuk menempatkan permintaan dalam antrian pada satu proses untuk desain kami. (Banyak untuk menjelaskan)
Rick Page
Bagaimana cara rumit mengimpornya? Anda akan memecahkan banyak hal dengan menyalin kelas sendiri kemudian menyalin modul kerja penuh. Dan mengapa Anda tidak menggunakan server pakar seperti SonarQube atau Artifactory untuk meng-host perpustakaan di rumah Anda? Kemudian mengimpor perpustakaan sama seperti mengimpor proyek pakar lain - menambahkan satu baris di build.gradle.
Xaver Kapeller
"istirahat lebih banyak" Ya, benar-benar. Tetapi satu-satunya cara saya bisa menggunakan modul adalah dengan mengimpornya, dalam hal ini Android Studio menyalin semua file. "... maven server" Terima kasih atas sarannya, aku akan memeriksa ini.
Rick Page

Jawaban:

1

Pustaka Bersama Android atau tautan simbolik yang tergantung pada sistem operasi.

Opsi 1: Perpustakaan Android Bersama

Perpustakaan Android resmi diimpor ke setiap proyek.

Kelebihan : Jenis keamanan. Cross-platform dan bekerja dengan kontrol sumber. Dukungan pemeriksaan sintaks dan editor penuh.

Cons : Masih agak menjengkelkan untuk mengimpor proyek sebagai pustaka melalui editor saat ini (Android Studio atau Eclipse with ADT) karena mereka tidak menawarkan antarmuka yang sangat baik untuk melakukan ini. Jika Anda harus sering melakukan tugas ini tetapi tidak terlalu sering Anda mengingat semua langkah setiap kali, maka ini mungkin tidak sepadan dengan usaha. Tetapi jika ini hanya satu atau dua kali, maka Anda tidak perlu melakukannya lagi, itu tidak terlalu buruk.

Opsi 2 Tautan Simbolik

Secara simbolis menautkan file sumber umum di setiap proyek. Kemudian kedua proyek akan melihat file dan mengubahnya, sehingga mereka dapat tetap sinkron.

Pro : Jauh lebih mudah diimplementasikan.

Cons : Tautan simbolik tidak bekerja dengan baik dengan alat kontrol sumber. Bukan lintas platform (untuk pengembangan) karena tautan simbolik sangat berbeda dari satu sistem operasi ke sistem operasi lainnya. Tidak begitu jelas bagi pengembang baru yang datang ke proyek yang perubahan di satu secara otomatis dibagikan dengan yang lain.


Oleh karena itu, karena opsi tautan simbolik memiliki lebih banyak kontra daripada pro, saya biasanya akan merekomendasikan solusi perpustakaan bersama untuk sebagian besar proyek. Tetapi, jika proyek khusus Anda tidak memerlukan fitur dari kolom kontra dari tautan simbolik, maka itu mungkin lebih mudah. Tergantung.

PS: Ada opsi ketiga yang mengerikan untuk memiliki aplikasi Android ketiga penuh yang menawarkan Penyedia data Android yang menawarkan nilai-nilai string. Tetapi pada saat itu Anda perlu berkomunikasi dengan aplikasi itu dengan string khusus yang perlu dibagikan juga, jadi Anda hanya menambahkan langkah abstraksi tetapi belum menyelesaikan masalah.

Mufasa
sumber
Ide menarik tentang Penyedia. Tapi, satu langkah mundur, saya setuju. Terima kasih telah mengakui bahwa editor saat ini "tidak menawarkan antarmuka yang sangat baik untuk melakukan" berbagi pustaka android, dan untuk pro dan kontra.
Rick Page