相关疑难解决方法(0)

从相同的代码创建应用程序的免费/付费版本

所以我要下载我的申请的发布时间.我们计划发布两个版本,一个免费的基于广告的播放解锁版本和一个付费完全解锁版本.我设置了代码,我可以在启动时设置一个标志来启用/禁用广告并锁定/解锁所有功能.因此字面上只有一行代码在这些版本之间执行不同.

为了发布两个单独的应用程序,它们需要不同的包名称,所以我的问题是:是否有一种简单的方法来重构我的应用程序的包名称?Eclipse的重构工具无法解析生成的R文件或布局和清单文件中的任何XML引用.我试图使用原始资源创建一个新项目,但我无法引用资产和资源,我希望避免重复我的任何代码和资产.手动重构它不是一个巨大的痛苦,但我觉得必须有一个更好的方法来做到这一点.有人有一个优雅的解决方案吗?

编辑/回答:

对于我的情况,我发现只使用Project - > Android Tools - > Rename Application Package是完全可以接受的.我不知道这存在,我觉得现在发布这个就是个白痴.感谢大家的回答和评论,请随意投票.

android

53
推荐指数
4
解决办法
3万
查看次数

可以在FileProvider中使用多个权限吗?

背景

我维护一个库,其核心功能包括以编程方式捕获的屏幕截图与外部电子邮件应用程序共享.

我用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

34
推荐指数
1
解决办法
1万
查看次数

Android - 在应用项目中拥有提供商权限

一个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

17
推荐指数
2
解决办法
8117
查看次数

批量发布Android应用程序

我们有几个应用程序在布局和代码上非常相似.唯一的区别是我们将切换图形元素,并对单个常量文件和字符串文件进行更改.当然,这有几个问题 - 第一个是命名空间.拥有相同名称空间的应用程序将覆盖任何其他应用程序.

这样做有什么建议?目前我们的namesapce是:com.company.appname我想我可以这样做:com.company.appname.appversion

我已经看到有关蚂蚁脚本的帖子有助于此,但我想知道现在是否有更流畅的解决方案.

android android-manifest android-build

12
推荐指数
1
解决办法
8073
查看次数

共享内容提供商

我的应用程序有两个版本,一个是免费版和专业版,而应用程序数据的内容提供程序需要在两者之间共享.

它的设计应牢记以下几点

  • 任何版本创建的数据应立即在其他版本中可见
  • 据我所知,专业版和免费版都无法在清单文件中声明相同的内容提供者
  • 记住最后一点,我需要为免费版和专业版创建单独的提供程序

可能的解决方案:

  • 创建两个内容提供程序,一个由免费版本创建,另一个由专业版本创建
  • 首次启动专业版时,如果免费版中有任何数据,请将其复制到专业版
  • 无论何时以免费版或专业版编写任何数据,我都应检查内容提供商的其他版本是否存在,如果存在,则写入内容提供商
  • 将android:protectionLevel属性设置为"signature",以便两个版本都可以访问两个Content Providers

如果这有意义,请告诉我,并遵循共享内容提供商的最佳做法.分享任何其他方式这样做.

android android-contentprovider

9
推荐指数
1
解决办法
2219
查看次数

Android重复提供商权限问题

我们正在尝试发布一款免费广告的付费广告版本,该应用目前免费发布广告.我们重构了所有包名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市场下载,我们会收到"重复的提供商权限"错误消息.

我们缺少什么?还有另一个地方我们需要寻找问题,还是我们在这里遇到了根本错误的问题?

android android-contentprovider google-play

7
推荐指数
1
解决办法
3万
查看次数