Android

Android设置Launcher App

2018-11-30  本文已影响0人  月然暄喆

1、应用设置

在应用的AndroidManifest.xml文件中的作为Home界面的Activity的intent-filter节点中添加如下代码:

<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />

2、打包设置

将应用打包成build版本,将apk复制到/system/priv-app/应用名称的文件夹/中,查看apk中有没有so文件,如果有,将so文件复制到/system/lib/中,并在apk同级目录中新建/lib/arm/文件夹,创建刚刚导入os文件的软链接。

3、修改源代码

frameworks/base/core/java/com/android/internal/app/ResolverActivity.java

3.1 在ResolveListAdapter中添加getDefaultHomePosition(String packageName)方法,用于获取默认home app在List<DisplayResolveInfo> 中的位置,代码如下:


code.png

3.2 在ResolverActivity中添加设置默认app的方法setupDefaultLauncher(),代码如下:

    //用于记录默认home app是否设置过
    private static final String DEFAULT_HOME = " home app包名";
    private void setupDefaultLauncher() {
        String first = "";
        try{
            first =  SystemProperties.get(DEFAULT_HOME);
        }catch(Exception e){
            Log.w(TAG,"exception error get DEFAULT_HOME");
        }
        //判断默认home 是否设置过,如果获取的字符串为空代表,未设置,否则return不在进行设置
        if (!TextUtils.isEmpty(first)) {
            return;
        }
        //使用包名获取所需设置的默认home app在ResolveListAdapter中的位置
        int position = mAdapter.getDefaultHomePosition("home app包名");
        //如果不存在则return
        if (position == -1) {
            if (DEBUG)
            Log.w(TAG,"not find default Home");
            return;
        }
        //设置默认home app后,则添加记录
        try{
            SystemProperties.set(DEFAULT_HOME,DEFAULT_HOME);
        }catch(Exception e){
            Log.w(TAG,"exception error set DEFAULT_HOME");
        }
        //设置默认home app,并跳转
        startSelected(position, true, true);
        //结束此activity
        dismiss();
    }

3.3 为了保证mAdapter被初始化 setupDefaultLauncher()的调用添加到ResolverActivity的onCreate函数中,代码如下:

int count = mAdapter.mList.size();
//添加的代码
setupDefaultLauncher();
//原有逻辑
//如果系统中home app大于1
if (count > 1 || (count == 1 && mAdapter.getOtherProfile() != null)) {
    //初始化代码
    .........
//如果home app等于1则设置唯一的home app为Home
 } else if (count == 1) {
       ........
 }

4 编译framework代码

$cd framework/base 
$mm

执行如下命令:

$adb remount
$adb push framework-res.apk /system/framework/
$adb push framework.jar /system/framework/
$adb push services.jar /system/framework/ (如果有修改的话)

以命令
注意:有的系统编译framework后还生成了secondary_framework.jar,也需要push。

5 运行

make snod生成新的system.img,然后使用adb进行刷机。

6 需要注意的问题:

6.1 Android应用里面通过gradle引用的第三方库中如果含有so库,也需要将这些文件拷贝到/system/lib文件中
6.2 可以使用git Bush查看so文件是32位还是64位,决定放进/system/lib还是/system/lib64中,命令为file *
6.3 查看应用中使用到的so文件可以通过解压apk文件,查看里面的libs文件夹中的文件。

上一篇 下一篇

猜你喜欢

热点阅读