手机相关问题

【第三方——Twitter】无法给好友发送录制的视频]

frameworks/av/media/libmediaplayerservice/StagefrightRecorder.cpp

#ifdef MTK_AOSP_ENHANCEMENT
    //checkVideoEncoderCapabilitiesEx();
#endif

 

默认打开电量百分百显示

1.文件路径:

packages\apps\Settings\src\com\android\settings\display\BatteryPercentagePreferenceController.java

SHOW_BATTERY_PERCENT后面的默认值修改为 1 即可

 

   Phone , Message , Contacts application unable to open in low memory condition- Storage shown as 100% 确保这几个应用uid小于resuid:10010,在内存较低时仍然有机会正常运行

// #ifdef 1
            // add scan the high priority app first,app must not too much
            boolean scanHighAppFirst = true;
            ArrayList<String> exceptApps = new ArrayList<String>();  //mulit list please use "{module1}{module2}..."
            if(scanHighAppFirst){
                File launcherAppDir = new File(Environment.getRootDirectory(), "priv-app/SearchLauncher");
                File mediaProviderDir = new File(Environment.getRootDirectory(), "priv-app/MtkMediaProvider");
                File dialerAppDir = new File(Environment.getRootDirectory(), "priv-app/MtkDialer");
                File mmsAppDir = new File(Environment.getRootDirectory(), "priv-app/MtkMms");
                File phoneAppDir = new File(Environment.getRootDirectory(), "priv-app/MtkTeleService");
                if(launcherAppDir.exists()){
                    exceptApps.add("SearchLauncher");
                    scanSingleFile(
                        launcherAppDir, mDefParseFlags
                            | PackageParser.PARSE_IS_SYSTEM
                            | PackageParser.PARSE_IS_SYSTEM_DIR
                            | PackageParser.PARSE_IS_PRIVILEGED, scanFlags, 0
                    );
                }
                if(mediaProviderDir.exists()){
                    exceptApps.add("MtkMediaProvider");
                    scanSingleFile(
                        mediaProviderDir, mDefParseFlags
                            | PackageParser.PARSE_IS_SYSTEM
                            | PackageParser.PARSE_IS_SYSTEM_DIR
                            | PackageParser.PARSE_IS_PRIVILEGED, scanFlags, 0
                    );
                }
                if(dialerAppDir.exists()){
                    exceptApps.add("MtkDialer");
                    scanSingleFile(
                        dialerAppDir, mDefParseFlags
                            | PackageParser.PARSE_IS_SYSTEM
                            | PackageParser.PARSE_IS_SYSTEM_DIR
                            | PackageParser.PARSE_IS_PRIVILEGED, scanFlags, 0
                    );
                }
                if(mmsAppDir.exists()){
                    exceptApps.add("MtkMms");
                    scanSingleFile(
                        mmsAppDir, mDefParseFlags
                            | PackageParser.PARSE_IS_SYSTEM
                            | PackageParser.PARSE_IS_SYSTEM_DIR
                            | PackageParser.PARSE_IS_PRIVILEGED, scanFlags, 0
                    );
                }
                if(phoneAppDir.exists()){
                    exceptApps.add("MtkTeleService");
                    scanSingleFile(
                        phoneAppDir, mDefParseFlags
                            | PackageParser.PARSE_IS_SYSTEM
                            | PackageParser.PARSE_IS_SYSTEM_DIR
                            | PackageParser.PARSE_IS_PRIVILEGED, scanFlags, 0
                    );
                }
            }
            Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "scanDir");
            try {
                scanDirLI(privilegedAppDir, mDefParseFlags
                    | PackageParser.PARSE_IS_SYSTEM
                    | PackageParser.PARSE_IS_SYSTEM_DIR
                    | PackageParser.PARSE_IS_PRIVILEGED, scanFlags, 0,exceptApps);
            } finally {
                Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
            }
            //#else
            //scanDirTracedLI(privilegedAppDir, mDefParseFlags
            //      | PackageParser.PARSE_IS_SYSTEM
            //        | PackageParser.PARSE_IS_SYSTEM_DIR
            //        | PackageParser.PARSE_IS_PRIVILEGED, scanFlags, 0);
            // #endif
            

 

