Android - 同一个应用的多个自定义版本

Ulr*_*ler 47 automation android

什么是部署Android应用程序的多个自定义版本的最佳方式?

目前我有一个脚本来交换资源文件夹以获取我的应用程序的自定义版本.它工作得很好,但所有自定义版本在AndroidManifest.xml中仍然具有相同的包名称.因此,无法同时安装两个自定义版本的应用程序.

这是解决此问题的一种方法,但必须手动完成

您能想到一个更简单的解决方案,或者如何将其纳入skript?

(顺便说一句:它不适用于色情/垃圾邮件/任何应用程序,甚至不是付费应用程序)

lar*_*am1 24

也许内置的Android"库"概念在原始帖子时尚未完全出炉,但它可能是2011年的首选方法.请按照以下步骤进行ant构建:

从一个正在运行的应用程序开始(让我们将其命名为"myOrigApp",包com.foo.myapp),只需将此行添加到"default.properties"以使其成为库:

android.library=true
Run Code Online (Sandbox Code Playgroud)

现在以您喜欢的任何方式在兄弟目录中创建一个新的应用程序(让我们称之为"sibling"目录,包com.foo.myVariant).例如,使用Intellij Idea,从头开始创建一个带有目录'sibling'的项目,它将创建您通常需要的所有文件/目录.

在新的兄弟目录中编辑"default.properties"以添加依赖项:

android.library.reference.1=../myOrigApp
Run Code Online (Sandbox Code Playgroud)

从原始目录复制清单:

cd sibling
cp ../myOrigApp/AndroidManifest.xml  ../myOrigApp/local.properties ../myOrigApp/build.properties  .
Run Code Online (Sandbox Code Playgroud)

编辑复制的Manifest文件,将其包名更改为新变种"com.foo.myVarient"; 这是唯一的变化.

如果你只是运行ant构建脚本,你可能会完成.(我不得不设置签名密钥.)

如果要设置像Idea这样的IDE以使库项目作为变体项目的依赖项,请按照以下步骤将库项目添加到变体项目中(假设您已经为两者设置了项目):

  • 打开原始项目,调出项目设置,选择您的构面并选中"Is Library Project"并保存.
  • 打开变体项目,调出项目设置,选择模块
  • 添加模块
  • 选择"导入现有模块"
  • 浏览到原始目录(myOrigApp)并选择其.iml文件(IntelliJ项目源文件)
  • 单击"完成".(库项目作为变量项目中的模块添加.)
  • 在模块列表中,单击Variant项目以选择它.
  • 在右侧选择"依赖关系"选项卡.
  • 点击"添加..."
  • 选择"模块依赖关系..."(应显示一个列表,其中包含您之前添加到项目中的模块/库的名称 - 可能是列表中的唯一条目).
  • 选择您添加的库项目,然后按确定.(它将被添加到项目的依赖项列表中.)
  • 按"确定"完成项目配置.(您应该看到2个模块,库的资源和类可用并在Variant项目中识别.)

  • 我相信这种方法有一个主要的限制,因为如果你在主应用程序中使用资源或其他类型(?)的资源,当你把它变成一个jar库时,它们将无法用于试图使用图书馆.如果您只是想共享代码和/或布局,没问题.但是,如果你的应用程序使用资产,那么我认为这会破坏(没有一些自定义的aapt构建脚本). (2认同)

Pra*_*ast 6

我对类似的事情所做的就是使用antlib任务,然后浏览所有java和xml文件,将旧的包字符串替换为新的包字符串.根据包,文件是否在正确的src路径中并不重要.只是对所有文件进行正则表达式替换就足以让我完成这项工作......

例如,在src目录下的所有java文件中替换它:

 <replaceregexp flags="g" byline="false">
    <regexp pattern="old.package.string" /> 
    <substitution expression="new.package.string" />
    <fileset dir="src" includes="**/*.java" /> 
 </replaceregexp>
Run Code Online (Sandbox Code Playgroud)


cra*_*ned 6

肯定希望在Android Studio上使用原生,甚至鼓励使用的Gradle风味.

它似乎很好地解释了所有的基础知识.我刚刚完成转换到Gradle今天,它运作良好.自定义应用程序图标,名称和字符串等.

正如网站所解释的那样,这个设计背后的部分目的是让它更具动态性,更容易让用基本相同的代码创建多个APK,这听起来与你正在做的类似.

我可能没有解释它最好,但该网站做得很好.