2012-03-01 32 views
13

Vì phổ biến để có cả phiên bản miễn phí và trả phí trong thị trường Android của cùng một ứng dụng, tôi đã quyết định thực hiện tương tự. Ban đầu tôi chỉ sao chép toàn bộ codebase và sửa đổi một số mã ở đây và ở đó (thêm quảng cáo, được xây dựng trong một số hạn chế vv) vì không có tùy chọn để thực hiện các dự án thư viện tại thời điểm đó, nhưng điều đó đã khiến tôi có hai dự án khủng khiếp để quản lý các bản sửa lỗi đến các lỗi khi tôi cần phải làm hai lần.Nhiều ứng dụng có mã chia sẻ

Vì r14 chúng tôi có thể sử dụng các dự án thư viện với các tài nguyên, vì vậy đó sẽ là một giải pháp tuyệt vời cho vấn đề cụ thể này theo như tôi có thể nói. Vì vậy, tôi đã đọc lên trên library projects và conciderations, và tôi tò mò muốn biết những gì số tiền tối thiểu của các tập tin cần thiết trong các dự án của các phiên bản khác nhau được. Do đó, câu hỏi của tôi là;

  • Tôi có thể có tất cả mã trong dự án được chia sẻ và có dự án xương trần về cơ bản chỉ là tệp kê khai không?
    • Nếu có, phải không? đây có phải là cách tối ưu về mặt khái niệm không? (do đó, ngoài thực tế là nó phụ thuộc vào cơ sở mã của tôi)
  • Làm cách nào để xử lý đặt tên gói thư viện, có quy tắc cụ thể không?
  • Có công cụ nào có thể so sánh mã từ hai dự án khác nhau và có thể hợp nhất chúng tự động kỳ diệu hoặc tự động và tùy chọn nào được ưu tiên hơn?

Trả lời

8
  1. Vâng, bạn có thể có một dự án mà về cơ bản là chỉ là một tên manifest nêu rõ ứng dụng, không gian tên, biểu tượng vv, với tất cả các mã thực tế và 99% các nguồn lực trong dự án thư viện.

  2. Vâng, tôi nghĩ bạn nên sử dụng phương pháp này. Nó rất phổ biến để sử dụng các dự án thư viện để giải quyết vấn đề ứng dụng miễn phí/trả phí.

  3. Tôi không có bất kỳ vấn đề nào về đặt tên, mặc dù bạn nên cẩn thận với bất kỳ tài nguyên nào trong các dự án riêng biệt để tránh sử dụng cùng tên.

  4. Tôi không biết về bất kỳ công cụ nào và nếu tôi muốn làm điều đó theo cách thủ công để chắc chắn tôi đang hợp nhất những gì cần hợp nhất và giữ riêng những gì cần tách biệt. bạn đã có một trình tái cấu trúc quan trọng để làm, nhưng một khi tất cả các bản sao bị xóa, tôi chắc chắn nó sẽ dễ dàng hơn nhiều.

+0

Tuyệt!Nó thực sự là khá đau làm việc sáp nhập bằng cách sử dụng một công cụ dif thường xuyên. Chỉ những thứ tôi thực sự gặp phải là tôi đã mã hóa các tên gói và một vấn đề đã biết với không hoạt động trong các dự án thư viện; cả hai đều dễ dàng giải được. – MrJre

9

Nếu tôi hiểu vấn đề của bạn một cách chính xác, bạn muốn tạo ra nhiều ứng dụng Android tương tự như nhau (ví dụ, có rất nhiều mã nguồn giống nhau), nhưng đó là khác nhau đặc biệt (nhỏ) cách và bạn muốn mỗi ứng dụng này có một gói riêng biệt để có thể tải lên và phân phối riêng biệt trên một cửa hàng ứng dụng như Google Play. Thư viện dự án là một cơ sở tuyệt vời để hoàn thành các mục tiêu đó.

Tôi giả định rằng sự khác biệt giữa các phiên bản khác nhau, bao gồm những thứ như tài nguyên, tên ứng dụng và gói và nút chuyển bật một số tính năng nhất định cho phiên bản trả tiền. Ngay cả khi đó không phải là trường hợp, bằng cách sử dụng đa hình theo cách được mô tả dưới đây, các ứng dụng khác nhau của bạn có thể khác nhau theo những cách đáng kể và vẫn chia sẻ một Thư viện dự án chung.

