1、DEBUG版本删除某一APP模块:
adb shell
cd system/app
ls -l
rm XXXX.apk
exit
2、添加新模块时注意:
加入新模块 需要在app文件夹目录加入一个.mk文件,以便用./mk来编译 即Android.mk
然后在工程目录bulid/target/product/common.mk文件中追加加入新模块名称,例如添加Compass模块
...\
...\
Compass
Compass模块中mk文件内容:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := Compass(APP文件夹名)
LOCAL_STATIC_JAVA_LIBRARIES := \ (需要的包)
android-common \
android-support-v4
include $(BUILD_PACKAGE)
3、开关机动画
设置默认为第几套开关机动画:
涉及文件:
frameworks/base/cmds/bootanimation/BootAnimation.cpp 修改logoNum 和 defaultLogoNum 初值
mediatek/external/ipod/bootlogo.cpp 修改logoNum 和 defaultLogoNum 初值
mediatek/external/boot_logo_updater/boot_logo_updater.cpp 修改logoNum 和 defaultLogoNum 初值
编辑 base ipod boot_logo_updater三个模块
添加新的开关机动画:
举例添加新开关机UI,切换指令2663,单卡模式,客户4下
涉及文件:
packages/apps/SwitchAnimation/src/com/wyeda/switchanimation/SwitchBootAnimation.java
1、 添加UI控制变量:
private static final int SINGLE9500_2663 = 12;//这里的数值取决于是第几套UI,我的工程里目前已存在11套UI,故这里设值为第12套UI
2、在onReceive方法中合适位置追加else if语句
@Override
public void onReceive(Context context, Intent intent) {
mContext = context;
String host = intent.getData() != null ? intent.getData().getHost() : null;
//....省略部分代码
if(host != null)
{
......//省略部分代码
else if(host.equals("6264"))
{
writeLogoFlag(SINGLE9500_6264);
}
else if(host.equals("2663")) //
{ // 这几行是追加的代码,用于响应切换指令
writeLogoFlag(SINGLE9500_2663); //
} //
......//以下省略
}
}
3、在checkLogoSwitch方法中设置该套UI属于哪一个客户
本套UI属于客户4,就才case 4中添加logo_num==12的或语句
private boolean checkLogoSwitch(int logo_num)
{
......//省略部分代码
switch((int)host_flag){
......//省略部分代码
case 4:if(logo_num == 0 || logo_num == 1 || logo_num == 2 || logo_num == 3 || logo_num == 4 || logo_num == 10 || logo_num == 11 || logo_num == 12){result = true;}break;
......//省略部分代码
} ......//省略部分代码}
packages/apps/SwitchAnimation/AndroidManifext.xml
这个文件中主要注册一个新的指令2663,它属于UI切换指令。
<!--切换动画-->
<receiver android:name=".SwitchBootAnimation">
<intent-filter>
<action android:name="android.provider.Telephony.SECRET_CODE" />
<!-- client id -->
<data android:scheme="android_secret_code" android:host="6629" />
<data android:scheme="android_secret_code" android:host="18020" />
<data android:scheme="android_secret_code" android:host="20766" />
<data android:scheme="android_secret_code" android:host="36095" />
<data android:scheme="android_secret_code" android:host="46349" />
<data android:scheme="android_secret_code" android:host="52974" />
<data android:scheme="android_secret_code" android:host="69842" />
<data android:scheme="android_secret_code" android:host="73857" />
<data android:scheme="android_secret_code" android:host="89075" />
<data android:scheme="android_secret_code" android:host="91352" />
<data android:scheme="android_secret_code" android:host="07543" />
<data android:scheme="android_secret_code" android:host="11975" />
<data android:scheme="android_secret_code" android:host="12934" />
<!-- logo ui -->
<data android:scheme="android_secret_code" android:host="0000" />
<data android:scheme="android_secret_code" android:host="9500" />
<data android:scheme="android_secret_code" android:host="9502" />
<data android:scheme="android_secret_code" android:host="9501" />
<data android:scheme="android_secret_code" android:host="9503" />
<data android:scheme="android_secret_code" android:host="2728" />
<data android:scheme="android_secret_code" android:host="6577" />
<data android:scheme="android_secret_code" android:host="6160" />
<data android:scheme="android_secret_code" android:host="6767" />
<data android:scheme="android_secret_code" android:host="9449" />
<data android:scheme="android_secret_code" android:host="5688" />
<data android:scheme="android_secret_code" android:host="5622" />
<data android:scheme="android_secret_code" android:host="6264" />
<data android:scheme="android_secret_code" android:host="2663" /> (追加了这一行)
<data android:scheme="android_secret_code" android:host="0220" />
<data android:scheme="android_secret_code" android:host="0230" />
<data android:scheme="android_secret_code" android:host="0240" />
<data android:scheme="android_secret_code" android:host="0250" />
</intent-filter>
</receiver>
mediatek/external/boot_logo_updater/Android.mk
追加boot_logo_12这个项,即15行至末行,与前面已存在的相比,只有LOCAL_MODULE有改变
########################################################
ifneq ($(strip $(MTK_PLATFORM)),)
include $(CLEAR_VARS)
LOCAL_MODULE := boot_logo_11
LOCAL_MODULE_CLASS := DATA
LOCAL_MODULE_PATH := $(TARGET_OUT)/media/images
LOCAL_GENERATE_CUSTOM_FOLDER := custom:lk/logo
LOCAL_SRC_FILES := custom/$(LOCAL_MODULE)
include $(BUILD_PREBUILT)
endif
########################################################
ifneq ($(strip $(MTK_PLATFORM)),)
include $(CLEAR_VARS)
LOCAL_MODULE := boot_logo_12
LOCAL_MODULE_CLASS := DATA
LOCAL_MODULE_PATH := $(TARGET_OUT)/media/images
LOCAL_GENERATE_CUSTOM_FOLDER := custom:lk/logo
LOCAL_SRC_FILES := custom/$(LOCAL_MODULE)
include $(BUILD_PREBUILT)
endif
mediatek/custom/common/lk/logo/rules.mk
追加下面这一行在合适位置,用于关联开机第二帧的图片
$(BMP_TO_RAW) $(BOOT_LOGO_IMAGE_12) $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_kernel_12.bmp
mediatek/BootAnimation/logoCopy.mk
这个文件中记录着每套开关机动画的开机动画包、关机动画包、声音文件路径
mediatek/BootAnimation
这个文件夹下保存这开关机动画包、声音文件
mediatek/config/lcsh72_we_jb3/ProjectConfig.mk
这个文件用于找到保存开机第二帧图片的文件夹名称,搜索logo = 这个字符串,找到的文件夹名称就是当前保存图片的文件夹
/frameworks/base/cmds/bootanimation/BootAnimation.cpp
在合适位置追加
开机动画
else if(logoNum == 12){
err = mZip.open("/system/media/bootanimation12.zip");
}
和 关机动画
else if(logoNum == 12){
err = mZip.open("/system/media/shutanimation12.zip");
}
/mediatek/external/boot_logo_updater/boot_logo_updater.cpp
在合适位置追加
变量:
const char LOGO_PATH_12[] = "/system/media/images/boot_logo_12";
控制语句:
else if(logoNum == 12){
logo_path = LOGO_PATH_12;
}
/mediatek/external/ipod/bootlogo.cpp
合适位置追加
变量:
const char LOGO_PATH_12[] = "/system/media/images/boot_logo_12";
控制语句:
else if(logoNum == 12){
logo_path = LOGO_PATH_12;
}
frameworks/base/core/java/android/os/ProjectManager.java
添加变量
private static final int UI9500_2663 = 12;
添加方法
/**
* 2663
* @hide
*/
public static boolean isP2663()
{
return (readLogoNum() == UI9500_2663);
}
以便修改蓝牙名称,版本号,基带版本号等
4、修改蓝牙、型号名称
涉及文件:
1、 frameworks/base/core/java/android/os/ProjectManager.java
getBlueToothName()获取蓝牙名称
getDeviceMode()型号
getProductName()产品名称
getBuildNumber()内部版本号
getVersionNum()版本号
getPlatformMode()基带版本号
getBrand()品牌
2、 mediatek/frameworks-ext/base/core/java/android/bluetooth/BluetoothAdapter.java 在getName()方法中添加型号名称,以下语句
|| "S9500".equals(mService.getName())
public String getName() {
try {
Log.d("getName()", "persist.sys.story_bluetooth" + android.os.SystemProperties.getInt("persist.sys.story_bluetooth", 0));
if(android.os.SystemProperties.getInt("persist.sys.story_bluetooth", 0) == 0){
if("GT-N7102".equals(mService.getName())
|| "GT-N7100".equals(mService.getName())
|| "ANDROID BT".equals(mService.getName())
|| "I950 BT".equals(mService.getName())
|| "GT-I9500".equals(mService.getName())
|| "GT-I9502".equals(mService.getName())
|| "KONSU".equals(mService.getName())
|| "KingMan".equals(mService.getName())
|| "ZH616".equals(mService.getName())
|| "mango".equals(mService.getName())
|| "S9500".equals(mService.getName())) {
if(!android.os.ProjectManager.getBlueToothName().equals(mService.getName())){
setCurLogoBTName(android.os.ProjectManager.getBlueToothName());
}
return android.os.ProjectManager.getBlueToothName();
} else {
return mService.getName();
}
}else {
return mService.getName();
}
} catch (RemoteException e) {Log.e(TAG, "", e);}
return null;
}
5、编译模块找不到符号:
删除三个缓存文件:
/out/target/product/lcsh72_we_jb3/system/app/模块名.apk
/out/target/product/lcsh72_we_jb3/obj/APPS/模块名_intermediates
/out/target/common/obj/APPS/模块名_intermediates
6、adb devices 找到设备:
sudo adb kill-server
sudo adb start-server
adb devices
7、本地版本恢复到指定10版本:
svn up -r 10