Cách giữ phiên bản miễn phí / trả phí của ứng dụng trong lật đổ


8

Tôi có một ứng dụng trả phí trên thị trường Android, tuy nhiên, tôi muốn phát hành phiên bản hỗ trợ quảng cáo miễn phí.

Cách dễ nhất tôi nghĩ để làm điều này là thiết lập một 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ó tới thị trường Android, họ yêu cầu các tên gói duy nhất. Giải pháp này không còn hiệu quả với tôi nữa vì tôi phải thay đổi gói của mỗi tệp lớp, điều này sẽ khiến việc hợp nhất thân cây và nhánh rất đau đớn.

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


1
Chỉ cần lưu ý rằng câu hỏi này không lạc đề ở đây trên Lập trình viên. Các vấn đề chính là về các vấn đề quản lý cấu hình và cấu hình dự án, cả hai đều thuộc về đây (và không phải trên Stack Overflow hoặc bất kỳ trang web nào khác).
Thomas Owens

Câu trả lời:


9

Bạn đã xem xét các chỉ thị biên dịch ?

Thí dụ:

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

Bạn có thể giữ cùng một cơ sở mã chính xác và nhắm mục tiêu hai bản dựng bằng cách sử dụng hai tập lệnh xây dựng riêng biệt hoặc một tập lệnh có thể tham số.

msbuild /p:DefineConstants=FREE

Để làm điều đó với Java, hãy đọc cái nàycái này . Và có lẽ điều này .


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

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

@ 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 được vấn đề gói mặc dù .... hmmm.
Michael K

1
@MichaelK: điều này có thể dễ dàng đạt được với một nhiệm vụ tìm và thay thế được tổ chức tốt trong tập lệnh xây dựng của bạn.

Điều này cũng không giải quyết được vấn đề về tài nguyên có điều kiện trong thư mục / res.
donturner

5

Chỉ gói ứng dụng của bạn phải là duy nhất. Xem ở đây . Đó 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 com.mydomain.myappvà chỉ cần có một hoạt động chính khác com.mydomain.myapp.free.


3

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

Tôi đã làm điều này và thẳng thắn 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 các môi trường được biên dịch, là có một quy trình xây dựng riêng miễn phí so với trả phí để có một cơ sở mã chứ không phải hai. Nếu có hai cơ sở, mọi thứ sẽ phân kỳ.


Đó là điều, tôi không muốn chúng tách rời. Điều duy nhất riêng biệt 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ó một 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 thay đổi lớn hơn chỉ hai hoặc ba tệp.
Malfist

Có lẽ, một chút voodo cũng nên làm việc. Xây dựng hệ thống là những điều tuyệt vời.
Wyatt Barnett

0

Kiểm soát phiên bản là một cách kém để quản lý 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 gần như giống hệt nhau.

Bạn đã xem xét một giải pháp nhiều dự án? (caveot:.. Tôi đã không thực sự làm điều này, nhưng có vẻ như khả thi, và tôi nghĩ rằng Android sẽ cho phép nó tôi sẽ thử nó sau này và xem cho chắc chắn) Biên dịch tất cả các mã ứng dụng của bạn vào 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ả phí 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 hầu hết 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ể thấy cuộc thảo luận này về một chủ đề tương tự thú vị.


Mã này là một phần nhỏ của bức tranh đầy đủ và JARring nó không giúp xử lý tất cả các dữ liệu bổ sung như tài nguyên, bố cục, tài sản, v.v. đi cùng với nó. Rằng bạn không thể thu dọn mọi thứ một cách gọn gàng là một thiếu sót đáng tiếc trong Android và tôi cảm thấy khó chịu khi phải thay đổi những thứ không thay đổi nhiều hoặc có thể được cấu hình từ bên ngoài.
Blrfl

Tôi đồng ý. Họ đã làm rất tốt khi giúp dễ dàng xây dựng các ứng dụng nhỏ nhưng khó xây dựng các ứng dụng lớn cần bảo trì. Có một số giải pháp Maven có vẻ đầy hứa hẹn, nhưng tôi chưa thể khám phá chúng quá nhiều.
Michael K

0

Xây dựng ứng dụng của bạn bằng cách sử dụng feature togglesẽ 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 muốn giới thiệu và 3) tính năng môi trường vùng chứa trong tệp .ini 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 thống nhất và chỉ yêu cầu một nhánh trong nguồn kiểm soát phiên bản của bạn

Trong các tập lệnh cụ thể của bạn, sau đó bạn phải kiểm tra xem tính năng có được cấp phép hay không, nếu không, bạn không hiển thị nó

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.