手把手教你打造一款个人专属Android桌面

实现方式两种

1.从头到尾写一个apk然后把系统的属性加上去,然后启动的时候默认就指定到这个apk的包名,他就启动,

2.我们基于Androidlauncher3的源码去做一个定制化的修改

分析一下这两种的区别,

自定义,要有丰富的Android开发经验,并且要对自定义控件比较熟悉 对事件分发处理一定要非常的熟悉,

 

 quickstep是快捷启动源码,核心源码在src里面,

allapps 是默认从底部划上来 

应用通知,默认应用,把主屏幕应用换一下

pixel是原生启动器,默认桌面,往上滑,所有的应用都出现了,

 

 allapps目录就是这个👆

search就是上面的搜索框,anim动画,badge桌面小图标,小圆点提示之类的东西,compat兼容低版本兼容,config一些配置  dragndrop就是核心的处理他的拖拽逻辑

 folder桌面文件夹,两个应用拖拽在一起

 graphics主要是一些图片处理 keyboard是日志,model 模型类 notification通知

pageindicators页面滑动指示器,popup弹窗

provider广播

shortcuts快捷方式 是否把你的apk添加到桌面?

states 状态改变,

touch触摸

util工具类  views自定义view  widget在launcher是非常注重的,微键就是widget

长按会弹出popup  核心最难的就是widget

其他这些东西都是某文件夹 itenm launcher

这个是android p 9.0.0_r61的源码, 

第一件事找到他的AndrodNan1feSt,Xml

 BackupAgent是一个备份的一个代理是继承Context的一个父类,不是继承applacation 这和我们普通app开发是有区别的 因为这里面有一个备份的一个代理,就是他可以...context 备份 数据存储,比较复杂,

onrestore恢复的时候,

onRestoreFinished备份的时候,恢复完成的时候,他就调用这个东西👇

activity有两个👇

 settingactivity其实就是他的设置,做app开发一般是用不到的 

有一些通知 桌面图标

 

还有一些fragment   还有一些参数传递之类的,动画呀等等,就是有些数据的存储 他是放在这个里面的 关于launcher的默认设置是在settingactivity里面,所以这个也不是重点

真正的重点是launcheractivity 启动模式是singleTask 是单一任务栈模式 是activity的一个启动模式,比如说是否弹出键盘,是否全屏,

这个里面加了也就是说你加了这些之后,他就可以识别到你是一个launcher的一个入口,就起这个作用

然后最核心的 launcher继承BaseBragginghrtivits 他是一个可以滑动的activity 允许支持拖拽,

BaseActivity实现了UserEventDclegate订阅的 UserEventDclegate他是用户事件,就是它可以处理任务事件的监听 主要做监听的一个东西

1.是一个activity 2.他具有滑动的属性,

布局👆

跟布局是LaUIncherRootView

最核心的有DragLayer WorkspacePa8eIndicator 然后下面是一个指示器👇

 

 all_apps其实就是这个底部了,

 hotseat就是下面的这一块 ,五个图标👇

如果想把指示器换掉,我们只需要把这一块代码换成我们自定义控件就可以

 DragLayer就是一个拖拽的一个图层,继承BaseDragLayer 又继承Insettab1eFrameLayout 也就是说他可以承载很多子布局的,

Workspace其实就是我们整个桌面的一个容器,他能够承载 从状态栏下面,一直到虚拟按键下面,这么高的范围都是他的Workspace

 DragLayer里面使用了DragController ,就是专门为拖拽定义了一个接口

Workspace他是有多个cellayout  cellayout 是我们每个页面显示几个app 比如他是显示5行5列的,这一个容器就是一个cellayout 长按占几格 你就知道他就是一个5行5列的一个布局

cellayout可以将他的item拖出去,也可以容纳拖进来的item 也就是说当前的容器他就是cellayout 它里面可以放这样很多的item 它可以接收 把外面的这个item拖进来,并且也可以接收把当前的item拖出去

 

 

 Drop& Drag模型,这个模型是一个比较核心的,在我们android sdk里面其实也是有 Drop& Drag一个框架的,其实他这个框架是从android底层里面的 Drop& Drag里面把他抽离出来的,

是底层核心,

DragSource主要是他里面处理的一些拖动对象的一些容器

比如AIIAppGridView, Workspace他都可以来处理

