一、引子
前兩天,家裏電視炸了(你沒看錯,就是炸了,前一天還好好的,睡一覺起來看到屏幕自己裂了),第二天買了個某米5(別噴,便宜就行),想着家裏那臺只當備份用着的DS218+,加上近期媳婦在看慶某年,順手去官網下了個AndroidTV-DSvideo安裝上,但發現安裝好了沒圖標。查了資料,發現羣暉提供的App只支持AndroidTV,而不支持國內大部分深度定製的原版Android,詳查後發現只是啓動器的問題,ADB am start測試可以正常打開,那就簡單了。
二、如何啓動
使用的工具
- ApkTool https://ibotpeaches.github.io/Apktool/
- AnroidStudio https://developer.android.google.cn/studio
- AdbTools https://adbdriver.com/downloads/
1. 獲取到App的包名和Launcher路徑
官網下載AndroidTV-DSvideo:https://www.synology.cn/zh-cn/support/download#androids
由於APP沒有啓動, 不能直接通過dumpsys獲取到頂層應用的包名和Activity路徑,所以就不能直接:adb shell dumpsys window w |findstr / |findstr name=
那麼就祭出神器,ApkTool,直接先反編譯解包。
.\apktool d .\AndroidTV-DSvideo.1.1.7-10060.apk
反編譯完成後,會在同目錄下生成Apk同名的文件夾,進去查看AndroidManifest.xml
<application android:allowBackup="true" android:icon="@mipmap/app_icon" android:label="@string/app_name" android:largeHeap="true" android:name="com.synology.dsvideo.App" android:supportsRtl="true" android:theme="@style/Theme.DSvideo.Leanback">
<meta-data android:name="userAgentName" android:value="TV DS video"/>
<activity android:banner="@mipmap/card_ds_video" android:icon="@mipmap/card_ds_video" android:label="@string/app_name" android:logo="@mipmap/card_ds_video" android:name="com.synology.dsvideo.ui.WelcomeActivity" android:screenOrientation="landscape">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LEANBACK_LAUNCHER"/>
</intent-filter>
</activity>
......
App包名爲:com.synology.dsvideo
Launcher類名爲:com.synology.dsvideo.ui.WelcomeActivity
2. 測試啓動DSvideo
首先測試用ADB啓動該Activity,是否能成功:
adb shell am start -n {包名(package)}/{包名}.{Activity路徑}
adb shell am start -n com.synology.dsvideo/com.synology.dsvideo.ui.WelcomeActivity
然後電視正常打開了DsVideo,登陸後測試讀取、播放一切正常,那麼就是隻是一個沒圖標的問題了。
3. 解決方案
初步想了兩種方案:
1 . 給AndroidManifest中WelcomeActivity節點加上
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
讓AndroidTV的應用變爲普通App(未測試、理論可行),重新打包後安裝。但該方法不通用,每次官方App更新後,就需要重新再去編輯打包一次,而且重打包過程中可能會遇到各種坑,只是爲了給媳婦看一個視頻,沒必要這麼折騰,放棄。
2 . 寫個有桌面圖標的App,來啓動AndroidTV-DSVideo。通用性好,官方升級也能一直使用。
果斷選擇第二種方案
0x00 一句代碼:
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
public class MainActivity extends Activity {
private static final String PACKAGE = "com.synology.dsvideo";
private static final String ACTIVITY = ".ui.WelcomeActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 此處應先做一個包名判斷,是否已安裝AndroidTV-DSvideo
// 需要的自行百度,兩句代碼的問題
Intent intent = new Intent();
intent.setComponent(new ComponentName(PACKAGE, PACKAGE + ACTIVITY));
startActivity(intent);
finish();
}
}
0x01 再用Android自帶的透明主題處理APP啓動時的白屏:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.itxca.dsgo">
<application
android:allowBackup="true"
android:icon="@drawable/app_icon"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@android:style/Theme.Translucent" >
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
0x02 刪除build.gradle中多餘的AndroidX引用,壓縮Apk體積
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
}
0x03 從剛解包的AndroidTV-DSVideo文件夾中…\res\mipmap-xxxhdpi\app_icon.png拷貝一個圖標,刪除工程內多餘的圖片及其它資源。
0x04 最後AndroidStudio -> Build -> Generate Signed Bundle/APK…打包apk。然後adb install
把剛編譯的apk安裝到電視上,圖標出來了,點擊後會自動啓動AndroidTV-DSideo,完成。
三、成品及使用方法
1. 安裝方法
U盤、帶WIFI安裝的文件管理器、ADB,由於各個電視廠家的安裝方法不盡相同,這裏只給出家裏使用的某米5安裝方法。
- 設置 -> 關於 -> 產品型號,然後在產品型號上快速的按確認鍵五次以上,提示“您已經處於開發者模式”。
- 回到設置頁,依次點擊:賬號與安全->ADB調試,按向右方向鍵選擇允許,然後你選擇確定打開。
- 在設置 -> 關於 裏查看電視IP
- adb connect ip連接上電視(注意電視彈出的是否允許調試要選擇允許)
- adb install 安裝
adb conncet 192.168.1.88
adb install AndroidTV-DSvideo.1.1.7-10060.apk
adb install DsVideoLauncher.apk
提示無Adb的,可以在這個網站下載https://adbdriver.com/downloads/
2. 成品打包下載
https://download.csdn.net/download/hx7013/12065316
原帖地址:https://blog.csdn.net/hx7013/article/details/103764083,轉載請註明。