美文网首页
开始接触 Launcher3

开始接触 Launcher3

作者: 消沉沉 | 来源:发表于2016-11-28 23:20 被阅读2472次

关于官方 Launcher3 导入编译的一些坑

官方的 Launcher3 是连同系统一起编译进去的,想要拿出来用Android Studio编译是可以的,但是中间有一些坑是需要注意的,这里我先记录下自己踩下去埋好的坑。

1,首先你需要一个 launcher3 项目包:

可以这里下载

2,导入项目

下载下来是一个 Module 所以你需要先自己建一个 Project 或者在已经现成的项目里面导入 Launcher3

  • 第一个坑

    Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVERRIDE environment variable to "f84cd2e32a90423cbd4ca67e7c1fe2447a2ddabe"
    

    这个是我自己系统的一个坑,原因是找不到Plugin 版本,修改为你的编译版本就行。


    错误-1
  • 第二个坑
    导入后报的第一个错:

    错误-2
    这个是因为5.1.1里,系统不认识 add-resource 这个标签:
    values/dimens.xml
     <add-resource type="dimen" name="custom_cling_margin_top" />
     <add-resource type="dimen" name="custom_cling_margin_right" />
     <add-resource type="dimen" name="custom_cling_margin_left" />
    

    更改为:

    <dimen  name="custom_cling_margin_top">0dp</dimen>     
    <dimen name="custom_cling_margin_right">0dp</dimen>      
    <dimen name="custom_cling_margin_left">0dp</dimen>
    

    values/strings.xml

    <add-resource type="string" name="default_folder_name" />
    

更改为:

  <string name="default_folder_name"></string>
  • 第三个坑

    错误-3
    这个是因为 5.1.1 里面系统不能以这样的形式设置参数 :
    android:protectionLevel="system|signature"  
    

更改为如下:

android:protectionLevel="signatureOrSystem"

假设你的系统现在launcher不是以com.android.launher3为命名的,那么到这里你编译就可以运行通过了,就可以看到文章最后的结果。
Over!
(自行跳过后面内容....)

  • 第四个坑
    错误-4
    这个是因为你的系统已经有一个包名为:
    com.android.launcher3
    这个需要你更改下系统的包名改为如下(or waht you want do ):
    com.android.launcher4

之后会提示你这样:

错误-5
不要担心,找不到R文件,我们改了包名,相对于的R文件包路径就需要 更改 或者 导入
比如这个类R文件是这样:
import com.android.launcher3.R;
把他改成你修改的包名:
import com.android.launcher4.R;

涉及到了系统,所以会有多个类的R文件找不到,我们只要根据系统提示更改一下包名就可以。

还有一点很重要
如果不更改applicationId还是会提示错误,你还需要更改applicationId:**

   applicationId "com.android.launcher3"

改为:
applicationId "com.android.launcher4"

  • 第五个坑
错误-6
你运行后发现: waht happened ?。怎么还是报错,doo't worry. 这个错是因为,系统已经有一个这样子的自定义权限了,你要做的,就是更改下自定义权限的名字就可以:
更改为:
<permission    android:name="com.android.launcher3.permission.PRELOAD_WORKSPACE"  />
<permission    android:name="com.android.launcher.permission.INSTALL_SHORTCUT"   />
<permission    android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"    />
<permission    android:name="com.android.launcher3.permission.READ_SETTINGS_2"    />
<permission    android:name="com.android.launcher3.permission.WRITE_SETTINGS_2"    />
<permission    android:name="com.android.launcher3.permission.RECEIVE_LAUNCH_BROADCASTS_2"    /> 

然后使用的时候也要对应我们更改的权限名字,总共有两个地方:
1,使用的时候

<uses-permission android:name="com.android.launcher3.permission.READ_SETTINGS_2"/>
<uses-permission android:name="com.android.launcher3.permission.WRITE_SETTINGS_2"/>
<uses-permission android:name="com.android.launcher3.permission.RECEIVE_LAUNCH_BROADCASTS_2"/>

2,provider使用的时候

<provider   
    android:name="com.android.launcher3.LauncherProvider"    
    android:authorities="com.android.launcher3.settings"        
    android:exported="true"
    android:readPermission="com.android.launcher3.permission.READ_SETTINGS_2"      
    android:writePermission="com.android.launcher3.permission.WRITE_SETTINGS_2"/>

然后你运行:

错误-7

梁静茹:梦醒时分响起....
别担心哈,这是因为,** provider** 在使用的时候,** authorities**需要全局唯一,系统默认已经把这个名字个使用了,你需要做的只是更改他的名字:

android:authorities="com.android.launcher3.settings"       

改为(或者你喜欢的命名):

android:authorities="com.android.launcher3.settingss"        

注意了!
注意了!
注意了!

这时候运行已经可以安装到系统里面了,但还是会报错:

java.lang.SecurityException: Permission Denial: opening 
provider com.android.launcher3.LauncherProvider from 
ProcessRecord{2b98e098 9053:com.android.launcher4/u0a183} 
(pid=9053, uid=10183) 
requirescom.android.launcher3.permission.READ_SETTINGS or 
com.android.launcher3.permission.WRITE_SETTINGS

看这个错,第一反应可定会觉得是权限命名或者没有加载权限。实际上是这样子的,你的配置是没有错的,只是漏掉了还需要更改的一个地方:
打开:com.android.launcher3.config.ProviderConfig.java
这个类只有一个静态变量:

public static final String AUTHORITY = "com.android.launcher3.settings";

你没错,就是这里,我们还需要更改成跟我们对于的** authorities**值:

public static final String AUTHORITY = "com.android.launcher3.settingss";   

至此,结束。

运行:

起始屏 菜单

相关文章

  • 开始接触 Launcher3

    关于官方 Launcher3 导入编译的一些坑 官方的 Launcher3 是连同系统一起编译进去的,想要拿出来用...

  • Launcher3 一键改变Icon Shape 原理浅析

    # Launcher3 一键改变Icon Shape 原理浅析 在Android O Launcher3 Goo...

  • java 反射调用构造函数

    Java反射Android Launcher3 最近修改官方的 Launcher3 启动器,需求是要在桌面上添加自...

  • Android M Launcher3监听packages变化实

    前言 android L开始launcher3对于package变化的监听发生了改变,M之前都是通过Package...

  • 开始接触阅读

    和孩子进行交流是读写的重要一环,我们在让孩子开始接触阅读的时候,必须要和孩子尽可能多的交流: 从广告、杂志上剪...

  • 开始接触完颜

    最近浏览朋友圈,发现一位衡中学子的家长在最近半个月总是发布关于~完颜古方的消息,看了一些有关完颜古方的介绍...

  • 开始接触简历

    今年最大的不同经历,大概要算因为部门人员变动,我开始接触投递过来的简历,从众多的简历中筛查出条件的人,给他们面试机...

  • 开始接触管理

    渐渐的,越来越能理解老板的立场和不易了,很多事情都能以老板的角度去思考和衡量,也渐渐明白为什么员工和老板是对...

  • 开始接触“理财”

    人都说是学习理财,我都不敢说是学习理财,只能说接触理财。在闺蜜的带领下买了一支白酒的基金,买了小两百块,有跌又涨,...

  • Android O 主界面和所有应用界面行和列的修改

    Android 8.1中\alps\packages\apps\Launcher3\src\com\android...

网友评论

      本文标题:开始接触 Launcher3

      本文链接:https://www.haomeiwen.com/subject/nqiopttx.html