我按照http://developer.android.com/guide/publishing/licensing.html上的说明进行操作
我制作了<sdk>/market_licensing目录的副本,然后使用Eclipse中的New Project Wizard我从Existing source创建了一个新的Android项目,并将其指向我的market_licensing副本中的library子目录.
我已经检查了market_licensing项目android属性中的"is Library"框.我已将该项目添加为我的应用程序项目中的库项目.它在列表中显示绿色复选标记.
当我保存项目设置并重建时,编译器无法在LVL项目中找到类,当我返回到我的应用程序的项目设置时,库列表中的条目现在有一个红色X而不是绿色复选标记.
我不明白我做错了什么阻止我引用LVL项目.有帮助吗?
编辑:我已经尝试将许可项目添加到我的应用项目的构建路径,然后我能够构建,但当我尝试运行应用程序崩溃,因为它找不到任何库代码.很明显,许可项目的"库"状态未正确设置和/或未在构建时自动注入我的应用项目.
我刚刚在我的应用程序中实现了android服务器检查.我正在使用StrictPolicy方法,因为我可能只是有点苦涩的盗版版本有5倍的下载量作为市场上的版本...无论如何,我基本上逐字逐句地编写了我的源代码.但是,当我将开发人员控制台上的许可证测试响应切换为Licensed时,我会收到未经许可的对话框.但是,在applicationError方法中,调用了dontAllow(),当我对此行进行注释时,未显示未许可的对话框.我究竟做错了什么?这是我的MyLicenseCheckerCallback类.
我在onCreate中调用doCheck,在onResume中再调用doCheck.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mHandler = new Handler();
mLicenseCheckerCallback = new MyLicenseCheckerCallback();
// Construct the LicenseChecker with a Policy.
mChecker = new LicenseChecker(
this, new ServerManagedPolicy(this,
new AESObfuscator(SALT, getPackageName(), deviceId)),
BASE64_PUBLIC_KEY
);
doCheck();
setContentView(R.layout.main);
...
private void doCheck() {
mChecker.checkAccess(mLicenseCheckerCallback);
}
private class MyLicenseCheckerCallback implements LicenseCheckerCallback {
public void allow() {
if (isFinishing()) {
// Don't update UI if Activity is finishing.
return;
}
// Should allow user access.
}
public void dontAllow() {
if …Run Code Online (Sandbox Code Playgroud) 我根据这个设置开发环境和下载LVL部分说"启动Android SDK Manager,然后选择Google Market Licensing包".当我启动SDK并完成加载存储库时,它不会显示Google Market Licensing应用.救命!
它确实显示了Google Play许可库,但Google网站上的说明明确提到了Google Market Licensing包.
我正在使用Google Play许可API测试我的应用.该应用程序成功绑定到许可服务,但回调给出错误6.我已检查LicenseValidator中的错误代码,这不是其中列出的错误代码之一.
有谁知道错误6是什么意思?
public class MyActivity extends FragmentActivity
{
private static final String BASE64_PUBLIC_KEY = "ZZZZ";
private static final byte[] SALT = new byte[] {
XXXX
};
private LicenseCheckerCallback mLicenseCheckerCallback;
private LicenseChecker mChecker;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
String deviceId = Secure.getString(getContentResolver(), Secure.ANDROID_ID);
// Library calls this when it's done.
mLicenseCheckerCallback = new YAHLicenseCheckerCallback();
// Construct the LicenseChecker with a policy, obfuscator and public key
mChecker = new LicenseChecker(this,
new ServerManagedPolicy(this,
new AESObfuscator(SALT, getPackageName(), deviceId)),
BASE64_PUBLIC_KEY);
mChecker.checkAccess(mLicenseCheckerCallback);
} …Run Code Online (Sandbox Code Playgroud) 所以我想制作一个加载了全部功能的免费应用程序.在应用程序检测到许可的专业密钥之前,专业版功能将被禁用.当然我想让pro key使用LVL检查它的许可证.虽然我知道如何在此之前做正确的事情,但我不知道如何使专业密钥与应用程序通信它应该启用专业功能.
这是主应用程序代码(com.test.mainapp):
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
context = getApplicationContext();
final PackageManager pacman = getPackageManager();
final int signatureMatch = pacman.checkSignatures(getPackageName(),
"com.test.mainapp_key");
if (signatureMatch == PackageManager.SIGNATURE_MATCH) {
Toast.makeText(context, "Pro key detected!", Toast.LENGTH_SHORT)
.show();
} else {
Toast.makeText(context, "Free version", Toast.LENGTH_SHORT).show();
}
}
Run Code Online (Sandbox Code Playgroud)
虽然这会阻止其他人为我的应用程序制作假钥匙,但他们仍然可以在线共享关键应用程序,并且它可以正常工作.因为我们不能从另一个应用程序执行LVL检查,我希望许可证密钥应用程序检查它自己的许可证,如果它是正确的,那么只有用户才能获得专业功能.如何让许可证密钥应用程序与主应用程序相互通信?
我试图获得的功能就像Titanium Backup一样.
几个月前我发布了一款使用谷歌LVL进入市场的应用程序.出于某种原因,我的Nexus One开发手机上的应用实例始终未通过验证,大约3天前(2012年3月25日)开始.运行相同版本的应用程序的客户不会报告任何故障.我试图通过我的开发者控制台切换许可响应 - 许可证检查仍然失败.我卸载并重新安装了应用程序,没有任何效果.(我使用adb在我的开发者手机上安装了该应用,因为Google不允许我通过商店购买我自己的应用).我想知道这个问题是否是由于最近Market/Play应用程序的变化造成的; 手机正在运行Play商店的3.5.15版本.有谁知道为什么会这样,以及如何解决它?谢谢,汤姆
我希望能够在应用程序启动时将运行版本与当前在 Google Play 上的相同应用程序版本进行比较。
我找到了一个很好的方法,在这里描述:
public String getLatestVersionNumber() {
String versionNumber = "0.0.0";
try {
Document doc = Jsoup.connect("http://www.appbrain.com/app/wallpaper-switch/com.mlevit.wallpaperswitch").get();
Elements changeLog = doc.select("div.clDesc");
for (Element div : changeLog) {
String divText = div.text();
if (divText.contains("Version")) {
return divText.split(" ")[1];
}
}
}
catch (IOException e) {
e.printStackTrace();
}
return versionNumber;
}
Run Code Online (Sandbox Code Playgroud)
但是它太慢了,并且严重妨碍了应用程序启动时的用户体验。
是否有更快的方法在 Google Play 上查询应用程序的当前版本?
也许是一些隐藏的 LVL 或应用内计费 API?
我知道这个话题已在这里多次讨论过了.
这是我第一次将应用上传到Google Play.该应用程序是免费的.我阅读谷歌的许可支持网页,但我真的很困惑.根据我的理解,许可应该用于付费应用程序,以防止将应用程序从一个设备复制到另一个设备.
我的应用程序将是免费的.我需要实施许可吗?我想这只能帮助我防止应用程序从一台设备复制到另一台设备(可能不会是这样的,因为它是免费的)但是,如果我使用它,我可能会跟踪正确的下载次数.这会以不同的方式帮助我吗?
我读到,当您上传应用时,应该有一些复选框"复制保护"您的应用.它仍然存在且可用吗?
将来我计划在应用程序中添加一些付费模块.是否可以在即将发布的版本中添加许可?
非常感谢,Dan
当运行Google在sdk/extras/google/play_licensing中提供的示例许可证检查应用程序时,它会在运行Lollipop(5.0)的模拟器(AVD)上崩溃(我没有运行5.0的手机).它在运行Kitkat的手机上运行良好.
在4.4 Kitkat上,它给出了一个警告
Implicit intents with startService are not safe: Intent { act=com.android.vending.licensing.ILicensingService }
android.content.ContextWrapper.bindService:538 com.google.android.vending.licensing.LicenseChecker.checkAccess:150 LicActivity.doCheck:126
Run Code Online (Sandbox Code Playgroud)
我不确定5.0他们是否已将其从警告移至完全爆炸错误.
我不知道如何将隐式intent调用转换为显式调用.它在LicenceChecker类中被调用
boolean bindResult = mContext
.bindService(
new Intent(
new String(
Base64.decode("HEX_TEXT"))),
this, // ServiceConnection.
Context.BIND_AUTO_CREATE);
Run Code Online (Sandbox Code Playgroud)
BASE 64解码为com.android.vending.licensing.ILicensingService
我刚收到错误消息不幸的是,许可证检查程序已停止.在对话框中.
它在logcat中显示此消息
java.lang.RuntimeException: Unable to instantiate application com.android.vending.VendingApplication: java.lang.ClassNotFoundException:
Didn't find class "com.android.vending.VendingApplication" on path: DexPathList[[zip file "/system/app/LicenseChecker/LicenseChecker.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
Run Code Online (Sandbox Code Playgroud)
有人报道了一段时间但仍然没有解决方案
我正在尝试为 Android studio 中的一个用 Kotlin 编写的应用程序设置 Google Play 许可。我的目标是避免用户在不通过商店购买我的应用程序的情况下共享 APK 文件。
我尝试过的:
我尝试按照他们的文档进行操作。这不是很有用。它跳过了许多细节,而且它并不是真正的教程。我无法使用它。
我看过这个问题,它确实有一个又长又详细的类似教程的答案。但这个答案似乎早已过时了。它会导致大量警告并以“意图必须明确”异常终止。
我的问题总结是:
如何通过 Google 设置许可证检查,以便未通过商店购买该应用程序的人无法安装它。尽管我无法找到任何正确的答案,但这似乎是一件很常见的事情。