安卓手机本地音乐播放器shuttlePlus开源版

安卓手机本地音乐播放器shuttlePlus开源版

一、背景

非常讨厌国内手机音乐播放器各种流氓行为,我只要听本地音乐,每次打开时要先强迫你看一屏广告,本地音乐入口还隐藏得特别深,一不小心就点到直播,联网音乐等界面去了,非常让人反感。想找个简单的本地音乐播放器,发现非常困难,要么功能欠缺,要么带广告。这东西anroid本来就自带的,可是国内各组装厂却都替换成了自己的,还要强制联网。某Q音乐本地版加载个歌曲列表竟然一卡一卡的,完全不像大厂出品。

找来找去,最后用上了开源的shuttle,使用起来感觉还不错,但唯有两点让我很不爽,一是部分中文歌曲名显示乱码,二是没有自动去除重复的歌曲,即使用上收费的shuttle2也没解决这个问题。既然是开源的,索性自己动手解决。

二、使用github action

由于本地没有纯安卓的开发环境,又不想为了搞这个破东西装一大堆软件(因为特别抵触gradle这破东西,感觉maven秒它N条街),于是github action就派上用场了。github action,可以将项目编译,并自动生成可执行文件。
这个功能给没有安装编译环境的开发都来说真的是极大的便利,开发者可以把源码丢上github,然后action,让它自动在后台编译,并自动部署。所谓的CI/DI原来跟这差不多。
如果项目主界面没有显示action,需要注意以下几点:

  • 项目需要公开
  • 需要设置为默认项目==可能在yml里设置指定版本也行,没亲测==
  • 在项目根目,.github/workflows/xx.yml,yml文件必须规范,并且指定了触发条件,xx可随意。

    image-20231109011433009

参考配置文件

name: Android CI

on: [push,pull_request]
jobs:
  build:

    runs-on: ubuntu-20.04

    steps:
    - uses: actions/checkout@v3
    - name: set up JDK 1.8
      uses: actions/setup-java@v1
      with:
        java-version: 1.8
        distribution: 'temurin'
        cache: gradle

    - name: Grant execute permission for gradlew
      run: chmod +x gradlew
    - name: Build with Gradle
      run: ./gradlew build

    - name: Prepare App
      run: |
        mkdir -p ${{ github.workspace }}/apk/
        for file in `find ~ -name "*.apk" -print`; do
          mv "$file" ${{ github.workspace }}/apk/
        done
    - name: Upload App To Artifact
      uses: actions/upload-artifact@v3
      with:
        name: com.abc.test.apk
        path: ${{ github.workspace }}/apk/*

三、盲人摸象

github启用后,首先让它编译一下fork过来的源码,发现各种报错。报错不可怕,毕竟5年前的代码,有些插件可能都没提供了。但是,一连串的环境问题,折腾得让人怀疑人生。经过各种折腾,先后解决了gradle版本问题,签名问题,以及sdk版本问题,还有google的fireBase。其中fireBase又有新旧版本的区别,不要以为注册个帐号配置api key就完事了,它还依赖google服务,总之对于我来说步步是坑!好不容易把各种依赖和版本都对应上了,action build成功,狂喜。

既然用上了github action,自然也不用本地装开发工具了,github连vscode都提供给你了,平时简单改改代码,用github.dev问题不大。但是,这次翻车了,代码编辑器智能提示非常弱智,即使打错字也不会报错,即使用上了github codeSpace也一样。没有智能提示,加上对kotlin又不熟悉,完全是盲人摸象的方式,效率非常低。没有调试功能,改完代码每次提交后action编译还要5到8分钟,然后到手机上测试,输出日志到log.txt做分析,非常痛苦。。。

四、最后

经历一次又一次的失败后,终于把这个开源的播放器改成自己想要的了,虽然不完美,但是也基本满足自己使用。主要实现的功能:

  • 解决中文乱码问题(其实就是用dispalyName替换原来的name)
  • 去重(kotlin里大量用到了javaRX ,其中有个DistinctBy(xx)可以按需过滤重复的歌曲)
  • shuttle1.0源码中竟然还有付费的版本,我直接去掉了(一直以为作者2.0版本才要付费)

    public static boolean isUpgraded(ShuttleApplication application, SettingsManager settingsManager) {
            if(1==1)
                return true;
            // no updgrade at all!!
            if (application.getIsUpgraded()) {
                return true;
            }
    
            if (settingsManager.getIsLegacyUpgraded()) {
                return true;
            }
    
            try {
                return application.getPackageName().equals(Config.PACKAGE_NAME_PRO);
            } catch (Exception ignored) {
            }
    
            //If something goes wrong, assume the user has the pro version
            return true;
        }

    源码地址:https://github.dev/root6819/ShuttlePlus

评论已关闭