我正在为SPECIFIC品牌的手机开发一个Android应用程序 - 这是项目要求而不是我的决定。
因此,我需要能够在Android市场中将该应用程序仅用于由该SPECIFIC制造商生产的那些设备。
我似乎无法找到如何做到这一点。
有可能吗?
P.S。 我可以在android代码中检索设备make。 所以我怀疑市场应用程序应该能够通过设备make过滤。 我只是不知道它是否确实存在(如果它确实会很好)。
答案 0 :(得分:31)
您不需要在应用程序代码中根据设备/制造商过滤您的应用程序,而只需在您自己发布应用程序时从Android市场开发者控制台https://market.android.com/publish/进行此操作。
开发者控制台上有一个“支持的设备”部分,其中显示了可以访问Android市场的所有设备的列表。然后,您可以过滤掉与您的应用程序不兼容的设备或制造商
这是主开发者控制台中的部分:
在这里,您可以排除设备和/或制造商无法看到您的应用
有关详细信息,请参阅Device Availability帮助页面,其中包含:
“设备可用性”对话框可以帮助两个强大的开发人员 方法:
了解哪些设备可以在Android电子市场中找到您的应用
设备可用性提供基于的兼容设备的动态列表 你的清单设置。例如,如果您的apk的清单指定 大屏幕尺寸,控制台将反映支持的设备 可以在Market中找到您的应用。
- 醇>
您也可以使用动态搜索 功能,以查看您的应用程序将无法使用的设备 至。您可以按制造商搜索设计名称(例如“Passion”), 或实际的公共设备名称(例如“Nexus One”),看看你的 清单设置过滤了设备。过滤有问题或 不兼容的设备此功能提供特定于设备的功能 开发人员的管理选项。当您添加设备时 “手动排除的设备”列表,您的应用将无法使用 在Market中排除了设备。这主要是为了帮助 开发人员通过帮助提供最佳的用户体验 开发人员过滤掉已知存在兼容性问题的设备。
答案 1 :(得分:29)
在开发者控制台页面的支持的设备部分中,您可以查看所有设备的列表。这将加载超过2,000个滑块类型的复选框,这些复选框最初设置为启用。不幸的是,似乎没有"禁用/启用所有"界面中的选项......
...相反,我使用Firebug的检查器工具来获取这些滑块对象的类名(无法回忆它现在是什么 - 两个随机的大写首字母缩略词),然后在Javascript中执行一个表达式控制台切换每个滑块的状态。类似的东西:
switches = document.getElementsByClassName("ABC DEF"); for(i = 0; i < switches.length; i++) switches[i].click();
这会冻结浏览器一两分钟,但之后,每部手机都被标记为不受支持。然后,您可以启用您需要支持的手机。
答案 2 :(得分:19)
以下是对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控制台运行它。
答案 3 :(得分:2)
嗯,你可以采用合乎逻辑的方式。
首先使用getResources().getConfiguration()
的硬件详细信息。现在你可以给出条件,如果你的硬件是这个mdel或名称然后继续。
答案 4 :(得分:2)
我编写了一个脚本,根据KrisWebDev的脚本按品牌禁用设备。
您必须找到所选品牌的<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(); } }
答案 5 :(得分:2)
我在本页的答案中使用了不同的部分编写了一个小脚本(感谢@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,欢迎所有反馈。
答案 6 :(得分:0)
当您要将应用程序上传到市场时,在发布页面上您将有可用的设备选项,您可以在其中添加/删除设备。通过这种方式,您可以按制造商和型号名称过滤掉设备。
答案 7 :(得分:0)
随着Google Play游戏机设计的不断发展,我没有成功完成之前的工作。我注意到只修改了第一个复选框状态。似乎每次点击都会对谷歌服务器进行POST。经过一些尝试,我发现添加一个速度允许循环复选框。 这是适用于我的Javascript。只需在浏览器的控制台中复制粘贴(使用CHROME和FIREFOX进行测试)。请注意,您必须更换&#34;下一页&#34;如果您的贷款不是英语,请在下一页的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();
如果您愿意检查所有复选框,只需更换&#39;输入[type =复选框]:选中:已启用&#39; 并使用&#39;输入[类型=复选框]:选中:禁用&#39;
答案 8 :(得分:0)
要在Google Play控制台支持的设备页面中选中/取消选中全部复选框,请使用以下脚本。此脚本适用于最新的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();