2012-04-18 38 views
5

Tôi có một ứng dụng trả tiền trên thị trường Android, tuy nhiên, tôi muốn phát hành một phiên bản quảng cáo miễn phí hỗ trợ.Cách giữ phiên bản miễn phí/trả phí của ứng dụng riêng biệt trong subversion

Cách dễ nhất tôi nghĩ để làm điều này là thiết lập chi nhánh trên kho lưu trữ lật đổ của tôi có mã bổ sung để thêm quảng cáo. Tuy nhiên, khi tôi gửi nó đến thị trường Android, họ yêu cầu tên gói duy nhất. Giải pháp này không còn hoạt động cho tôi vì tôi phải thay đổi gói của mọi tệp lớp, điều này sẽ làm cho việc sáp nhập nhánh và nhánh rất đau đớn.

Cách tốt nhất để tôi có thể giữ hai dự án này lại với nhau, chia sẻ các bản vá lỗi, nhưng với một gói khác?

+2

Tôi không chắc chắn tại sao mọi người bỏ phiếu cho chủ đề này. Đây rõ ràng là một câu hỏi về cấu trúc dự án và quản lý cấu hình, cả hai đều thuộc về đây. –

Trả lời

3

Nếu bạn thực sự muốn tách biệt, cách tốt nhất là thiết lập hai phần của cùng một kho lưu trữ. Bằng cách đó bạn có thể ít nhất hợp nhất các thay đổi trên các nhánh khác nhau. Nếu bạn muốn giữ những thứ hoàn toàn riêng biệt thì bạn sẽ làm rất nhiều tập tin vá lỗi.

Tôi đã thực hiện điều này và thẳng thắn đó không phải là một chiến lược tuyệt vời trong thực tế. Tốt hơn nhiều, đặc biệt là trong môi trường biên dịch, là có một quá trình xây dựng riêng biệt miễn phí so với trả tiền để có một codebase thay vì hai. Nếu có hai mã cơ sở, thì mọi thứ sẽ phân kỳ.

+0

Đó là điều, tôi không muốn chúng tách biệt. Điều duy nhất riêng biệt mà tôi muốn là mã bổ sung thêm quảng cáo. Tuy nhiên, android buộc tôi phải có tên gói duy nhất cho ứng dụng của mình. Vì vậy, tôi buộc phải có một sự thay đổi lớn hơn chỉ hai hoặc ba tập tin. – Malfist

+0

Có lẽ, một ít tiền biên dịch voodo cũng nên hoạt động. Xây dựng hệ thống là những điều tuyệt vời. –

8

Bạn đã xem xét chỉ thị trình biên dịch?

Ví dụ:

#define FREE 
// ... 
#if FREE 
Console.WriteLine("Free version"); 
#else 
Console.WriteLine("Paid version"); 
#endif 

Bạn có thể giữ các cơ sở mã cùng chính xác và nhắm mục tiêu hai được xây dựng sử dụng hai kịch bản xây dựng riêng biệt hoặc một parametrable.

msbuild /p:DefineConstants=FREE 

Để làm điều đó với Java, hãy đọc thisthis. Và có thể là this.

+0

Tôi không nghĩ Java đã nghe những điều đó – Malfist

+0

Nó cũng tồn tại trong Java. –

+0

@ Pierre303 Tôi xin lỗi, tôi không biết bạn có thể làm điều đó. Nó vẫn không giải quyết vấn đề gói mặc dù .... hmmm. –

0

Kiểm soát phiên bản là cách quản lý kém những thứ như thế này. Bạn sẽ kết thúc với một cơn ác mộng bảo trì - hai ứng dụng riêng biệt cần phải là gần như giống hệt nhau.

Bạn đã xem xét giải pháp nhiều dự án chưa? (caveot: Tôi đã không thực sự làm điều này, nhưng nó có vẻ khả thi, và tôi nghĩ rằng Android sẽ cho phép nó. Tôi sẽ thử nó sau này và xem chắc chắn.) Biên dịch tất cả mã ứng dụng của bạn thành một dự án chính jar. Sau đó, tạo hai ứng dụng Android riêng biệt, một cho phiên bản trả tiền của bạn và một cho phiên bản miễn phí. Điều này sẽ giải quyết vấn đề đặt tên gói của bạn. Các ứng dụng này sẽ chỉ ủy quyền cho jar chính cho mọi thứ, ngoại trừ phiên bản quảng cáo của bạn sẽ bao gồm mã để hỗ trợ quảng cáo.

Bạn cũng có thể tìm thấy this discussion on a similar topic thú vị.

5

Chỉ gói ứng dụng của bạn phải là duy nhất. Xem here. Đó là gói được khai báo trong tệp kê khai của bạn. Bạn có thể có hầu hết mã của mình trong com.mydomain.myapp và chỉ có một hoạt động chính khác trong com.mydomain.myapp.free.

0

Xây dựng ứng dụng của bạn bằng cách sử dụng feature toggle sẽ cho phép bạn đạt được mục tiêu của mình nhưng bạn có thể phải làm lại rất nhiều mã.

Bằng cách xác định 2 (Tôi sẽ recommand 3) tính năng môi trường vùng chứa trong a.tập tin này như:

[paid] 
features.ads = false 
features.featureOne = true 
features.featureTwo = true 
features.premiumFeature = true 
features.underDevFeature = false 
features.debug = false; 

[free:paid] 
features.ads = true 
features.premiumFeature = false 

; And the optionnal third 
[development:paid] 
features.debug = true 
features.underDevFeature = true 

Bằng cách này, bạn có một phiên bản rằng đó là thống nhất và đòi hỏi chỉ có một chi nhánh tại nguồn điều khiển phiên bản của bạn

Trong kịch bản cụ thể của bạn thì bạn phải kiểm tra xem tính năng được ủy quyền , nếu không, bạn không hiển thị nó

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