GMS TV端调研
文章目录
参考网站
https://42matters.com/google-tv-app-store-statistics-and-trends
Google Play TV 应用
https://play.google.com/store/apps?device=tv&gl=jp
https://play.google.com/store/games?gl=jp
GMS TV 端库说明
# 依赖Google Play Service 的API列表
https://developers.google.com/android/guides/setup?device=android-tv#dependencies
https://developers.google.com/android/reference/packages
脚本
import os
import shutil
gms_map = {}
def parseApk(path, pkg):
unzip_path = path + "/" + pkg
apk_path = unzip_path + ".apk"
print("parse apk:" + pkg, apk_path)
if os.path.exists(unzip_path) is False:
cmd = '/Users/dongdong.lei/bin/apktool d ' + '"' + apk_path + '"'
print("cmd:" + cmd)
os.system(cmd)
if os.path.exists(unzip_path):
file_list = os.listdir(unzip_path)
for file_path in file_list:
gms_path = unzip_path + "/" + file_path + "/com/google/android/gms"
if os.path.exists(gms_path):
gms_list = os.listdir(gms_path)
for gms_file in gms_list:
gms_module = "com.google.android.gms." + gms_file
gms_pkgs = []
if gms_module in gms_map:
gms_pkgs = gms_map[gms_module]
gms_pkgs.append(pkg)
gms_map[gms_module] = list(set(gms_pkgs))
# 删除反编译包
shutil.rmtree(unzip_path)
pkgs = [
"com.disney.disneyplus",
"com.netflix.ninja",
"com.facebook.katana",
"tv.twitch.android.app",
"com.google.android.youtube.tvkids",
"com.amazon.amazonvideo.livingroom",
"com.yodo1.crossyroad",
"fm.awa.liverpool",
"com.viki.android",
"com.bamnetworks.mobile.android.gameday.atbat",
"com.nousguide.android.rbtv",
"com.dazn",
"com.vimeo.android.videoapp",
"com.nttdocomo.android.danimestb",
"com.vidio.android.tv",
"com.apple.atve.androidtv.appletv",
"com.apple.atve.sony.appletv",
"com.espn.score_center",
"com.spb.tv.am",
"com.flipps.fitetv",
"com.amazon.music.tv",
"jp.co.nttdocomo.dtv.androidtv",
"com.degoo.android",
"com.famousbluemedia.yokee",
"brownmonster.app.game.rushrally3",
"com.loupeart.loupe",
"com.google.android.youtube.tv",
"tv.abema",
"jp.unext.tv.player",
"com.viki.android",
"jp.co.yahoo.gyao.android.app",
"jp.co.tver.tvapp",
"jp.co.nttdocomo.dtv.androidtv",
"jp.paravi.androidtv",
"com.kddi.android.stb4kvideopass",
"air.jp.co.fujitv.fodviewer.tv",
"jp.co.rakuten.nba.tv.android",
"jp.videomarket.android.cc",
"com.bch.sp.bchmembershipapp",
"jp.co.rakuten.video.rakutentvapp",
"jp.tmediahd.android.tsutaya_tv_atv",
"com.spotify.tv.android",
"tunein.player",
"com.appgeneration.itunerfree",
"deezer.android.tv",
"com.famousbluemedia.yokee",
"com.djit.equalizerplusforandroidfree",
"com.netflix.ninja",
"com.facebook.katana",
"org.videolan.vlc",
"tv.twitch.android.app",
"com.plexapp.android",
"com.nousguide.android.rbtv",
"com.gotv.nflgamecenter.us.lite",
"com.ajnsnewmedia.kitchenstories",
"com.dailymotion.dailymotion",
"com.spb.tv.am",
"com.mubi",
"com.riatech.cookbook",
"jp.videomarket.android.cc",
"com.archos.mediacenter.videofree",
"com.peirr.workout.play",
"com.haystack.android",
"com.usatoday.android.news",
"com.foxnews.android",
"com.ted.android.tv",
"com.wapo.posttv",
"com.pelmorex.WeatherEyeAndroid.tv",
"com.bloomberg.btva",
"com.vectorunit.purple.googleplay",
"com.gameloft.android.ANMP.GloftA8HM",
"com.fgol.HungrySharkEvolution",
"com.zeptolab.thieves.google",
"com.rawfury.longhathouse.Dandara",
"com.ubisoft.redlynx.trialsfrontier.ggp",
"com.madfingergames.deadtrigger2",
"com.FDGEntertainment.redball4.gp",
"com.doodle.turboracing3d",
"com.hyperkani.bomberfriends",
"com.secretexit.turbodismount",
"com.giantssoftware.fs14",
"com.frogmind.badland"
]
for pkg in pkgs:
parseApk("/Users/dongdong.lei/Downloads/gp_apps", pkg)
print(gms_map)
download
import requests
from fake_useragent import UserAgent
def ua():
ua = UserAgent()
headers = {'User-Agent': ua.random}
print(headers)
return headers
def get_real_url(url):
rs = requests.get(url, headers=ua(), timeout=10)
print(rs.url)
return rs.url
# pkgs = [
# "com.disney.disneyplus",
# "com.netflix.ninja",
# "com.facebook.katana",
# "tv.twitch.android.app",
# "com.google.android.youtube.tvkids",
# "com.amazon.amazonvideo.livingroom",
# "com.yodo1.crossyroad",
# "fm.awa.liverpool",
# "com.viki.android",
# "com.bamnetworks.mobile.android.gameday.atbat",
# "com.nousguide.android.rbtv",
# "com.dazn",
# "com.vimeo.android.videoapp",
# "com.nttdocomo.android.danimestb",
# "com.vidio.android.tv",
# "com.apple.atve.androidtv.appletv",
# "com.apple.atve.sony.appletv",
# "com.espn.score_center",
# "com.spb.tv.am",
# "com.flipps.fitetv",
# "com.amazon.music.tv",
# "jp.co.nttdocomo.dtv.androidtv",
# "com.degoo.android",
# "com.famousbluemedia.yokee",
# "brownmonster.app.game.rushrally3",
# "com.loupeart.loupe",
# "com.google.android.youtube.tv",
# "tv.abema",
# "jp.unext.tv.player",
# "com.viki.android",
# "jp.co.yahoo.gyao.android.app",
# "jp.co.tver.tvapp",
# "jp.co.nttdocomo.dtv.androidtv",
# "jp.paravi.androidtv",
# "com.kddi.android.stb4kvideopass",
# "air.jp.co.fujitv.fodviewer.tv",
# "jp.co.rakuten.nba.tv.android",
# "jp.videomarket.android.cc",
# "com.bch.sp.bchmembershipapp",
# "jp.co.rakuten.video.rakutentvapp",
# "jp.tmediahd.android.tsutaya_tv_atv",
# "com.spotify.tv.android",
# "tunein.player",
# "com.appgeneration.itunerfree",
# "deezer.android.tv",
# "com.famousbluemedia.yokee",
# "com.djit.equalizerplusforandroidfree",
# "com.netflix.ninja",
# "com.facebook.katana",
# "org.videolan.vlc",
# "tv.twitch.android.app",
# "com.plexapp.android",
# "com.nousguide.android.rbtv",
# "com.gotv.nflgamecenter.us.lite",
# "com.ajnsnewmedia.kitchenstories",
# "com.dailymotion.dailymotion",
# "com.spb.tv.am",
# "com.mubi",
# "com.riatech.cookbook",
# "jp.videomarket.android.cc",
# "com.archos.mediacenter.videofree",
# "com.peirr.workout.play",
# "com.haystack.android",
# "com.usatoday.android.news",
# "com.foxnews.android",
# "com.ted.android.tv",
# "com.wapo.posttv",
# "com.pelmorex.WeatherEyeAndroid.tv",
# "com.bloomberg.btva",
# "com.vectorunit.purple.googleplay",
# "com.gameloft.android.ANMP.GloftA8HM",
# "com.fgol.HungrySharkEvolution",
# "com.zeptolab.thieves.google",
# "com.rawfury.longhathouse.Dandara",
# "com.ubisoft.redlynx.trialsfrontier.ggp",
# "com.madfingergames.deadtrigger2",
# "com.FDGEntertainment.redball4.gp",
# "com.doodle.turboracing3d",
# "com.hyperkani.bomberfriends",
# "com.secretexit.turbodismount",
# "com.giantssoftware.fs14",
# "com.frogmind.badland"
# ]
pkgs = [
# "com.vectorunit.purple.googleplay",
# "com.gameloft.android.ANMP.GloftA8HM",
# "com.fgol.HungrySharkEvolution",
# "com.zeptolab.thieves.google",
# "com.ubisoft.redlynx.trialsfrontier.ggp",
# "com.madfingergames.deadtrigger2",
# "com.rawfury.longhathouse.Dandara",
# "com.FDGEntertainment.redball4.gp",
# "com.doodle.turboracing3d",
# "com.hyperkani.bomberfriends",
# "com.secretexit.turbodismount",
# "com.giantssoftware.fs14",
# "com.frogmind.badland",
# "com.cle.dday",
# "com.rayark.deemo2",
# "com.hidea.cat",
# "com.stone3.ig",
# "com.foursakenmedia.magicvsmetal",
# "com.glapp.solitaire",
"jp.co.toho.ouchinikaeritai",
"jp.co.toho.godzillabattleline",
"com.sega.d2megaten",
"com.slsm.jp",
"com.luckyskeletonstudios.idlebanktycoon",
"com.arkgames.ggplay.tlonjp",
"jp.wonderplanet.CrashFever",
"net.ekgames.fclasshero",
"com.YostarJP.BlueArchive",
"com.nexon.maplem.japan",
"com.gameloft.android.ANMP.GloftA8HM",
"com.gameloft.android.ANMP.GloftA9HM",
"com.rovio.angrybirdsfriends",
"com.netmarble.mherosgb",
"com.rovio.baba",
"com.gameloft.android.ANMP.GloftMTHM",
"com.mojang.minecraftpe",
"com.gameloft.android.ANMP.GloftFWHM",
"com.pubg.newstate",
"com.gameloft.android.ANMP.GloftGGHM",
"com.halfbrick.fruitninjax",
"com.gameloft.android.ANMP.GloftGHHM",
"com.gameloft.android.ANMP.GloftDMHM",
"com.my.cooking.chef.kitchen.craze.fever",
"com.gameloft.android.ANMP.GloftW2HM",
"com.supercell.clashroyale",
"com.roblox.client",
"com.Shooter.ModernWarships",
"com.cookingcity.chef.kitchen.craze.fever",
"com.king.candycrushsodasaga",
"com.nianticlabs.pokemongo",
"com.nintendo.zara",
"com.turborilla.bike.racing.madskillsmotocross3",
"com.gameloft.android.ANMP.GloftDMHM",
"com.cookie.match3.casual",
"com.n3twork.tetris",
"com.catdaddy.nba2km",
"com.king.candycrushsodasaga",
"com.ea.gp.apexlegendsmobilefps",
"com.rovio.dream",
"com.ea.games.r3_na",
"com.playrix.township",
"com.miHoYo.GenshinImpact",
"com.puzzle1studio.go.bubblepoporiginpuzzlegame",
"com.blizzard.diablo.immortal",
"com.tensquaregames.letsfish2",
"com.playrix.fishdomdd.gplay",
"com.tripledot.woodoku",
"com.dreamgames.royalmatch",
"com.playrix.gardenscapes",
"com.cookie.match3.casual",
"com.king.candycrushsodasaga",
"com.ea.gp.apexlegendsmobilefps",
"com.rovio.dream",
"com.playrix.township",
"com.miHoYo.GenshinImpact",
"com.puzzle1studio.go.bubblepoporiginpuzzlegame",
"com.blizzard.diablo.immortal",
"com.playrix.fishdomdd.gplay",
"com.dreamgames.royalmatch",
"com.playrix.gardenscapes",
"com.nintendo.zaca",
"jp.co.imagineer.sumikkogurashi.farm",
"com.matchington.mansion",
"com.proximabeta.nikke",
"com.everywear.game5",
"jp.co.imagineer.rilakkuma.farm",
"com.cobby.lonelysurvivor",
"com.wooga.sumikko_jp",
"com.tgc.sky.android",
"com.miHoYo.GenshinImpact",
"com.playrix.fishdomdd.gplay",
"com.dreamgames.royalmatch",
"com.nintendo.zaca",
"jp.co.imagineer.sumikkogurashi.farm",
"com.matchington.mansion",
"com.bgg.jump",
"com.nintendo.zaba",
"jp.goodsmile.touhoulostword_android",
"com.qookkagame.sgzzlb.gp.jp",
"com.catdaddy.nba2km",
"com.camelgames.aoz",
"jp.konami.masterduel",
"com.riotgames.league.teamfighttactics",
"com.nintendo.zaba",
"com.netease.idv.googleplay",
"jp.gungho.pad",
"com.igg.android.lordsmobile",
"jp.boi.mementomori.android",
"solitaire.patience.card.games.klondike.free",
"com.ea.games.r3_na",
"com.puzzle1studio.go.bubblepoporiginpuzzlegame",
"com.blizzard.diablo.immortal",
"com.tensquaregames.letsfish2",
"com.playrix.fishdomdd.gplay",
"com.tripledot.woodoku",
"com.dreamgames.royalmatch",
"com.playrix.gardenscapes",
"jp.co.imagineer.sumikkogurashi.farm",
"com.nintendo.zaca",
"com.matchington.mansion",
"com.proximabeta.nikke",
"com.cobby.lonelysurvivor",
"net.peakgames.toonblast",
"com.camelgames.aoz",
"com.tripledot.woodoku",
"com.playrix.gardenscapes",
"com.youmusic.magictiles",
"com.matchington.mansion",
"com.cobby.lonelysurvivor",
"net.peakgames.toonblast",
"com.bgg.jump",
"com.playrix.homescapes",
"com.dxx.firenow",
"com.vincentb.MobControl",
"com.gametamin.trafficpuzzlegame",
"com.habby.archero",
"com.wildsky.wildarmydraft",
"com.dreamgames.royalmatch",
"com.n3twork.tetris",
"com.proximabeta.nikke",
"com.everywear.game5",
"com.cobby.lonelysurvivor",
"net.peakgames.toonblast",
"jp.colopl.wcgolf",
"jp.konami.masterduel",
"com.bgg.jump",
"com.zy.wqmt.global",
"com.playrix.homescapes",
"com.pandadagames.ninja.global",
"com.netease.idv.googleplay",
"com.nvsgames.snap",
"com.matchington.mansion",
"jp.co.imagineer.sumikkogurashi.farm",
"net.peakgames.toonblast",
"com.nintendo.zaca",
"com.feralinteractive.gridas",
"com.mojang.minecraftpe",
"com.fansipan.stickman.shadow.knights.fightinggames",
"com.Zonmob.Stickman.FightingGames.ShadowOfDeath",
"air.com.RustyLake.WhiteDoor",
"com.zitga.ninja.stickman.legends.shadow.wars",
"com.squareenixmontreal.hitmansniperandroid",
"com.astragon.cs2014",
"com.pgstudio.survivalpro",
"com.agaming.reporter",
"com.giantssoftware.fs18.google",
"com.realdrift.sipon",
"com.gameloft.android.ANMP.GloftG4HM",
"com.astragon.cs3",
"com.hg.wreckfest",
"com.nekki.shadowfight2.paid",
"com.madfingergames.SamuraiIIAll",
"air.com.RustyLake.RustyLakeParadise",
"com.ninjakiwi.bloonstd6",
"com.gameloft.android.ANMP.GloftWBHM",
"net.peakgames.toonblast",
"com.bgg.jump",
"com.playrix.homescapes",
"com.cookapps.mergeproject",
"com.gametamin.trafficpuzzlegame",
"com.global.ztmslg",
"com.vectorunit.purple.googleplay",
"com.gameloft.android.ANMP.GloftA8HM",
"com.yodo1.crossyroad",
"com.fgol.HungrySharkEvolution",
"com.zeptolab.thieves.google",
"com.ubisoft.redlynx.trialsfrontier.ggp",
"com.madfingergames.deadtrigger2",
"com.rawfury.longhathouse.Dandara",
"com.FDGEntertainment.redball4.gp",
"com.doodle.turboracing3d",
"com.hyperkani.bomberfriends",
"com.secretexit.turbodismount",
"com.giantssoftware.fs14",
"com.frogmind.badland",
"com.ea.games.r3_na",
"com.vectorunit.red",
"com.atypicalgames.sgsr",
"com.mediocre.commute",
"com.creativemobile.nno",
"pl.idreams.skyforcehdtv",
"com.doodle.turboracing3d",
"com.secretexit.turbodismount",
"com.vectorunit.silver.googleplay",
"com.invictus.daytonarush",
"com.hyperdevbox.indy500",
"com.ratrodstudio.streetoutlawslite",
"pl.idreams.skyforcehdtv",
"com.craneballs.overkill3",
"com.snkplaymore.android007",
"net.froemling.bombsquad",
"com.frogmind.badland",
"com.jackboxgames.JackboxPartyLoaderFull",
"com.elevenbitstudios.anomaly2game",
"com.telltalegames.walkingdead100",
"com.telltalegames.fables100",
"com.telltalegames.walkingdead200",
"com.oddworld.Munch",
"com.rockstargames.gtalcs",
"com.elevenbitstudios.twommobile",
"com.hoplite.broadsword1",
"com.noodlecake.waywardsouls",
"com.coffeestainstudios.goatsimulator",
"com.nightlightinteractive.ww",
"com.hg.frozenfronttv",
"com.noodlecake.drtc",
"com.noodlecake.suzycube",
"com.Rain.Teslagrad",
"com.concretesoftware.pbachallenge_androidmarket",
"com.onecwireless.mahjongvillage.google.free",
"com.pixelbite.sm2",
"com.waybefore.fastlikeafox",
"com.asanteegames.magicrampage",
"com.joxdev.orbia",
"com.crescentmoongames.subdivision",
"com.craneballs.bombhunter",
"com.divmob.ageofheroes.braveheroes.battleheroes.epicheroeswar.epicheroes.en",
"com.atypicalgames.radiationisland",
"com.zenstudios.ZenPinball",
"com.refuelgames.rally",
"com.ratrodstudio.snowparty2lite",
"com.famousbluemedia.yokee",
"net.kidjo.app.android",
"com.veewo.supercat",
"com.vectorunit.silver.googleplay",
"com.badflyinteractive.deadeffect2",
"com.pixelbite.sm2",
"com.pixelbite.mutant",
"com.sidheinteractive.sif.DR",
"com.redantz.game.zombie",
"com.hyperdevbox.exzeus2",
"com.oddworld.Stranger",
"com.pocha.warriorheart",
"com.leosfortune",
"com.waybefore.fastlikeafox",
"com.asanteegames.magicrampage",
"com.orangepixel.gunslugs",
"com.rsz.StickmanBattlefields",
"com.playdigious.mechanicescape",
"com.Alper.SwordOfXolan",
"com.deadmage.shadowblade.paid",
"com.orangepixel.meganoid2",
"com.orangepixel.gunslugs2",
"com.hg.sdltv",
"com.inxile.BardTale",
"net.hexage.reaper",
"kemco.execreate.alphadiagenesis",
"com.square_enix.android_googleplay.FFIII_GP",
"hb.doom_and_destiny_advanced",
"com.aspyr.swkotor",
"com.shinybox.smash",
"com.telltalegames.batman200",
"com.orangepixel.dungeon",
"com.square_enix.android_googleplay.FFIV_GP",
"com.coffeestainstudios.goatsimulator.mmo",
"com.orangepixel.dungeon2",
"air.net.machinarium.Machinarium.GP",
"com.bedtime.backtobed",
"eu.bandainamcoent.pacman256",
"com.zenstudios.PortalPinball",
"com.jackboxgames.JackboxPartyLoaderFull",
"com.jakyl.hardlineshd",
"com.veewo.supercat",
"com.hg.ninjaherocatstv",
"com.lsgvgames.slideandflyfull",
"com.hg.farminvasiontv",
"com.hg.dfwgtv",
"com.FDGEntertainment.BeyondYnth",
"com.younghorses.octodad",
"com.atypicalgames.radiationisland",
"net.hexage.defense",
"com.wardrumstudios.auralux2",
"com.hg.farminvasiontv",
"com.emerge.cyetest",
"com.ratrodstudio.snowparty2",
"com.ratrodstudio.snowparty",
"com.ratrodstudio.skateparty3",
"com.jakyl.tcr",
"com.hg.spsfootballtv",
"com.outerminds.pewdiepie",
"com.crescentmoongames.subdivision",
"com.divmob.ageofheroes.braveheroes.battleheroes.epicheroeswar.epicheroes.en",
"net.hexage.radiant",
"com.jyaif.pewpew2",
"com.spartonix.fireliner",
"com.hardlinestudios.alphawave",
]
for pkg in pkgs:
url = 'https://d.apkpure.com/b/APK/' + pkg + '?version=latest'
name = pkg + '.apk'
print(url)
real = url
# real = get_real_url(url)
print(real)
r = requests.get(real, headers=ua())
with open(name, "wb") as file:
file.write(r.content)
文章作者 Brook
上次更新 2023-01-28