DropTarget 他可以放被拖动的容器 比如说在launcher中有folder,Workspace bottombar等

这个Dragsource它里面承载的既可以Dragsource也可以是DropTarget

如果说自己要去实现一个拖拽的功能的话,其实我们可以用DragSource和DropTarget这两个类把他直接单独拉出来 再做一些变更,因为他里面无非传入的是一些view

 下载源码运行的时候会报各种错,主要是

 

 gradle编译版本可以点开help about里面的 就是当前Android studio版本

 如果说你是2020.3.1的话,那么你用7.0就可以

如果你是低版本的,比如说你是3.5.3 你就用3.5.3

如果你不加 他会编译报错, 他会说build protos他找不到,所以说要把这几个加上,加上之后你再重新编译他基本上就没什么错了 他不报错之后然后你就可以正常运行。

设置---应用和通知---默认启动应用​​​​​​​

 换成Launcher3

 手把手教你打造一款个人专属Android桌面_哔哩哔哩_bilibili

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android平台上使用FFmpeg需要进行交叉编译,生成适用于Android的FFmpeg库,并将其打包到apk中。以下是手把手你搭建ffmpeg命令行运行环境的步骤: 1.下载NDK 首先需要下载NDK(Native Development Kit),NDK是一个工具包,用于开发C/C++应用程序的原生库。Android Studio自带NDK,也可以从官网下载。 2.下载FFmpeg源代码 从FFmpeg的官网下载源代码,然后解压到本地。 3.配置交叉编译环境 在FFmpeg源代码根目录下创建一个build_android.sh文件,输入以下内容: ```bash #!/bin/bash NDK=$HOME/Android/Sdk/ndk-bundle # NDK路径 SYSROOT=$NDK/platforms/android-21/arch-arm/ # Android SDK路径 TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 # 工具链路径 function build_one { ./configure \ --prefix=$PREFIX \ --enable-shared \ --disable-static \ --disable-doc \ --disable-ffmpeg \ --disable-ffplay \ --disable-ffprobe \ --disable-ffserver \ --disable-debug \ --disable-network \ --disable-avdevice \ --disable-postproc \ --disable-symver \ --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \ --target-os=android \ --arch=arm \ --sysroot=$SYSROOT \ --extra-cflags="-Os -fpic $ADDI_CFLAGS" \ --extra-ldflags="$ADDI_LDFLAGS" \ $ADDITIONAL_CONFIGURE_FLAG make make install } CPU=arm PREFIX=$(pwd)/android/$CPU ADDI_CFLAGS="-marm" ADDI_LDFLAGS="" build_one ``` 其中,NDK是NDK的路径,SYSROOT是Android SDK的路径,TOOLCHAIN是工具链的路径。 4.执行交叉编译命令 在终端中输入以下命令: ```bash chmod +x build_android.sh ./build_android.sh ``` 等待编译完成。编译完成后,在FFmpeg源代码根目录下会生成一个android目录,其中包含了交叉编译生成的FFmpeg库。 5.创建Android Studio项目 打开Android Studio,创建一个新项目。在app/build.gradle文件中添加以下代码: ```groovy android { compileSdkVersion 28 defaultConfig { applicationId "com.example.ffmpegdemo" minSdkVersion 21 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } externalNativeBuild { cmake { cppFlags "" abiFilters "armeabi-v7a" arguments "-DANDROID_ARM_NEON=TRUE" } } sourceSets.main { jniLibs.srcDirs = ['src/main/jniLibs'] } ndk { abiFilters "armeabi-v7a" } } ``` 其中,externalNativeBuild和ndk是用于指定使用交叉编译生成的库的配置。 6.将FFmpeg库打包到apk中 将交叉编译生成的库复制到项目的app/src/main/jniLibs/armeabi-v7a/目录下。在app/build.gradle文件中添加以下代码: ```groovy android { sourceSets { main { jniLibs.srcDirs = ['src/main/jniLibs'] } } } ``` 然后在终端中输入以下命令: ```bash ./gradlew assembleDebug ``` 等待打包完成。打包完成后,在项目的build/outputs/apk/debug/目录下会生成一个apk文件,其中包含了FFmpeg库。 至此,就完成了搭建ffmpeg命令行运行环境的所有步骤。可以通过在MainActivity中执行FFmpeg命令来测试FFmpeg是否正常工作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值