我们正在尝试发布一个无广告的休闲应用程序的付费版本,该应用程序目前是免费发布的。我们将所有的包名称重构为com.mycompanyname.appname.pro,市场上的免费包在最后基本上没有.pro。我们还进入了我们的内容提供商,并将权限更改为与包名相同。所以“免费版”有
AUTHORITY = "com.mycompanyname.appname" 而“无广告付费版”
AUTHORITY = "com.mycompanyname.appname.pro" 但是我们仍然无法在同一设备上同时安装免费版和"pro“版。无论如何,在这两个应用程序中,提供程序的类名是相同的。
我们不能直接从apk上安装,如果我们尝试从Android market下载,我们会得到一个"duplicate provider authority“错误信息。
我们遗漏了什么?有没有其他地方我们需要寻找问题,或者我们在这里有什么根本的错误吗?
发布于 2012-10-19 04:44:39
基本上,我所做的是,为我的每个ContentProviders创建一个抽象基类,并为我想要创建的每个应用程序继承它,覆盖权限路径。所以在我的AbstractContentProvider中,我有:
public AbstractContentProvider() {
sURIMatcher.addURI(getAuthority(), BASE_PATH, ITEMS);
sURIMatcher.addURI(getAuthority(), BASE_PATH + "/#", ITEM_ID);
}
protected abstract String getAuthority();然后在每个子类中,我有:
private static final String AUTHORITY = "my.package.app1.ContentProvider";
@Override
protected String getAuthority() {
return AUTHORITY;
}在AndroidManifest中,我将这些注册为:
<provider
android:name="my.package.app1.ContentProvider"
android:authorities="my.package.app1.ContentProvider">
</provider>现在的诀窍是,我想要访问这些公共(库)代码中的内容提供者,这些代码不知道应用程序特定的类。为此,我在strings.xml中定义了一个字符串,为每个应用程序覆盖该字符串。然后我可以使用:
Uri.parse(getString(R.string.contentProviderUri))在每个应用程序中,正确的ContentProvider都会被使用,没有任何冲突。所以基本上是使用配置机制来进行依赖注入。
发布于 2014-01-11 19:22:51
假设你的库包是com.android.app.library免费包是com.android.app.free付费包是com.android.app.paid
在你的免费项目和付费项目中,在一个包中创建一个相同的文件,这个包可以是任何东西,但必须是相同的。
示例:
使用com.android.app.data
public class Authority {
public static final String CONTENT\_AUTHORITY = "YOUR PROVIDER";
对于付费版本,请记住保持包名和类名相同。
现在,在您的契约文件中,在库中使用以下内容:
public static String AUTHORITY = initAuthority();
private static String initAuthority() {
String authority = "something.went.wrong.if.this.is.used";
try {
ClassLoader loader = Contract.class.getClassLoader();
Class<?> clz = loader.loadClass("com.android.app.data.Authority");
Field declaredField = clz.getDeclaredField("CONTENT_AUTHORITY");
authority = declaredField.get(null).toString();
} catch (ClassNotFoundException e) {}
catch (NoSuchFieldException e) {}
catch (IllegalArgumentException e) {
} catch (IllegalAccessException e) {
}
return authority;
}
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY);现在,您应该能够使用两个权限。
来源: Ian Warick Android - Having Provider authority in the app project
发布于 2016-02-10 13:33:30
谷歌默认会在你的应用中添加应用测量提供商,因此在build.gradle文件中,你需要在安卓标签exaple defaultConfig下定义applicationID { applicationId "com.example.my.app" minSdkVersion 15 targetSdkVersion 19 versionCode 1 versionName "1.0“}
https://stackoverflow.com/questions/6420130
复制相似问题