羣暉AndroidTV-DSvideo,電視安裝後無圖標解決方案及原理

一、引子

前兩天,家裏電視炸了(你沒看錯,就是炸了,前一天還好好的,睡一覺起來看到屏幕自己裂了),第二天買了個某米5(別噴,便宜就行),想着家裏那臺只當備份用着的DS218+,加上近期媳婦在看慶某年,順手去官網下了個AndroidTV-DSvideo安裝上,但發現安裝好了沒圖標。查了資料,發現羣暉提供的App只支持AndroidTV,而不支持國內大部分深度定製的原版Android,詳查後發現只是啓動器的問題,ADB am start測試可以正常打開,那就簡單了。

二、如何啓動

使用的工具

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

AndroidTV-DSvideo
反編譯完成後,會在同目錄下生成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拷貝一個圖標,刪除工程內多餘的圖片及其它資源。
AndroidTV-DSVideo
0x04 最後AndroidStudio -> Build -> Generate Signed Bundle/APK…打包apk。然後adb install把剛編譯的apk安裝到電視上,圖標出來了,點擊後會自動啓動AndroidTV-DSideo,完成。

三、成品及使用方法

1. 安裝方法

U盤、帶WIFI安裝的文件管理器、ADB,由於各個電視廠家的安裝方法不盡相同,這裏只給出家裏使用的某米5安裝方法。

  1. 設置 -> 關於 -> 產品型號,然後在產品型號上快速的按確認鍵五次以上,提示“您已經處於開發者模式”。
  2. 回到設置頁,依次點擊:賬號與安全->ADB調試,按向右方向鍵選擇允許,然後你選擇確定打開。
  3. 在設置 -> 關於 裏查看電視IP
  4. adb connect ip連接上電視(注意電視彈出的是否允許調試要選擇允許)
  5. 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,轉載請註明。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章