所以我要下载我的申请的发布时间.我们计划发布两个版本,一个免费的基于广告的播放解锁版本和一个付费完全解锁版本.我设置了代码,我可以在启动时设置一个标志来启用/禁用广告并锁定/解锁所有功能.因此字面上只有一行代码在这些版本之间执行不同.
为了发布两个单独的应用程序,它们需要不同的包名称,所以我的问题是:是否有一种简单的方法来重构我的应用程序的包名称?Eclipse的重构工具无法解析生成的R文件或布局和清单文件中的任何XML引用.我试图使用原始资源创建一个新项目,但我无法引用资产和资源,我希望避免重复我的任何代码和资产.手动重构它不是一个巨大的痛苦,但我觉得必须有一个更好的方法来做到这一点.有人有一个优雅的解决方案吗?
编辑/回答:
对于我的情况,我发现只使用Project - > Android Tools - > Rename Application Package是完全可以接受的.我不知道这存在,我觉得现在发布这个就是个白痴.感谢大家的回答和评论,请随意投票.
我维护一个库,其核心功能包括以编程方式捕获的屏幕截图与外部电子邮件应用程序共享.
我用a FileProvider来完成这个,这意味着我的库的清单包含一个<provider>标签:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.bugshaker.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
Run Code Online (Sandbox Code Playgroud)
filepaths.xml 定义如下:
<paths>
<files-path path="bug-reports/" name="bug-reports" />
</paths>
Run Code Online (Sandbox Code Playgroud)
我的库的消费者有一个应用程序,它本身使用a FileProvider来共享文件.我的期望是,如果使用应用程序使用以下清单<provider>标记,则应该可以允许两个提供程序共享文件:
<provider
android:authorities="${applicationId}.fileprovider;${applicationId}.bugshaker.fileprovider"
android:exported="false"
android:grantUriPermissions="true"
android:name="android.support.v4.content.FileProvider"
tools:replace="android:authorities">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"
tools:replace="android:resource" />
</provider>
Run Code Online (Sandbox Code Playgroud)
这个清单条目:
Provider权限${applicationId}.fileprovider(用于应用程序文件共享)和${applicationId}.bugshaker.fileprovider(用于库文件共享);filepaths.xml,其中包含应用程序生成的文件和库生成的文件的单独目录定义:<paths>
<external-path
name="redacted"
path="" />
<files-path
name="bug-reports"
path="bug-reports/" />
</paths>
Run Code Online (Sandbox Code Playgroud)
构建应用程序后,我们已确认生成的清单已使用这些更新的值替换了正确的节点.
但是,当使用此配置的应用程序组装(成功)并运行时,我们会看到启动时崩溃:
E: FATAL EXCEPTION: main
Process: com.stkent.bugshakertest, PID: 11636
java.lang.RuntimeException: Unable to …Run Code Online (Sandbox Code Playgroud) android android-manifest android-contentprovider manifest-merging
一个android库项目包含一些提供程序,其权限在合同类中定义如下:
public static final String CONTENT_AUTHORITY = "my.com.library.providers.tester";
private static final Uri BASE_CONTENT_URI = Uri.parse("content://" + CONTENT_AUTHORITY);
Run Code Online (Sandbox Code Playgroud)
现在有很多应用程序项目使用这个库项目.我目前面临的问题是,对于每个应用程序项目,我需要在库项目中为每个应用程序设置一个单独的分支,以便拥有唯一的内容权限.这会产生一些版本管理问题(例如将功能/错误修复从一个分支传播到每个其他分支等).相反,我想将定义内容权限的责任委托给app项目.有没有办法实现这个目标?
java android authority android-contentprovider android-library
我们有几个应用程序在布局和代码上非常相似.唯一的区别是我们将切换图形元素,并对单个常量文件和字符串文件进行更改.当然,这有几个问题 - 第一个是命名空间.拥有相同名称空间的应用程序将覆盖任何其他应用程序.
这样做有什么建议?目前我们的namesapce是:com.company.appname我想我可以这样做:com.company.appname.appversion
我已经看到有关蚂蚁脚本的帖子有助于此,但我想知道现在是否有更流畅的解决方案.
我的应用程序有两个版本,一个是免费版和专业版,而应用程序数据的内容提供程序需要在两者之间共享.
它的设计应牢记以下几点
可能的解决方案:
如果这有意义,请告诉我,并遵循共享内容提供商的最佳做法.分享任何其他方式这样做.
我们正在尝试发布一款免费广告的付费广告版本,该应用目前免费发布广告.我们重构了所有包名com.mycompanyname.appname.pro,基本上市场上的免费包没有.pro.我们也进入了内容提供商,并将权限更改为与包名相同.所以"免费版"有
AUTHORITY = "com.mycompanyname.appname"
Run Code Online (Sandbox Code Playgroud)
并且"无广告付费版本有
AUTHORITY = "com.mycompanyname.appname.pro"
Run Code Online (Sandbox Code Playgroud)
但是我们仍然无法在同一设备上同时安装免费版和"专业版".无论它的价值如何,提供商的类名在两个应用程序中都是相同的.
我们无法直接从apk安装,如果我们尝试从Android市场下载,我们会收到"重复的提供商权限"错误消息.
我们缺少什么?还有另一个地方我们需要寻找问题,还是我们在这里遇到了根本错误的问题?