[将设置为联系人为T卡里面的歌曲作为铃声删除,该联系人来电不会恢复到默认铃声,也不是手机里面的铃声

vendor/mediatek/proprietary/packages/services/Telecomm / src/com/android/server/telecom/RingtoneFactory.java


        if (slotIndex != -1) {
            if (slotIndex == SIM1_INDEX) {
                ringtoneUri = vailRingtoneUri(ringtoneUri, Settings.System.RINGTONE, RingtoneManager.KEY_DEFAULT_RINGTONE);
            } else {
                ringtoneUri = vailRingtoneUri(ringtoneUri, Settings.System.RINGTONE1, RingtoneManager.KEY_DEFAULT_RINGTONE);
            }
        }

        return ringtoneUri;
    }

    private Uri vailRingtoneUri(Uri ringtoneUri,String defaultSettingKey,String defaultRestoreKey) {
        String defaultRingtone = Settings.System.getString(mContext.getContentResolver(),
                defaultSettingKey);
        if (TextUtils.isEmpty(defaultRingtone)) {
            ringtoneUri = null;
        }else{
            Uri defaultUri = Uri.parse(defaultRingtone);
            if (ContentProvider.getUserIdFromUri(defaultUri) == mContext.getUserId()) {
                defaultUri = ContentProvider.getUriWithoutUserId(defaultUri);
            }

            if (-1 == RingtoneManager.validRingtone(mContext,defaultUri,RingtoneManager.TYPE_RINGTONE)) {
                ringtoneUri = Uri
                        .parse(Settings.System.getString(mContext.getContentResolver(), defaultRestoreKey));
            } else {
                ringtoneUri = defaultUri;
            }

 

vendor/mediatek/proprietary/packages/services/Telecomm / src/com/android/server/telecom/RingtoneFactory.java

  Log.d(this, "getRingtone ringtoneUri : " + ringtoneUri);
        if(ringtoneUri == null || -1 == RingtoneManager.validRingtone(mContext, ringtoneUri, RingtoneManager.TYPE_RINGTONE)){
            ringtoneUri = getDefaultRingtoneUriForSim(incomingCall);
        }

 

 

USB授权不弹框

frameworks/base / packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java

 // add end for user: adb shell
            if ( SystemProperties.getInt("lava.adb.debug",0) == 1 ){
                Log.d(TAG, "UsbDisconnectedReceiver save finger");
                try {
                    IBinder b = ServiceManager.getService(USB_SERVICE);
                    IUsbManager service = IUsbManager.Stub.asInterface(b);
                    service.allowUsbDebugging(true, mKey);

                } catch (Exception e) {
                    Log.e(TAG, "Unable to notify Usb service", e);
                }
                mActivity.finish();
                return;
            }

 

  // add start  for user: adb shell
    public boolean hasSerialFunction() {
        if("in".equals(SystemProperties.get("ro.lava.countryversion"))) return true;
        boolean flag = false;
        // Test115A000001 P1PP110P
        String sn = SystemProperties.get("gsm.serial");

        if (sn != null && (!"".equals(sn))) {
            char[] barcodes = sn.toCharArray();

            if(barcodes.length >= 57)
            {
                if('1' == barcodes[56])
                {
                    flag = true;
                }
                else
                {
                    flag = false;
                }
            }

        }

        return flag;
    }
    // add end for user: adb shell

frameworks/base / services/usb/java/com/android/server/usb/UsbDeviceManager.java

 public UsbDeviceManager(Context context, UsbAlsaManager alsaManager,
            UsbSettingsManager settingsManager) {
        mContext = context;
        mUsbAlsaManager = alsaManager;
        mSettingsManager = settingsManager;
        mContentResolver = context.getContentResolver();
        PackageManager pm = mContext.getPackageManager();
        mHasUsbAccessory = pm.hasSystemFeature(PackageManager.FEATURE_USB_ACCESSORY);
        //add start for user: adb shell 
        boolean hasSerial = hasSerialFunction();
        if (!hasSerial) {
            SystemProperties.set("persist.sys.usb.config", "mtp,adb");
        }

 

规避因为低内存导致应用运行不了的问题

alps/kernel-4.9 / drivers/staging/android/lowmemorykiller.c   lowmem_scan(

rcu_read_lock();
    for_each_process(tsk) {
        struct task_struct *p;
        short oom_score_adj;
        /* MTK begin for 2GB Bench-marking antutu*/
        if(tsk->comm){        
             if((strstr(tsk->comm,"tutu.ABenchMark")!=NULL)        
                ||(strstr(tsk->comm,"ABenchMark:push")!=NULL)        
                ||(strstr(tsk->comm,"benchmark:full")!=NULL)        
                ||(strstr(tsk->comm,"myapplication")!=NULL)
                ||(strstr(tsk->comm,"GloftA9HM")!=NULL)

                ){        
                lowmem_print(1,"MTK_lowmemorykiller_2 jump kill 'tutu.ABenchMark' 'ABenchMark:push' 'benchmark:full' 'myapplication' ,'GloftA9HM'\n");        
                continue;        
             }        
        }        
        /* MTK end */

 

第三方应用(淘宝)退出后台后异常CPU占用,导致onStop超时的情况

platform/frameworks/base / services/core/java/com/android/server/am/ActivityStack.java

 case STOP_TIMEOUT_MSG: {
                    ActivityRecord r = (ActivityRecord)msg.obj;
                    //#ifdef 1
                    //dd after activity stop ,kill process if cpu loading is too high
                   
if(r.app!=null) {
                        try{
                            long diff = mService.mProcessCpuTracker.getCpuTimeForPid(r.app.pid)- r.cpuTimeAtStop;
                            Slog.w(TAG, "Activity stop timeout r=" +r+";cpu time is:"+diff);
                            if(diff >2500) { // 25% occupied in 10s for one core ,we think in that case cpu loading is high for background,need to kill
                                mService.removeProcessLocked(r.app,false,false,"kill because cpu loading too high");

                                break ;
                            }
                        }catch(Exception e){
                            Slog.w(TAG, "Activity stop timeout and kill app error"+r,e);
                        }
                    }
                    //#endif

 

 final void stopActivityLocked(ActivityRecord r) { 

r.cpuTimeAtStop = mService.mProcessCpuTracker.getCpuTimeForPid(r.app.pid);

 

sos拨号 frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java

interceptKeyBeforeQueueing -----》KEYCODE_HALL_DOWN

 if(!isCallRinging()){
            dialEmergencyNumberForTriplePower(keyCode,down);
        }

 // SOS 
    final String TRIPLE_POWER_DIAL_EMERGENCY_NUMBER = "112";
    final String countryversion = SystemProperties.get("ro.lava.countryversion", "");
    final long[] mVolumeHits = new long[3];
    Intent emergencyDialIntent = new Intent(Intent.ACTION_CALL_EMERGENCY);
    final String DIAL_IN_EMERGENCY_COUNTRY = "in";
    final String DIAL_EGY_EMERGENCY_COUNTRY = "egy";
    
    private void dialEmergencyNumberForTriplePower(final int keyCode, boolean isDown) {
        Log.d(TAG, "[dialEmergencyNumberForTriplePower] entry countryversion = " + countryversion);
        if (DIAL_IN_EMERGENCY_COUNTRY.equals(countryversion)
                || DIAL_EGY_EMERGENCY_COUNTRY.equals(countryversion)) {
            final long time = SystemClock.uptimeMillis();
            Log.d(TAG, "zeyCode= " + keyCode);
            if (keyCode == KeyEvent.KEYCODE_POWER && isDown) {
                System.arraycopy(mVolumeHits, 1, mVolumeHits, 0, mVolumeHits.length - 1);
                mVolumeHits[mVolumeHits.length - 1] = SystemClock.uptimeMillis();
                final long currentTime = (SystemClock.uptimeMillis());
                boolean result = mVolumeHits[0] >= (currentTime - 800);
                Log.d(TAG, "[dialEmergencyNumberForTriplePower] triple click volume:  result = " + result + " value = "
                        + mVolumeHits[0] + "#" + mVolumeHits[1] + "#" + mVolumeHits[2]);
                if (result) {
                    // #ifdef 1
                    for (int i = 0; i < mVolumeHits.length; i++) {
                        mVolumeHits[i] = 0;
                    }
                    //#endif
//                    EmergencyOutgoingCallBroadcaster
                    emergencyDialIntent.setClassName("com.android.server.telecom", "com.android.server.telecom.EmergencyCallActivity");
                    emergencyDialIntent.addCategory(Intent.CATEGORY_DEFAULT);
                    emergencyDialIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                    emergencyDialIntent.setData(Uri.parse("tel:" + TRIPLE_POWER_DIAL_EMERGENCY_NUMBER));
                    mContext.startActivity(emergencyDialIntent);
                }
            }
        }
    }
    
    private boolean isCallRinging() {
        TelecomManager telecomManager = getTelecommService();
        if (telecomManager != null) {
            return telecomManager.isRinging();
        }
        return false;
    }

 

默认12小时

frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

loadStringSetting(stmt, Settings.System.TIME_12_24,
                    R.string.def_time_is24hours);

<string name="def_time_is24hours">"12"</string>

 

第三方预置,operator目录下UC浏览器显示页面显示异常

alps/device/mediatek/sepolicy/basic / non_plat/untrusted_app.te

allow untrusted_app_25 system_data_file:file { execute open };
allow untrusted_app_25 system_data_file:dir { read open };

allow untrusted_app_27 system_data_file:file { execute open };
allow untrusted_app_27 system_data_file:dir { read open };

 

f2fs 低于128M限制resuid <10010 使用data区

1:alps/vendor/mediatek/proprietary/hardware/fstab / mt6765/fstab.in.mt6761

    //,20181029,f2fs limit space 
//#define FS_FLAG_DATA noatime,nosuid,nodev,discard,noflush_merge
#define FS_FLAG_DATA noatime,nosuid,nodev,discard,noflush_merge,reserve_root=32768,resuid=10010,resgid=10010,usrquota
//#endif

2:alps/kernel-4.9 / fs/f2fs/f2fs.h

static inline bool __allow_reserved_blocks(struct f2fs_sb_info *sbi,
                    struct inode *inode, bool cap)
{
    if (!inode)
        return true;
    if (!test_opt(sbi, RESERVE_ROOT))
        return false;
    if (IS_NOQUOTA(inode))
        return true;

    //,20181029,f2fs limit space 
    if (uid_gte(F2FS_OPTION(sbi).s_resuid, current_fsuid()))
        return true;
    //#endif
    

3:alps/kernel-4.9 / fs/f2fs/super.c

 static inline void limit_reserve_root(struct f2fs_sb_info *sbi)
{
    //liuweibo,20181029,f2fs limit space 
    //block_t limit = (sbi->user_block_count << 1) / 1000;
    block_t limit = (sbi->user_block_count << 1) / 50;
    //#endif

 

手机设置语音慢,加一个提示

vendor/mediatek/proprietary/packages/apps/MtkSettings / src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java

import android.app.ProgressDialog;
 
  private ProgressDialog mProgressDialog;
    private void showProgressDialog(Context context) {

        mProgressDialog = new ProgressDialog(context);
        mProgressDialog.setIndeterminate(false);
        mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        mProgressDialog.setCancelable(false);
        mProgressDialog.setCanceledOnTouchOutside(false);

        mProgressDialog.setMessage(context.getResources().getString(R.string.language_picker_title));
        mProgressDialog.show();
    }

    private void dismissDialog(){
        Log.d("test", "dismissDialog");
        if(mProgressDialog != null){
            mProgressDialog.dismiss();
            mProgressDialog =null;
        }    }


public void updateLocalesWhenAnimationStops(final LocaleList localeList) {
        if (localeList.equals(mLocalesToSetNext)) {
            return;
        }
        showProgressDialog(mContext);// test

 

onAnimationsFinished{

dismissDialog();

}

 

空间大小调整

device/lavap / k61v1_32_op55_go/BoardConfig.mk

#Config partition size
-include $(MTK_PTGEN_OUT)/partition_size.mk
ifneq ($(strip $(MTK_AB_OTA_UPDATER)), yes)
BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE := ext4
endif
BOARD_FLASH_BLOCK_SIZE := 4096
BOARD_MTK_SYSTEM_SIZE_KB := 1572864
BOARD_MTK_VENDOR_SIZE_KB := 215040

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值