你好我是一个开始 Android开发人员使用Windows和eclipse IDE开发java android应用程序.我已经发布了一个游戏,但有一个免费版本的游戏和付费版本.谷歌市场坚持认为不同的版本必须有不同的包名.到目前为止,我一直在使用2个不同的名称重构包,并在每次构建不同版本时更改R资源文件导入.两个版本的代码都是99%相同.有更好的方法吗?

解决方法

您对此主题 here和 there进行了各种讨论,但基本上解决方案类似于复制项目.

例如(不基于eclipse):

It is difficult to answer this,since we don’t kNow what the difference is between the free and not-free versions of your app.

I’m going to assume that the differences Could be handled by some sort of global free/not-free flag. By that,I mean that the same code would make up both versions of the app,and which portions are enabled or used would be dependent on some public static data member somewhere:

if (SomeClass.IS_PAID_APP) { 
        // add more stuff to menu,etc. 
}

If you can organize your app that way,then you only need one code base.
Have it set to build your app one way (free or paid,your choice) and with the proper package in your manifest for that version of the app.
Then,add an Ant task that does the following:

  1. Makes a tree copy of your project dir to a temporary location
  2. Switch the copy of the manifest to the new package name via a
    search-and-replace
  3. Switch all import statements for your old package’s edition of R to
    the new package,again via search-and-replace,and again on the copy,
    not your original
  4. Change your IS_PAID_APP (or whatever) to the opposite value
    (search-and-replace in the copy)
  5. Executes an Ant build for the copy of the project
  6. copies the binaries from that build to the main project’s bin/
    directory under a distinct name (so it doesn’t clobber your other copy
    of the APK)
  7. Deletes the tree copy made in step #1

If Java had a pre-processor,this would be somewhat simpler. However,the basic technique that I describe above has been used for a couple of decades Now. It’s clunky,but it works,and it means you only have one set of source code to deal with.
Note that the Ant <replace> task would handle your search-and-replace stuff nicely.

Android和Eclipse 2同一个应用程序的不同版本的更多相关文章

  1. Android和Eclipse 2同一个应用程序的不同版本

    你好我是一个开始Android开发人员使用Windows和eclipseIDE开发javaandroid应用程序.我已经发布了一个游戏,但有一个免费版本的游戏和付费版本.谷歌市场坚持认为不同的版本必须有不同的包名.到目前为止,我一直在使用2个不同的名称重构包,并在每次构建不同版本时更改R资源文件导入.两个版本的代码都是99%相同.有更好的方法吗?

  2. android – 视图寻呼机片段中的子片段在交换后消失

    所以这是一个复杂的问题,但我会尽量让它变得容易.首先,我有一个带有视图寻呼机的主要活动.其中有2个页面,每个页面都有2个操作栏标签.我还有一个抽屉有4个选项,前两个是视图寻呼机中的2个页面,第二个是不是的页面.如果您选择第二个中的一个,我将我的ViewPager配置为用另外两个片段交换片段.所有这些片段都是单例,因此来回切换不会导致任何内存问题.在切换到第二组片段时,其中一个片段中有一个框架,用于

  3. JS正则表达式替换字符串replace()方法实例代码

    正则表达式是用于匹配字符串中字符组合的模式,在js中正则表达式是对象,这篇文章主要给大家介绍了关于JS正则表达式替换字符串replace()方法的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  4. python如何使用replace做多字符替换

    这篇文章主要介绍了python如何使用replace做多字符替换,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  5. Javascript中replace方法与正则表达式的结合使用教程

    replace方法是javascript涉及到正则表达式中较为复杂的一个方法,严格上说应该是string对象的方法,下面这篇文章主要给大家介绍了关于Javascript中replace方法与正则表达式的结合使用的相关资料,需要的朋友可以参考下

  6. 关于JavaScript中string 的replace

    在使用JavaScript对字符串进行处理的时候我们经常会用到replace方法,很简单的一个方法,以前一直不以为意,直到今天看JavaScript语言精粹的时候读到了一个有趣的小例子的时候,并不是十分理解,了解了一下replace的用法才明白,原来replace不像想象中的那么简单

  7. 详解PHP字符串替换str_replace()函数四种用法

    str_replace() 函数以其他字符替换字符串中的一些字符(区分大小写)。本文重点给大家介绍PHP字符串替换str_replace()函数四种用法,感兴趣的朋友一起看看吧

  8. 初学JS的的小例子 javascript replace高亮替换

    JS实现关键字高亮显示a曾经有一份真挚的爱情拜在我面前,明明我却睡着了……

  9. JavaScript replace(rgExp,fn)正则替换的用法

    再看jQuery源码的时候遇到了replace中参数为函数的用法,正好复习一下replace正则替换的用法。

  10. JavaScript字符串对象replace方法实例(用于字符串替换或正则替换)

    这篇文章主要介绍了JavaScript字符串对象replace方法实例,replace方法用于字符串替换,同时支持正则表达式替换,需要的朋友可以参考下

