Android5.0系统 知识点总结(持续更新)


 
    人生最可怕的,是比你优秀的人却比你更努力。
 
    永远不要觉得别人望尘莫及,要做的,只是每天进步一点点, 加油!

一、编译指令
1、进入项目工作目录
2、修改工程文件权限 chmod 777 -R ./(*)
3、更新环境变量
 
  source build/envsetup.sh
4、执行指令:lunch full_gxq6580_we_l-eng,选择工程名
5、编译工程指令:make -j8 2>&1 | tee build.log
6、若要编译模块,则使用
 
    mmm路径名
 
    例如编译Launch3
 
    mmm packages/apps/Launcher3
7、若要打包systemimage
 
    make systemimage

注:若开启一个新的终端,一定要首先运行3、4指令,然后再使用其他指令

二、adb的使用
1、把adb_usb.ini文件放在隐藏目录.android下;
2、使用如下指令开启adb
 
    sudo adb kill-server
 
    sudo adb start-server
 
    sudo adb devices
3、使用adb push 指令时,需要在指令前加sudo,如:
 
    sudo adb push out/target/product/gxq6580_we_l/system/app/Launcher3/Launcher3.apk
  更多常用ADB使用指令可以参考之前的博客:容易忽略的ADB命令(持续更新中)
三:framework下添加资源
Android5.1现在不能向目录framework/base/corre/res下添加资源,若要添加请添加到vendor/mediatek/proprietary/frameworks/base/res目录,然后在framework中就可以访问了,下面以添加default_lockscreen_wallpaper.jpg为例,说明如何添加资源;
 

例如:添加default_lockscreen_wallpaper.jpg图片
1、把图片放在vendor/mediatek/proprietary/frameworks/base/res/res/drawable-xhdpi目录下
2、注册资源id,有两种方法
 
    a、若在vendor/mediatek/proprietary/frameworks/base/res/res/values/public.xml注册资源id,该id必需是按照顺序一直累加,
 
            资源在系统framework框架、以及app都可以访问;
 
    b、若在vendor/mediatek/proprietary/frameworks/base/res/res/values/symbols.xml注册资源id,资源只能在framework框架层可以访问;
四:添加APK应用
 
Android 5.1 系统上添加APK步,以添加FactoryMode为例

 
  1.在/device/gxq/gxq6580_weg_l/ProjectConfig.mk中添加APK 开关,并设置ZF_FACTORYMODE_SUPPORT=yes
 
  2.在/packages/app/目录下新建FactoryMode目录
 
  3.在/device/mediatek/mt6580/device.mk文件末尾添加FactoryMode编译选项
 
          PRODUCT_PACKAGES+=FactoryMode
五:宏控制的路径
 
    android.os.FeatureOption
六:解决问题:默认为usb选项为MTP存储(U730)
涉及文件:
device/gxq/gxq6580_we_l/system.prop
device/gxq/gxq6580_weg_l/system.prop
packages/apps/Settings/src/com/mediatek/settings/deviceinfo/UsbSettingsExts.java
七:解决问题:修改音频参数
涉及文件:
vendor/mediatek/proprietary/custom/common/cgen/cfgdefault/audio_ver1_volume_custom_default.h
vendor/mediatek/proprietary/custom/gxq6580_we_l/cgen/inc/Custom_NvRam_LID.h
八:解决问题: 蓝牙随机生成地址(下载或者恢复工厂后,第一次打开蓝牙时随机生成一个地址,其他情况不会随机生成地址)
涉及文件:
vendor/mediatek/proprietary/external/nvram/libcustom_nvram/CFG_file_info.c
九:解决问题:充电显示100%的时候,仍然还在充电的问题
涉及文件:
kernel-3.10/drivers/power/mediatek/battery_common.c
十:解决问题: 开机led灯不亮
涉及文件:
device/mediatek/common/sepolicy/file.te
device/mediatek/common/sepolicy/file_contexts
device/mediatek/common/sepolicy/platform_app.te
device/mediatek/common/sepolicy/property.te
device/mediatek/common/sepolicy/property_contexts
device/mediatek/common/sepolicy/radio.te
device/mediatek/common/sepolicy/surfaceflinger.te
device/mediatek/common/sepolicy/system_app.te
external/sepolicy/bootled.te
十一:关机充电路径
 
U530/bootable/bootloader/lk/dev/logo    图片
 
U530/vendor/mediatek/proprietary/external/libshowlogo  --代码
十二:在3G网络下,信号强度0为<=-109dbm,1为<-103,2为<-97,3为<-89,4为>=-89(U560)
 
    vendor/mediatek/proprietary/frameworks/base/packages/FwkPlugin/src/com/mediatek/op/telephony/DefaultServiceStateExt.java
