开始接触 Launcher3

关于官方 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 版本,修改为你的编译版本就行。


    开始接触 Launcher3_第1张图片
    错误-1
  • 第二个坑
    导入后报的第一个错:

    开始接触 Launcher3_第2张图片
    错误-2

    这个是因为5.1.1里,系统不认识 add-resource 这个标签:
    values/dimens.xml

     
     
     
    

    更改为:

    0dp     
    0dp      
    0dp
    

    values/strings.xml

    
    

更改为:

  
  • 第三个坑

    开始接触 Launcher3_第3张图片
    错误-3

    这个是因为 5.1.1 里面系统不能以这样的形式设置参数 :

    android:protectionLevel="system|signature"  
    

更改为如下:

android:protectionLevel="signatureOrSystem"

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

  • 第四个坑
    开始接触 Launcher3_第4张图片
    错误-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"

  • 第五个坑

开始接触 Launcher3_第5张图片
错误-6

你运行后发现: waht happened ?。怎么还是报错, doo't worry. 这个错是因为, 系统已经有一个这样子的自定义权限了,你要做的,就是更改下自定义权限的名字就可以:

更改为:





 

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




2,provider使用的时候


然后你运行:

开始接触 Launcher3_第6张图片
错误-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_第7张图片
起始屏
开始接触 Launcher3_第8张图片
菜单

你可能感兴趣的:(开始接触 Launcher3)