Если я правильно понимаю вашу проблему, вы хотите создать несколько приложений Android, которые похожи друг на друга (т. Е. Имеют много одинакового исходного кода), но которые отличаются в определенных (второстепенных) отношениях, и вы хотитеКаждое из этих приложений должно иметь отдельный пакет, чтобы его можно было отдельно загружать и распространять в магазине приложений, таком как Google Play.Библиотека проектов - превосходное средство для достижения этих целей.
Я предполагаю, что различия между вашими различными версиями незначительны, включают такие вещи, как ресурсы, имя приложения и пакет, а также переключатель, который включает определенныефункции для платной версии, оставляя их для бесплатной версии.
Даже если это не так, при использовании полиморфизма способами, описанными ниже, ваши различные приложения могут существенно различаться и по-прежнему использовать общую библиотеку проектов.
Библиотека проектов может бытьопределяется в Eclipse так же, как может быть определен любой проект Android, но он помечен как библиотека проекта (отметив флажок «Библиотека» в нижней части страницы Android в диалоговом окне «Свойства проекта» библиотеки) и не может быть скомпилировани бежать самостоятельно.Вместо этого он предназначен для включения по ссылке в один или несколько других проектов, которые являются реальными приложениями (путем добавления ссылки на него на странице Android в диалоговом окне «Свойства проекта» каждого такого приложения).Эти приложения будут использовать библиотеку проектов и, таким образом, будут делиться своим кодом и возможностями.
Каждое такое ссылочное приложение будет иметь свой собственный файл манифеста (где могут быть объявлены их соответствующие различные пакеты), и они также могут определятьих собственные классы (включая классы, производные от классов Activity и / или Application из библиотеки Project), так что эти классы могут быть полиморфно специализированы для каждого приложения, использующего библиотеку Project (например, путем переопределения методов или предоставления определений для методов, которыеопределены как абстрактные в классах Project или Application-based библиотеки проекта, хотя вы также можете использовать эти классы библиотеки без изменений (при условии, что они не являются абстрактными), просто ссылаясь на них в файле манифеста (например, в операции илитег приложения) каждого приложения, которое использует библиотеку, так же, как вы бы ссылались на классы Activity или производные от приложения классы, определенные в самом приложении.
Если вы решили использовать этоподход, то вы поместите свои основные исходные файлы в библиотеку проектов и создадите отдельный проект для каждого приложения, которое вы хотите создать, каждое из которых будет ссылаться на библиотеку проекта.Файл манифеста библиотеки проекта будет переопределен манифестом любого проекта, создаваемого с использованием этой библиотеки (на самом деле, я думаю, что собственный манифест библиотеки проекта полностью игнорируется, а не просто переопределяется, но, тем не менее, полезно создать манифестдля библиотеки, так что вы можете вручную шаблонировать - копировать и редактировать - манифест каждого проекта, который использует его из собственного манифеста библиотеки).
Я использовал этот подход для создания нескольких приложений Android, которые совместно используют некоторые изте же возможности, и он работал очень хорошо для меня.
Что касается именования пакетов, любое старое имя пакета будет работать для проекта библиотеки, но, конечно, имеет смысл использовать то же самоепрефикс для пакета библиотечного проекта, который вы используете для своих отдельных (например, бесплатных и платных) приложений, которые его используют, с чем-то вроде «.library» в качестве последней части имени, в то время как различные приложения могут иметь такие окончания, как «.myappfree "и" .myapppaid ".Естественно, вы захотите использовать соглашение об обратном доменном имени для префикса пакета библиотеки, чтобы предотвратить конфликты, так же, как и для имени пакета выпущенного приложения.
В Windows - хороший инструмент с открытым исходным кодом.для сравнения кодовых баз есть WinMerge:
http://winmerge.org/
Однако, если бы вы были на вашем месте, я бы использовал этот инструмент только для ручной идентификации различий и не пытался бы использовать его для автоматизации рефакторинга вашего кода в библиотечный проект.Это лучше всего сделать под собственным (ручным) контролем.
Наконец, в качестве альтернативы, вы можете рассмотреть возможность использования одного бесплатного приложения, которое по умолчанию имеет возможности вашего бесплатного приложения, с возможностью обновления.к полным возможностям вашего приложения (поставляется в одном и том же APK) через платеж внутри приложения, а не через отдельные бесплатные и платные приложения.Платежи в приложениях значительно улучшились за последние несколько месяцев (с выпуском версии 3 IAB), и хотя некоторые глюки все еще существуют, они стали более практичной альтернативой дихотомии free / full, чем были впервый.