androidstudio2变种多个apk

时间:2016-06-29 18:30:36

标签: android android-studio gradle android-gradle build.gradle

我希望基于相同的源有多个apk文件,因此我可以在我的设备上安装工作和开发版本。我认为构建变体和风格会给我这个,但我所看到的是,当我选择一个变体时,替换另一个变体的apk文件。我已将此添加到app build.gradle文件中,我的构建变体窗口允许我选择phoneDebug或tabletDebug。

productFlavors {
    phone {
        applicationId "com.ebookfrenzy.builddemo.app.phone"
        versionName "1.0-phone"
    }
    tablet {
        applicationId "com.ebookfrenzy.builddemo.app.tablet"
        versionName "1.0-tablet"
    }
}

我在app / src下创建了名为tablet / res / values和phone / res / values的目录,每个目录中都有不同的strings.xml文件,我的布局xml文件引用了每个字符串文件中不同的字符串hello_world。所有这些都有效:当我选择phoneDebug或者TabletDebug变体时,我会得到相应的hello字符串。
我在构建目录中看到app-tablet-debug-unaligned.apk或app-phone-debug-unaligned.apk,具体取决于我选择的变体。但是当我选择一个变体时,另一个变量消失了 当我运行一个变种时,apk显然安装在另一个变量上 - 至少在我的设备上的应用程序中只安装了一个BuildDemo。
如何在我的设备上安装单独的phoneDebug和tabletDebug apks?
谢谢。
Steve S.。

4 个答案:

答案 0 :(得分:1)

要获得不同的变体或风格以生成单独的应用程序(如Android操作系统所示),您将需要不同的applicationIds。对于手机和平板电脑,你有不同的想法。进一步的步骤是为每个构建变体添加不同的后缀(例如Debug)

buildTypes {
    release {
    }
    debug {
        applicationIdSuffix ".debug"
    }
}

然后分别为您的“手机”风格生成“com.ebookfrenzy.builddemo.app.phone”和“com.ebookfrenzy.builddemo.app.phone.debug”for Release和Debug版本

答案 1 :(得分:0)

Android使用AndroidManifest.xml中定义的包名称,AndroidStudio使用build.prop(模块应用程序)来识别它是否是同一个应用程序。 如果你想拥有相同的" app两次安装,唯一的办法就是更改包名。然后Android认为它是一个不同的应用程序,否则Android将始终像你所描述的那样覆盖它

答案 2 :(得分:0)

我认为你需要的是在gradle构建版本中定义不同的applicationIdHere就是这样做的方式。

在我看来,最好将相同的applicationId保持为gradle变量并将其与applicationId后缀连接起来。这样,Id的区别仅在于后缀。

答案 3 :(得分:0)

我会回答我自己的问题,让答案更加突出,希望这会有助于其他人。

这两个应用已经从productFlavors条目中获得了不同的applicationId。有了gradle - 我对改变清单文件以改变我的输出持怀疑态度。它可能会有效,但是在从Eclipse迁移到AndroidStudio的过程中我多次被咬了。

事实证明,我对apk被覆盖的假设是错误的。当我使用Settings-> Device-> Apps查看应用程序时,有两个BuildDemo实例。发射器只显示一个实例。还使用" adb' pm list packages -f builddemo'"给出:

package:/data/app/com.ebookfrenzy.builddemo.app.phone-1.apk=com.ebookfrenzy.builddemo.app.phone
package:/data/app/com.ebookfrenzy.builddemo.app.tablet-1.apk=com.ebookfrenzy.builddemo.app.tablet

我的修复是覆盖每个变体的strings.xml文件中的app_name(在清单文件中引用以设置应用程序标签)。 phone / res / values / strings.xml下的那个现在是BuildDemo.phone,而tablet ...目录下的那个是BuildDemo.tablet。现在,当我打开启动器时,我看到BuildDemo.phone和BuildDemo.tablet。
一如既往,感谢您的建议。他们指出了我的答案。
史蒂夫S。