Thư viện dự án có thể được định nghĩa trong Eclipse theo cách tương tự như bất kỳ dự án Android nào, nhưng được đánh dấu là Thư viện dự án (bằng cách chọn hộp "Thư viện" ở gần cuối trang Android của hộp thoại Thuộc tính dự án của thư viện) và không thể được biên soạn và tự chạy. Thay vào đó, nó được dự định để được bao gồm bởi tham chiếu trong một hoặc nhiều dự án khác là ứng dụng thực tế (bằng cách thêm tham chiếu đến nó trên trang Android của mỗi hộp thoại Thuộc tính dự án của ứng dụng). Các ứng dụng này sẽ sử dụng Thư viện dự án và do đó sẽ chia sẻ mã và khả năng của nó. Mỗi ứng dụng tham chiếu như vậy sẽ có tệp kê khai riêng (có thể khai báo các gói khác nhau của chúng), và chúng cũng có thể định nghĩa các lớp riêng của chúng (bao gồm các lớp bắt nguồn từ lớp Activity và/hoặc Application của Thư viện dự án).), để các lớp này có thể chuyên biệt đa hình cho mỗi ứng dụng sử dụng Thư viện dự án (ví dụ, bằng cách ghi đè phương thức hoặc bằng cách cung cấp định nghĩa cho các phương thức được định nghĩa là trừu tượng trong các lớp có nguồn gốc ứng dụng hoặc hoạt động của Thư viện dự án), mặc dù bạn cũng có thể sử dụng các lớp Thư viện đó mà không sửa đổi (miễn là chúng không trừu tượng) bằng cách tham chiếu chúng trong tệp kê khai (ví dụ: trong thẻ hoạt động hoặc ứng dụng) của từng ứng dụng sử dụng Thư viện, giống như bạn tham chiếu Hoạt động hoặc Ứng dụng các lớp đã được xác định trong chính ứng dụng.

Nếu bạn quyết định sử dụng phương pháp này, bạn sẽ đặt các tệp nguồn chính trong Thư viện dự án và tạo dự án riêng cho từng ứng dụng bạn muốn sản xuất, mỗi ứng dụng sẽ tham chiếu Thư viện dự án. Tệp kê khai của Thư viện dự án sẽ bị ghi đè bởi tệp kê khai của bất kỳ dự án nào đang được tạo bằng Thư viện đó (thực tế, tôi nghĩ rằng tệp kê khai của Thư viện dự án hoàn toàn bị bỏ qua, không chỉ ghi đè, nhưng dù sao cũng hữu ích khi tạo tệp kê khai cho Thư viện, để bạn có thể tạo mẫu - sao chép và chỉnh sửa theo cách thủ công - tệp kê khai của từng dự án sử dụng nó từ tệp kê khai riêng của Thư viện).

Tôi đã sử dụng cách tiếp cận này để tạo nhiều ứng dụng android có cùng một số tính năng giống nhau và nó đã hoạt động rất tốt đối với tôi.

Về đặt tên gói, bất kỳ tên gói cũ nào sẽ hoạt động cho dự án thư viện, nhưng tất nhiên là sử dụng cùng một tiền tố cho gói của Dự án thư viện khi bạn sử dụng cho các cá nhân khác nhau của bạn trả tiền) ứng dụng sử dụng nó, với một cái gì đó như ". Thư viện" như là phần cuối cùng của tên, trong khi các ứng dụng khác nhau có thể có kết thúc như ".myappfree" và ".myapppaid". Đương nhiên, bạn sẽ muốn sử dụng quy ước tên miền ngược của bạn cho tiền tố gói của thư viện để ngăn xung đột, giống như bạn làm cho tên gói của ứng dụng được phát hành.

Trong Windows, một thoải mái, mã nguồn mở công cụ để so sánh các căn cứ code đang WinMerge:

http://winmerge.org/

Nếu tôi ở vị trí của bạn, tuy nhiên, tôi sẽ chỉ sử dụng công cụ này để tự xác định sự khác biệt, và sẽ không cố gắng sử dụng nó để tự động hóa việc tái cấu trúc mã của bạn thành một Dự án Thư viện. Điều đó sẽ được thực hiện tốt nhất dưới sự kiểm soát của riêng bạn (thủ công).

Cuối cùng, thay vào đó, bạn có thể cân nhắc sử dụng một ứng dụng miễn phí và có khả năng của ứng dụng miễn phí theo mặc định, với tùy chọn nâng cấp lên khả năng của ứng dụng đầy đủ (được phân phối trong cùng một APK) thanh toán bằng ứng dụng, thay vì có các ứng dụng miễn phí và trả phí riêng biệt. Thanh toán trong ứng dụng đã được cải thiện rất nhiều trong vài tháng qua (với việc phát hành phiên bản 3 của IAB), và mặc dù vẫn còn một số trục trặc, chúng đã trở thành một sự thay thế thực tế hơn cho sự phân đôi miễn phí/đầy đủ hơn Đầu tiên.

Các vấn đề liên quan