【问题标题】:How to create multiple apks from one project?如何从一个项目创建多个 apk?
【发布时间】:2012-11-02 19:31:16
【问题描述】:

我有一个需要创建多个 apk 的 android 项目。每个 apk 之间的唯一区别是包名称(例如 com.my.package.name)和应用字符串名称,因此我可以在一台设备上安装应用的多个实例。有没有更好的方法来做到这一点?我想过创建一个库项目,但我认为可能有更简单的方法。

【问题讨论】:

    标签: android apk


    【解决方案1】:

    您可以将您的主要代码放在一个库中并构建多个生成多个 APK 的同级项目:

    我对此进行了测试,结果比我最初想象的要容易得多https://stackoverflow.com/a/9971543/305135

    【讨论】:

      【解决方案2】:

      图书馆项目是这样做的正确方法。您创建并处理库项目,并且每个版本都有一个项目,这取决于库项目。请记住,您需要为每个项目提供正确的 Android 清单。

      【讨论】:

      • 那么如果我在库项目上进行 Ant 构建,它会自动为其他依赖项目生成 apk 吗?
      • 您可以为所有项目创建单个 ant 构建,但我不知道有一个工具可以自动为您执行此“反向依赖构建”。然而,项目的构建几乎相同,所以这不应该产生很多额外的努力。
      • 每个项目都有正确的 Android 清单是什么意思?
      • 嗯,项目从其库项目的清单文件中继承权限、活动、服务、接收器等定义,对您来说似乎是合乎逻辑的(对我来说似乎是合乎逻辑的),但这不是案子。这意味着,您必须为每个项目定义一个“完整”清单文件,如果您需要进行更改,您应该在每个文件中进行更改。此外,请注意活动、服务的限定名称,因为清单文件的默认样式是将它们放在包项目包中(以“.”开头)。
      【解决方案3】:

      您可以试用新的 Android 构建系统。这里有一些链接

      您可以自定义以下属性:

      • minSdkVersion
      • targetSdkVersion
      • 版本代码
      • 版本名称
      • 包名称(覆盖清单中的值)
      • 等等..

      【讨论】:

        【解决方案4】:

        您可以在应用级别的 gradle 中使用 productFlavors。

         flavorDimensions "tier"
            productFlavors {
        
                dev
                        {
                            dimension "tier"
                            buildConfigField "String", "URL", "\"http://glapp/demo.php\""
                            buildConfigField "boolean", "ENABLE_DEBUG", "false"
                            versionName = android.defaultConfig.versionName + " dev"
                            applicationId = "com.abc.glnewapp.dev"
                            resValue "string", "app_name", "GL Demo"
                        }
                prod
                        {
                            dimension "tier"
                            buildConfigField "String", "URL", "\"http://glapp/live.php\""
                            buildConfigField "boolean", "ENABLE_DEBUG", "false"
                            applicationId = "com.abc.glnewapp.prod"
                            resValue "string", "app_name", "GL Live"
                        }
        
            } 
        

        然后选择 build variant 以根据 varient 构建 apk 您可以根据需要放置许多面粉(不同的 apk)。

        您可以通过在 src 目录下的 falour name 文件夹中添加相同的 res 结构来更改应用程序图标和其他可绘制对象。此外,如果您发现任何与 google json 相关的问题,那么只需将 google json 文件复制到 src->productflavor

        欲了解更多信息,请访问at

        【讨论】:

          【解决方案5】:

          您不能以编程方式更改包名称。因此唯一的解决方案是手动更改它并创建 apk

          【讨论】:

            【解决方案6】:

            要更改包名称,您可以这样做:

            您需要复制该项目。右键单击一个,选择“Android工具->重命名应用程序包”

            希望对您有所帮助。

            【讨论】:

            • 我已经在eclipse中做了这个。我宁愿做一些事情来自动化它,而不是改变包名 30 次,然后再构建另一个 apk。
            【解决方案7】:

            我实际上是使用apktool 来反编译apk,然后使用一些Perl 脚本编辑smali 文件来更改包名。

            【讨论】:

            • 嗨!如果我想从同一个源代码(Beta 版)制作不同的 APK,我想知道我应该编辑哪些文件。我无法重命名包名,因为我使用 guice 并且它变得很疯狂:\
            猜你喜欢
            • 2016-11-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-03-22
            • 1970-01-01
            相关资源
            最近更新 更多