如何限制Android应用程序到特定的设备?

我正在开发一个特定品牌的手机的Android应用程序 – 这是项目的要求不是我的决定。

所以我需要能够在Android市场上使应用程序只适用于那些特定制造商生产的设备。

我似乎无法find如何做到这一点。

可能吗?

PS我可以检索在Android代码中的设备。 所以我怀疑市场应用程序应该能够通过设备制作过滤。 我只是不知道它是否真的如此(如果是的话,会很好)。

您不需要根据应用程序代码中的设备/制造商来过滤您的应用程序,而是可以从android市场开发人员控制台 – https://market.android.com/publish/执行此操作,就在您发布应用程序本身时。;

开发者控制台上有一个“支持的设备”部分,向您显示可以访问Android市场的所有设备的列表。 然后,您可以过滤掉与您的应用不兼容的设备或制造商

这是主开发人员控制台中的部分:

这是主开发人员控制台中的部分

在这里,您可以排除设备和/或制造商看不到您的应用程序

在这里,您可以排除设备和/或制造商看不到您的应用程序

有关更多信息,请参阅设备可用性帮助页面:

“设备可用性”对话框可以通过两种强大的方式帮助开发人

了解哪些设备可以在Android电子市场中find您的应用

  1. 设备可用性根据您的清单设置提供兼容设备的dynamic列表。 例如,如果您的apk的清单指定了大屏幕尺寸,则控制台将反映在Market中可以find您的应用程序的受支持设备。

  2. 您还可以使用dynamicsearchfunction查看您的应用程序无法使用的设备。 您可以按制造商,devise名称(例如“Passion”)或实际的公共设备名称(例如“Nexus One”)进行search,以查看您的清单设置是否过滤了设备。 过滤出现问题或不兼容的设备此function为开发人员提供了设备特定的pipe理选项。 当您将设备添加到“手动排除的设备”列表中时,您的应用将无法在市场中排除的设备上使用。 这主要是为了帮助开发人员提供最佳的用户体验,帮助开发人员过滤出已知具有兼容性问题的设备。

在开发者控制台页面的支持的设备部分,您可以查看所有设备的列表。 这会加载超过2000个最初设置为启用的滑块typescheckbox。 不幸的是,在界面上似乎没有“禁用/启用所有”选项。

…相反,我使用Firebug的检查器工具来获取这些滑块对象的类名(现在不记得它是什么 – 两个随机的大写首字母缩写词),然后在Javascript控制台中执行一个expression式来切换每个滑块的状态。 就像是:

switches = document.getElementsByClassName("ABC DEF"); for(i = 0; i < switches.length; i++) switches[i].click(); 

这使浏览器冻结了一两分钟,但之后,每个电话都被标记为不受支持。 然后,您可以启用您需要支持的手机。

以下是对Desty的解答:

  • 自动检测类名称
  • 真的取消选中:即使您已经有一些框未选中,也能正常工作

码:

 var className = document.evaluate( 'string(//li[@data-device-id]/checkbox/@class)', document, null, XPathResult.STRING_TYPE, null ).stringValue; switches = document.getElementsByClassName(className); for(var i=0; i < switches.length; i++) { if (switches.item(i).getAttribute("aria-checked") == "false") switches[i].click(); } 

这个脚本需要大约1分钟才能执行。 从您的浏览器的Javascript控制台运行它。

那么你可以做一个合乎逻辑的方法。

首先使用getResources().getConfiguration()来获取硬件细节。 现在你可以给出条件,如果你的硬件是这个mdel或名称然后继续。

我已经写了一个脚本来禁用基于KrisWebDev的脚本品牌的设备。

您必须find您所选品牌的<ol> ,编辑并添加id="sarasa" ,然后运行此脚本以禁用所有品牌:

 var nodes = document.getElementById("sarasa"); for(var i=0; i < nodes.childNodes.length; i++) { if (nodes.childNodes[i].childNodes[0].getAttribute("aria-checked") == "false") { nodes.childNodes[i].childNodes[0].click(); } } 

我已经写了一个小脚本使用不同的部分从这个网页上的答案(谢谢@Desty和@MichaelDePhillips)。 脚本很快(在我的电脑上100到200毫秒之间),您可以指定一个品牌不切换。 这是脚本:

 console.time('Execution time'); var manufacturers = document.querySelectorAll('[data-manufacturer-group]'); for (var i = 0; i < manufacturers.length; i++) { var manufacturer = manufacturers[i]; var brand = manufacturer.firstElementChild; if (brand.tagName == 'H3' && brand.textContent != 'Samsung') { console.log(brand.textContent); var tags = manufacturer.children; for (var j=0;j<tags.length;j++) { var tag = tags[j]; if (tag.tagName == 'OL') { var devices = tag.children; for (var k=0;k<devices.length;k++) { var device = devices[k]; if (device.tagName == 'LI') { var checkbox = device.firstElementChild; var attr = checkbox.getAttribute; if (checkbox.tagName == 'CHECKBOX') { checkbox.setAttribute('aria-checked', 'true'); } } } } } } } console.timeEnd('Execution time'); 

这是我的第一个JavaScript,所有反馈都欢迎。

当您要将应用程序上传到市场时,在发布页面上,您将有可用的设备选项,您可以在其中添加/删除设备。 通过这种方式,您可以按制造商和型号名称过滤设备。

要检查/取消选中Google Play控制台中支持的设备页面上的所有checkbox,请使用以下脚本。此脚本适用于最新的Google Play控制台。 只需在浏览器的控制台中复制粘贴(使用CHROME和FIREFOX进行testing)。

 function runScript() { for (var bxs = document.getElementsByTagName("input"), j = bxs.length; j--;){ if (bxs[j].type == "checkbox"){ bxs[j].click(); } } let nextPage = document.querySelector('button[aria-label="Next page"]:enabled'); if(nextPage){ nextPage.click(); console.log("next page start"); setTimeout(runScript, 20); } } runScript(); 

随着Google Play控制台devise的发展,我没有成功完成以前的工作。 我注意到只有第一个checkbox状态被修改了。 似乎每次点击都会向Google服务器发送POST。 经过一番尝试之后,我发现添加速度允许在checkbox上循环。 这是为我工作的Javascript。 只需在浏览器的控制台中复制粘贴(使用CHROME和FIREFOX进行testing)。 请注意,如果您的贷款不是英语,则必须replace下一页的querySelector中的“下一页”button。

 function uncheckAll() { const cbxSelector= 'input[type=checkbox]:checked:enabled' let checkBoxes = document.querySelectorAll(cbxSelector) if (checkBoxes.length > 0) { checkBoxes[0].click(); setTimeout(uncheckAll, 20); }else{ let nextPage = document.querySelector('button[aria-label="Next page"]:enabled'); if(nextPage){ nextPage.click(); setTimeout(uncheckAll, 20); } } } uncheckAll(); 

如果你愿意检查所有的checkbox,只需将'input [type = checkbox]:checked:enabled'with'input [type = checkbox]:checked:disabled'