十三:相应模块状态栏颜色的改变(Android 5.0 以上系统)
 
    1:在SystemUi状态栏改为透明色(颜色值改为透明)
 
          frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
 
              #00000000
 
                  #00000000
 
    2:frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindow.java
 
                if (!mIsFloating )
 
    3:模块的配置文件找到相应的style,在style中添加@color/xxx属性
 
    注:ActivityManager.isHighEndGfx()是和手机的硬件配置有关系的,绘图状态栏颜色会消耗更多的内存,所以低配置的手机会把ActivityManager.isHighEndGfx() == false;        
 
    colorPrimary对应ActionBar的颜色。
 
    colorPrimaryDark对应状态栏的颜色
 
    colorAccent对应EditText编辑时、RadioButton选中、CheckBox等选中时的颜色。

十四:解决问题:添加自动生成imei
涉及文件:
device/gxq/gxq6580_we_l/ProjectConfig.mk
device/gxq/gxq6580_weg_l/ProjectConfig.mk
device/mediatek/common/sepolicy/radio.te
device/mediatek/mt6580/device.mk
vendor/mediatek/proprietary/packages/apps/EngineerMode/AndroidManifest.xml
vendor/mediatek/proprietary/packages/apps/EngineerMode/src/com/mediatek/engineermode/DefaultImeiOperation.java
vendor/mediatek/proprietary/packages/apps/EngineerMode/src/com/mediatek/engineermode/EngineerModeReceiver.java
vendor/mediatek/proprietary/packages/apps/EngineerMode/src/com/mediatek/engineermode/GPRS.java

十五:修改APN参数
 
    vendor/mediatek/proprietary/frameworks/base/telephony/etc/apns-conf.xml
十六:Android.mk 详解
 
    http://www.cnblogs.com/wainiwann/p/3837936.html
十七:查看屏幕的分辨率
 
    C100/packages/apps/Launcher3/src/com/android/launcher3/Launcher.java
 
    floatdensity = getResources().getDisplayMetrics().density;
 
    Log.i("lyj"," density ="+density+ "width="+getResources().getDisplayMetrics().widthPixels+" height="+getResources().getDisplayMetrics().heightPixels);
十八:自动生成IMIE 号
 
    vendor/mediatek/proprietary/packages/apps/EngineerMode/src/com/mediatek/engineermode/DefaultImeiOperation.java
十九:system分区大小修改(U1652H)
 
    device/mediatek/build/build/tools/ptgen/MT6580/partition_table_MT6580.xls
二十:验证自适应(内置虚拟键)
 
  如果想验证自己修改的模块是否支持自适应了可以去YourProject/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
 
  里面将mHasNavigationBar的值修改来验证:mHasNavigationBar =true,虚拟按键显示;mHasNavigationBar = false,虚拟按键隐藏
 
    编译frameworks/base/policy,然后push到手机验证。
二十一:ADB常用的命令
      查找手机安装应用的包名:adb shell pm list packages -f
 
    查看系统盘符:adbshell df
 
    查看Log 1:adbshell 2: logcat | grep "abc"
 
    删除应用:1:adbremount  2:adb shell  3:cdsystem/app    4:rm *.apk
 
    安装APK: adbinstall -r *.apk  或者 adb push*.apk  /system/app
二十二:android Material Design 动画效果
      //波纹有边界
 
    android:background="?android:attr/selectableItemBackground "
 
    //波纹超出边界
 
    android:background="?android:attr/selectableItemBackground Borderless"
 
    直接在控件属性上面加上即可
二十三:SettingsProvider默认值
   <integer name="def_screen_off_timeout">60000</integer>设置关屏超时时间的默认值 1min
   <integer name="def_screen_brightness">102</integer> 设置亮度的默认值
   <bool name="def_install_non_market_apps">false</bool>设置是否允许安装非Market应用程序的默认值
  这些设置的默认值都是由frameworks中的SettingsProvider从数据库中读取的frameworks/base/packages/SettingsProvider/res/values/defaults.xml这个文件就是用来存储

二十四:修改屏幕锁:
   (1)
  frameworks/base/packages/SettingsProvider/res/values/defaults.xml
  <integer name="def_screen_off_timeout">60000</integer>
  60000改成想要的时间如果是不锁为-1
  (2)
  frameworks/policies/base/phone/com/android/internal/policy/impl/KeyguardViewMediator.java
  private boolean mExternallyEnabled = true;
  将其修改成false
  这样更改就不会再进入休眠状态了

二十五:联系人 数据库常用字段
        numberString = cursor.getString(cursor.getColumnIndex(Phone.NUMBER));//联系人号码
	nameString = cursor.getString(cursor.getColumnIndex(Phone.DISPLAY_NAME));//联系人的姓名
	tiemsContact = cursor.getString(cursor.getColumnIndex(Phone.TIMES_CONTACTED));//与改联系人联系的次数
	lasttime = cursor.getString(cursor.getColumnIndex(Phone.LAST_TIME_CONTACTED));//最后联系的时间
        statrred = cursor.getString(cursor.getColumnIndex(Phone.STARRED));//是否是常用联系人(是否被收藏) 是(1),否(0)
	isvisible = cursor.getString(cursor.getColumnIndex(Phone.IN_VISIBLE_GROUP));//这个联系人在UI中是否可见; 是(1),否(0)
	hasphonenumber = cursor.getString(cursor.getColumnIndex(Phone.HAS_PHONE_NUMBER));//该联系人否至少有一个手机号码; 是(1),否(0)
	customringtone = cursor.getString(cursor.getColumnIndex(Phone.CUSTOM_RINGTONE));//与联系人相关的铃声 无则返回null
	photoid = cursor.getString(cursor.getColumnIndex(Phone.PHOTO_ID));//是否含有图片()<code></code>
二十六:判断是否存在SD卡
        boolean sdExist = android.os.Environment.MEDIA_MOUNTED.equals(android.os.Environment.getExternalStorageState());
        if(!sdExist){//如果不存在,
            Log.e("SD卡管理:", "SD卡不存在,请加载SD卡");
            return null;
        } 
二十七:修改系统默认音量
   MTK 系列,在 frameworks---base--\media\java\android\media\AudioService.java这个文件夹下, 然后修改DEFAULT_STREAM_VOLUME 这个数组的一些参数值即可。
二十八:修改系统 默认的休眠时间

  系统默认的休眠时间是15S,那么我现在要修改为1min怎么去修改:
   frameworks/base/packages/SettingsProvider/res/values/defaults.xml
  <integer name="def_screen_off_timeout">60000</integer> //之前是-1 改成自己想要的时间即可,时间毫秒为单位

二十九:修改系统默认时间
    路径:/vendor/mediatek/proprietary/frameworks/base/res/res/values/config.xml 其中里面有一项
   
<!-- default year for first power on-->
    <integer name="default_restore_year">2016</integer>  //系统默认的是2015
三十:判断是否插入双卡:
 
List<SimInfoManager.SimInfoRecord> simInfos = SIMHelper.getSIMInfoList(mContext);
simInfos.size() == 2
三十一:判断卡槽1卡槽2是否插卡
ITelephonyEx mTelephonyEx = ITelephonyEx.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVICEEX));
boolean Sim1Exist = mTelephonyEx.hasIccCard(PhoneConstants.GEMINI_SIM_1);
boolean Sim2Exist = mTelephonyEx.hasIccCard(PhoneConstants.GEMINI_SIM_2);
三十二:开机sim卡提示框的位置
  mediatek/packages/apps/Stk1/res/layout/stk_msg_dialog.xml其中一般需要改的是dialog_message的字体颜色
三十三:开机等待sim卡提示弹出框位置
mediatek/packages/apps/OOBE
三十四:低电量弹出框风格
frameworks/base/packages/SystemUI/src/com/android/systemui/power/PowerUI.java
风格控制AlertDialog.Builder b = new AlertDialog.Builder(mContext,3);
三十五:
在3G网络下,信号强度的修改
在3G网络下,信号强度的修改  0为<=-109dbm,1为<-103,2为<-97,3为<-89,4为>=-89
 修改 路径:vendor/mediatek/proprietary/frameworks/base/packages/FwkPlugin/src/com/mediatek/op/telephony/DefaultServiceStateExt.java

三十六:修改APN参数
   修改路径: vendor/mediatek/proprietary/frameworks/base/telephony/etc/apns-conf.xml.
三十七:第三方监听系统音乐的方法
  在需要的地方添加:
Intent i = new Intent("com.android.music.musicservicecommand");
i.putExtra("command", "pause");
mProxy.getContext().sendBroadcast(i);
在系统音乐播放器中有固定的广播接受:
private static final String SERVICECMD = "com.android.music.musicservicecommand";
    private static final String CMDNAME = "command";
/*    private static final String CMDTOGGLEPAUSE = "togglepause";
    private static final String CMDSTOP = "stop";*/
    private static final String CMDPAUSE = "pause";
    private static final String CMDPLAY = "play";
    private static final String CMDPREVIOUS = "previous";
    private static final String CMDNEXT = "next";
     
    public void click(View v){
        Intent intent = new Intent(SERVICECMD);
        switch(v.getId()){
            case R.id.pre:{
                intent.putExtra(CMDNAME, CMDPREVIOUS);
            }break;
            case R.id.play:{
                if(playing){
                    intent.putExtra(CMDNAME,CMDPAUSE);
                    ((ImageView)findViewById(R.id.play)).setImageResource(R.drawable.music_play);
                }else{
                    intent.putExtra(CMDNAME,CMDPLAY);
                    ((ImageView)findViewById(R.id.play)).setImageResource(R.drawable.music_pause);             
                }
            }break;
            case R.id.next:{
                intent.putExtra(CMDNAME,CMDNEXT);
            }break;
        }
        sendBroadcast(intent);
    }

三十八:持续更新中...




  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值