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