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

我正在开发针对SPECIFIC品牌手机的Android应用程序 – 这是项目要求而不是我的决定。

因此,我需要能够在Android市场中将该应用程序仅用于由该SPECIFIC制造商生产的那些设备。

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

可能吗?

PS我可以在android代码中检索设备make。 所以我怀疑市场应用程序应该能够通过设备make进行过滤。 我只是不知道它是否确实如此(如果它确实会很好)。

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

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

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

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

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

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

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

Device Availability对话框可以通过两种强大的方式帮助开发人员:

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

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

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

在开发人员控制台页面的“ 支持的设备”部分中,您可以查看所有设备的列表。 这将加载超过2,000个滑块types的checkbox,这些checkbox最初设置为启用。 不幸的是,界面中似乎没有“禁用/启用所有”选项…

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

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

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

以下是Desty答案的改进:

  • 自动检测class级名称
  • 真的取消选中:即使你已经取消选中某些方框也能正常工作

码:

 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所选品牌的

    ,编辑并添加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 

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

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

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

     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游戏机设计的不断发展,我没有成功完成之前的工作。 我注意到只修改了第一个checkbox状态。 似乎每次点击都会向Google服务器发送POST。 经过一些尝试,我发现添加一个速度允许循环checkbox。 这是适用于我的Javascript。 只需在浏览器的控制台中复制粘贴(使用CHROME和FIREFOX进行测试)。 请注意,如果您的贷款不是英语,则必须在下一页的querySelector按钮中替换“下一页”。

     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]:选中:启用’‘输入[type =checkbox]:选中:已禁用’