看了这篇文章,想到了同样的问题- One code base, two applications on Android
我创建了一个应用程序 testApp,其中包含 topics、splash screens、logo、图表、规则、状态和/或事件。
现在,我想要来自同一代码库的不同应用程序(testApp_USA、testApp_Canada、testApp_Australia)并将它们放在 Google Play 商店中,这样如果用户下载了应用程序,例如 testApp_USA,那么应该只显示该地区的特定项目,例如美国的启动画面、美国 Logo 等。
所以我想根据国家配置多个应用,然后根据用户下载的应用将项目设置为默认。
目前,我有一个适用于所有地区的单一应用程序,我施加了多个条件来根据地区区分或更改项目。
例如:
(在很多 Java 文件中,我使用)
if(rule.contains("USA"))
{
//Show splash screen of USA
}
(类似的,在很多Java文件中,我用)
if(rule.contains("Australia"))
{
//Show splash screen of Australia
}
这只是众多重复代码中的一项。考虑到所有,它会更多。
应该有更好的方法在 android 中创建具有不同名称和设置的多个应用程序。
我知道,iOS 允许我轻松更改应用程序名称和配置文件以允许创建多个应用程序。但我不知道,或者这在 Android 代码上不容易做到。
我的问题:
是否可以在具有不同项目设置的 android 中创建具有相同源代码的不同应用程序并将它们发布到 Google Play 商店?如果YES,如何设置这样的配置?
更新:
阅读这篇文章 - multiple-android-application-package-apk-files-from-single-source-code
然后我想到了同样的想法-
1) 获取一些字符串变量,其中包含有关您要创建的应用程序类型的值。
public static final String app_Name = "testApp_CANADA" ;
2) 有多个 AndroidManifest.xml 文件用于您需要为其创建 .apk 的多个应用。
3) 为每个 list 创建相应的启动器 Activity 。
但是如何在单个应用程序中拥有多个 AndroidManifest.xml 文件?
更新:
我的第一个 AndroidManifest.xml 像往常一样位于 main project 文件夹(应用程序根文件夹)中。为 testApp_USA 考虑这一点。
我的第二个 AndroidManifest.xml 在 main project 下的separate package 中。为 testApp_CANADA 考虑这一点。
AndroidManifest.xml 都有不同的启动器 Activity ,带有相应的初始屏幕,定义了图标。两者的包名称不同,因此它们将根据要求创建不同的 .apk 文件。
现在,如果我的主应用有设置,如何在 testApp_USA/testApp_CANADA 之间切换代码:
public static final String app_Name = "testApp_CANADA" ;
或
更清楚,
如何根据app_Name的值调用特定的AndroidManifest.xml?
根据我目前的设置,总是只调用第一个 AndroidManifest.xml。
最佳答案
我在将项目转换到不同市场(Google Play、三星、亚马逊)时遇到了类似的问题。所有代码库都是相同的,区别仅在于计费代码。
我找到的最佳解决方案是为每个市场创建单独的项目并将通用代码推送到库项目中。
更详细地说,您需要将公共(public)代码留在主项目中,使其成为库项目,并为库和子项目启用 list 合并。 将以下行添加到主项目的 project.properties:
android.library=true
manifestmerger.enabled=true
以及每个子项目的 project.properties:
android.library.reference.1=../testApp //absolute or relative path to your main project
manifestmerger.enabled=true
您还需要将主项目作为 ADT 插件中的库(在 Eclipse - 项目属性 -> Android 中)附加到所有子项目。 主项目 list 不应包含任何启动器 Activity ,它会被忽略,与 appWidget xml 和配置 Activity 相同,如果有的话。
在子项目中,您可以根据需要配置任何内容,并通过扩展或仅使用所需的类作为普通 Java 库来使用主要代码。此外,您可以像在子项目中一样使用主项目 Activity 、服务、广播接收器等,而无需重复子项目 list 。 所有配置完成后,您可以像通常的单个项目一样为所需的国家/地区构建所需的项目,并且您可以根据需要为不同的国家/地区提供不同的 apk。
这是 list 合并的更多详细描述 http://www.platoevolved.com/blog/programming/android/merging-android-manifest-files/
请注意,此功能是在 ADT 版本 20 预览版 3 中添加的。
希望这对您有所帮助。
关于android - 同一代码库具有不同名称的多个应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19006793/
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl
我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序