Android launcher -- launcher源码修改 2

来源:互联网 发布:数据安全管理规定 编辑:程序博客网 时间:2024/05/29 07:50

launcher源码修改 2

替换报名

1、将包名package=”com.android.launcher”换成自己的定义的包名,如:
这里写图片描述


2、并将文件移植到com.xuhun.android.launcher包文件夹中:
这里写图片描述


3、报错Error:(1780, 59) 错误: 程序包com.android.launcher.R不存在
将com.android.launcher.R替换成com.xuhun.android.launcher.R;或者直接删除”com.android.launcher.”
这里写图片描述

这里写图片描述


4、在设备(手机)中应用ID还是com.android.launcher。
在cmd.exe中adb shell -> pm -p com.android.launcher查询
这里写图片描述

需要修改build.gradle(Module:app)中的
applicationId “com.xuhun.android.launcher”
这里写图片描述
再pm -p com.android.launcher查询:
这里写图片描述


5、报错Error:(11) No resource identifier found for attribute ‘defaultScreen’ in package ‘com.android.launcher’
需要修改布局文件中xmlns:launcher=”http://schemas.android.com/apk/res/com.android.launcher”替换成xmlns:launcher=”http://schemas.android.com/apk/res/com.xuhun.android.launcher”或
xmlns:launcher=”http://schemas.android.com/apk/res-auto”
这里写图片描述

这里写图片描述

重建工程Project
这里写图片描述

默认布局

1、布局文件xml

default_workspace.xml

<favorites xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher">    <search        launcher:screen="1"        launcher:x="0"        launcher:y="0" />    <favorite        launcher:packageName="com.android.contacts"        launcher:className="com.android.contacts.DialtactsActivity"        launcher:screen="1"        launcher:x="0"        launcher:y="3" />    <favorite        launcher:packageName="com.android.contacts"        launcher:className="com.android.contacts.DialtactsContactsEntryActivity"        launcher:screen="1"        launcher:x="1"        launcher:y="3" />    <favorite        launcher:packageName="com.android.browser"        launcher:className="com.android.browser.BrowserActivity"        launcher:screen="1"        launcher:x="2"        launcher:y="3" />    <favorite        launcher:packageName="com.google.android.apps.maps"        launcher:className="com.google.android.maps.MapsActivity"        launcher:screen="1"        launcher:x="3"        launcher:y="3" />    <favorite        launcher:packageName="com.android.mms"        launcher:className="com.android.mms.ui.ConversationList"        launcher:screen="1"        launcher:x="0"        launcher:y="2" />    <favorite        launcher:packageName="com.android.vending"        launcher:className="com.android.vending.AssetBrowserActivity"        launcher:screen="1"        launcher:x="3"        launcher:y="2" /></favorites>

xml布局读取

LauncherProvider.java的内部类DatabaseHelper中

/** * Loads the default set of favorite packages from an xml file. * * @param db The database to write the values into */private int loadFavorites(SQLiteDatabase db) {    Intent intent = new Intent(Intent.ACTION_MAIN, null);    intent.addCategory(Intent.CATEGORY_LAUNCHER);    ContentValues values = new ContentValues();    PackageManager packageManager = mContext.getPackageManager();    int i = 0;    try {        XmlResourceParser parser = mContext.getResources().getXml(R.xml.default_workspace);        AttributeSet attrs = Xml.asAttributeSet(parser);                XmlUtils.beginDocument(parser, TAG_FAVORITES);        final int depth = parser.getDepth();        int type;        while (((type = parser.next()) != XmlPullParser.END_TAG ||                parser.getDepth() > depth) && type != XmlPullParser.END_DOCUMENT) {            if (type != XmlPullParser.START_TAG) {                continue;            }            boolean added = false;            final String name = parser.getName();            TypedArray a = mContext.obtainStyledAttributes(attrs, R.styleable.Favorite);            values.clear();            values.put(LauncherSettings.Favorites.CONTAINER,                    LauncherSettings.Favorites.CONTAINER_DESKTOP);            values.put(LauncherSettings.Favorites.SCREEN,                    a.getString(R.styleable.Favorite_screen));            values.put(LauncherSettings.Favorites.CELLX,                    a.getString(R.styleable.Favorite_x));            values.put(LauncherSettings.Favorites.CELLY,                    a.getString(R.styleable.Favorite_y));            if (TAG_FAVORITE.equals(name)) {                added = addShortcut(db, values, a, packageManager, intent);            } else if (TAG_SEARCH.equals(name)) {                added = addSearchWidget(db, values);            } else if (TAG_CLOCK.equals(name)) {                added = addClockWidget(db, values);            }            if (added) i++;            a.recycle();        }    } catch (XmlPullParserException e) {        LogHelper.errorLog(" Got exception parsing favorites.", e);    } catch (IOException e) {        LogHelper.errorLog(" Got exception parsing favorites.", e);    }    return i;}

XmlUtils.beginDocument报错,可用源码中方法替换:
这里写图片描述

修改主屏DEFAULT_SCREN

修改Launcher.java中DEFAULT_SCREN

default_workspace.xml中修改Apk图标位置:
launcher:screen=”0”//第几屏
launcher:x=”3”
launcher:y=”3”

Launcher3 中默认布局

文件:
这里写图片描述


布局读取InvariantDeviceProfile
这里写图片描述

原创粉丝点击