小米电视的请过来看一下

2018 年 4 月 25 日
 wangxiaoaer

小米电视装了 YoutubeTV Android 版。

一直运行良好,当然了播放视频的时候有 youtube 自己的广告(可以跳过那种)。

但是近期发现 Youtube 在启动的时候有广告!! 广告内容都是贷款之类的纯中文,此外还很鸡贼的在屏幕右上角显示 “广告由 Youtube 提供”。

但是据我观察,应该不是 youtube 的,先不说广告的弱智风格不太像,其次广告播放完毕后的界面跳转才是真正的 Youtube 启动界面。

所以我不负责人的猜测以下,小米电视检测到 Youtube 启动的时候,先拨一段自己的广告,然后再启动真正的应用,同时还把这个锅甩给 Youtube。你们这么叼,雷布斯知道吗?

25089 次点击
所在节点    全球工单系统
179 条回复
eurokingbai2
2018 年 4 月 25 日
遇到过,感觉是其他软件劫持了启动事件。。
jpyl0423
2018 年 4 月 25 日
Mark
VYSE
2018 年 4 月 25 日
这是个广告 feature, 流程如下:

点击比如斗鱼后, 首先启动的是不是 app 的而是应用商店的 LauncherRouteActivity

```
D/Appstore( 4886): EVENT:PluginInstrumentation.execStartActivity:{}
D/Appstore( 4886): PROFILING:183721 | 17794ms | main | startActivity.beforeInvoke.start:{}
D/Appstore( 4886): EVENT:activitymanagerHook.isForPlugin:false:{}
I/ActivityManager( 458): START u0 {act=android.intent.action.VIEW cmp=com.xiaomi.mitv.appstore/.launcher.control.LauncherRouteActivity (has extras)} from uid 1000 on display 0
```

处理是这么一段:

```
if(!this.a(v0_2)) { //查询显示广告开关
if(com.xiaomi.mitv.appstore.launcher.control.a.a().b(v0_2)) { //查询是否在白名单, 见下面代码
v0_2 = new Intent(((Context)this), PlayAppAdActivity.class); //广告 Activity
v0_2.putExtra("intent", v1);
}
else if(com.xiaomi.mitv.appstore.launcher.control.a.a().a(v0_2)) {
String v2_1 = v0_2.getComponent().getPackageName();
v0_2 = new Intent("android.intent.action.VIEW"); //警告非官方 app
v0_2.setData(Uri.parse("market://appstore.mitv.xiaomi.com/details?launch=dont&package=" + v2_1));
}
else {
v0_2.setFlags(268435456);
}

try {
this.startActivity(v0_2);
}
catch(Exception v0_3) {
v0_3.printStackTrace();
c.a(TrackType.ERROR, "startactivity error in LauncherRouteActivity");
this.finish();
return;
}
```

查询白名单
```
public boolean b(Intent arg4) {
boolean v0 = false;
ComponentName v1 = arg4.getComponent();
if(v1 != null) {
String v1_1 = v1.getPackageName();
if(!TextUtils.isEmpty(((CharSequence)v1_1)) && (this.b.ad_app_white_list.contains(v1_1))) {
v0 = true;
}
}

return v0;
}
```

然后呢, 争议性的"广告由 XX 提供"

```
this.a(0);
String v3 = String.format(this.getResources().getString(d.ad_provider), this.J); //ad_provider string 和 this.J 往后看
int v0 = 0;
int v2 = 0;
while(v0 < v3.length()) {
char v4 = v3.charAt(v0);
if((Character.isLowerCase(v4)) || (Character.isUpperCase(v4))) {
++v2;
}

++v0;
}

v0 = v2 / 2 + 7;
Log.d("PlayAppAdActivity", "targetLength = " + v0);
String v0_1 = v3.length() > v0 ? v3.substring(0, v0) + "..." : v3;
this.o.setText(((CharSequence)v0_1)); //显示那段"XX 提供"
```

```
<string name="ad_provider">
%s 提供</string>
```

this.J 为 app label
```
PackageManager v0_1 = this.getPackageManager();
this.J = v0_1.getApplicationLabel(v0_1.getPackageInfo(Intent.parseUri(this.v, 0).getComponent().getPackageName(), 0).applicationInfo);
```
dychenyi
2018 年 4 月 25 日
@FONG2 我的小米也 3s 亮屏, 这边还求别黑。。
zpxshl
2018 年 4 月 25 日
@VYSE 这代码各种变量命名真随意。。。
xx314327475
2018 年 4 月 25 日
@VYSE 请问是怎么获得的代码的? 如果是这样的话 楼主推测是对的 欢迎楼主吐槽
VYSE
2018 年 4 月 25 日
VYSE
2018 年 4 月 25 日
@zpxshl #125 proguard 后的
zpxshl
2018 年 4 月 25 日
@zpxshl 我错了,,,这是加了混淆吧
chenyu0532
2018 年 4 月 25 日
悟空理财。。。
lyhiving
2018 年 4 月 25 日
首先,YouTube 的 tv 版本虽然有中文但是无广告
eurokingbai2
2018 年 4 月 25 日
@zpxshl 应该是反编译出来的。
xx314327475
2018 年 4 月 25 日
@VYSE 学习了!感谢!
eurokingbai2
2018 年 4 月 25 日
@VYSE 白名单在哪个文件里配置?
laoyur
2018 年 4 月 25 日
楼主,你可以勇敢地打脸那些质疑你的人了
eurokingbai2
2018 年 4 月 25 日
@wangxiaoaer 楼主已经结题了,板上钉钉了。
laoyur
2018 年 4 月 25 日
插广告就插吧,还弄个「此广告由 XXX App 提供」来帅锅,大家说,这算不算欺骗用户、诽谤第三方 App ?
wangxiaoaer
2018 年 4 月 25 日
@所有人 看附言。
wangxiaoaer
2018 年 4 月 25 日
@laoyur #137 这就是我发这个帖子的原因,也是我在第一条附言里面提到的。可惜这里有很多理性的消费者,即使基于事实做出合理的质疑后还要质疑自己的推理是不是在诋毁厂商。厂商有这样的粉丝,死而无憾了。
243205964
2018 年 4 月 25 日
多年米粉看不下去了,小米这招有点过分,不诚实。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/449607

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX