Android 原生音乐播放器Music源码分析之一

最近一直想学习多媒体,作为初学者,只能慢慢分析android 源码。这里我会从Music播放器入手开始一步一步分析。

Music.apk的代码所在目录为packages/apps/Music/

首先看一下Android.mk文件(Android.mk是Android提供的一种makefile文件,用来指定诸如编译生成so库名、引用的头文件目录、需要编译的.c/.cpp文件和.a静态库文件等)

<span style="font-family:Times New Roman;">
1LOCAL_PATH:= $(call my-dir) /*用来定位源文件的位置,$(call my-dir)的作用就是返回当前目录的路径*/
2include $(CLEAR_VARS) /*清除一些变量的值,但是LOCAL_PATH除外*/
3
4LOCAL_MODULE_TAGS := optional /*模块在所有版本eng、user和tests下都编译*/
5
6LOCAL_SRC_FILES := $(call all-java-files-under, src) \  /*编译的源文件,src目录下的所有java文件和指定aidl文件*/
7	src/com/android/music/IMediaPlaybackService.aidl
8
9LOCAL_PACKAGE_NAME := Music /*编译成的包名,即apk文件名*/
10
11LOCAL_PROGUARD_FLAG_FILES := proguard.flags
12
13include $(BUILD_PACKAGE) /*编译成应用包*/
14
15# Use the folloing include to make our test apk. 
16include $(call all-makefiles-under,$(LOCAL_PATH)) /* 编译当前路径下的所有.mk文件*/
</span>

这里特别说明下LOCAL_PROGUARD_FLAG_FILES

Java的字节码一般是非常容易反编译的。为了很好的保护Java源代码,我们往往会对编译好的class文件进行混淆处理。ProGuard的主要作用就是混淆。当然它还能对字节码进行缩减体积、优化等,但那些对于我们来说都算是次要的功能。proguard在Android中的几种使用方法:

 (1).指定不需要混淆的native方法与变量的proguard.flags文件

           如:LOCAL_PROGUARD_FLAG_FILES := proguard.flags

  (2). 制定编译的工程,不要使用代码混淆的工具进行代码混淆

          如:LOCAL_PROGUARD_ENABLED := disabled

接下来分析AndroidManifest.xml文件

39        <activity android:name="com.android.music.MusicBrowserActivity" /*主控制界面*/
40            android:theme="@android:style/Theme.NoTitleBar"
41            android:exported="true"
42        >
43            <intent-filter>
44                <action android:name="android.intent.action.MAIN" /> /*Music应用的入口*/
45                <action android:name="android.intent.action.MUSIC_PLAYER" />
46                <category android:name="android.intent.category.DEFAULT" />
47                <category android:name="android.intent.category.LAUNCHER" />
48                <category android:name="android.intent.category.APP_MUSIC" />
49            </intent-filter>
50        </activity>
接下来简单介绍下AndroidManifest.xml文件中的几种比较重要的组件,后面分析java代码时再详细介绍。

      TrackBrowserActivity.java          音乐列表界面
      PlaylistBrowserActivity.java          播放列表界面
      AlbumBrowserActivity.java     专辑浏览界面
      ArtistAlbumBrowserActivity.java          艺术家浏览界面

上面这几个都是关于列表显示UI界面。下面两个是音乐播放器较为重要的两个组件:

       MediaPlayerbackActivity.java          音乐播放界面
      MediaPlaybackService.java          音乐播放器服务

另外还有一些以对话框形式呈现出来的UI界面显示组件:

         RenamePlaylist.java          重命名播放列表界面
       CreatePlaylist.java          新建播放列表界面
       DeleteItems.java     删除提示框界面
       ScanningProgress.java          音乐描扫进度显示界面

 剩下的比较重要的就是

   MediaAppWidgetProvider.java          Widget实现类
    MusicPicker.java          音乐选择界面,这是给其它应用程序调用的界面。
    MusicUtils.java          播放器公共方法类

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值