随机推荐

  1. bluetooth-lowenergy – Altbeacon库无法在Android 5.0上运行

    昨天我在Nexus4上获得了Android5.0的更新,并且altbeacon库停止了检测信标.似乎在监视和测距时,didEnterRegion和didRangeBeaconsInRegion都没有被调用.即使RadiusNetworks的Locate应用程序现在表现不同,一旦检测到信标的值,它们就不再得到更新,并且通常看起来好像信标超出了范围.我注意到的一点是,现在在logcat中出现以下行“B

  2. android – react-native动态更改响应者

    我正在使用react-native进行Android开发.我有一个视图,如果用户长按,我想显示一个可以拖动的动画视图.我可以使用PanResponder实现这一点,它工作正常.但我想要做的是当用户长按时,用户应该能够继续相同的触摸/按下并拖动新显示的Animated.View.如果您熟悉Google云端硬盘应用,则它具有类似的功能.当用户长按列表中的任何项目时,它会显示可拖动的项目.用户可以直接拖

  3. android – 是否有可能通过使用与最初使用的证书不同的证书对其进行签名来发布更新的应用程序

    是否可以通过使用与最初使用的证书不同的证书进行签名来发布Android应用程序的更新?我知道当我们尝试将这样的构建上传到市场时,它通常会给出错误消息.但有没有任何出路,比如将其标记为主要版本,指定市场中的某个地方?解决方法不,你不能这样做.证书是一种工具,可确保您是首次上传应用程序的人.所以总是备份密钥库!

  4. 如何检测Android中是否存在麦克风?

    ..所以我想在让用户访问语音输入功能之前检测麦克风是否存在.如何检测设备上是否有麦克风.谢谢.解决方法AndroidAPI参考:hasSystemFeature

  5. Android – 调用GONE然后VISIBLE使视图显示在错误的位置

    我有两个视图,A和B,视图A在视图B上方.当我以编程方式将视图A设置为GONE时,它将消失,并且它正下方的视图将转到视图A的位置.但是,当我再次将相同的视图设置为VISIBLE时,它会在视图B上显示.我不希望这样.我希望视图B回到原来的位置,这是我认为会发生的事情.我怎样才能做到这一点?编辑–代码}这里是XML:解决方法您可以尝试将两个视图放在RelativeLayout中并相对于彼此设置它们的位置.

  6. android – 获得一首歌的流派

    我如何阅读与歌曲相关的流派?我可以读这首歌,但是如何抓住这首歌的流派,它存放在哪里?解决方法检查此代码:

  7. android – 使用textShadow折叠工具栏

    我有一个折叠工具栏的问题,在展开状态我想在文本下面有一个模糊的阴影,我使用这段代码:用:我可以更改textColor,它可以工作,但阴影不起作用.我为阴影尝试了很多不同的值.是否可以为折叠文本投射阴影?

  8. android – 重用arm共享库

    我已经建立了armarm共享库.我有兴趣重用一个函数.我想调用该函数并获得返回值.有可能做这样的事吗?我没有任何头文件.我试过这个Android.mk,我把libtest.so放在/jni和/libs/armeabi,/lib/armeabi中.此时我的cpp文件编译,但现在是什么?我从objdump知道它的名字编辑:我试图用这个android.mk从hello-jni示例中添加prebuild库:它工作,但libtest.so相同的代码显示以下错误(启动时)libtest.so存在于libhello-j

  9. android – 为NumberPicker捕获键盘’Done’

    我有一个AlertDialog只有一些文本,一个NumberPicker,一个OK和一个取消.(我知道,这个对话框还没有做它应该保留暂停和恢复状态的事情.)我想在软键盘或其他IME上执行“完成”操作来关闭对话框,就像按下了“OK”一样,因为只有一个小部件可以编辑.看起来处理IME“Done”的最佳方法通常是在TextView上使用setonEditorActionListener.但我没有任何Te

  10. android – 想要在调用WebChromeClient#onCreateWindow时知道目标URL

    当我点击一个带有target=“_blank”属性的超链接时,会调用WebChromeClient#onCreateWindow,但我找不到新的窗口将打开的新方法?主页url是我唯一能知道的东西?我想根据目标网址更改应用行为.任何帮助表示赞赏,谢谢!

返回
顶部