admin管理员组

文章数量:1543840

    Launcher 总结:



    1、launcher的布局太居中,要想两边拉伸

    <\packages\apps\Launcher2\res\values\dimens.xml>

        <dimen name="  apps_customize_pageLayoutPaddingLeft">40dp</dimen>

        <dimen name="  apps_customize_pageLayoutPaddingRight">40dp</dimen>

    apps tab栏的宽度( Launcher2 icon 数目、大小)

    \packages\apps\Launcher2\res\layout-sw720dp\workspace.xml>

        launcher:cellCountX="10"
        launcher:cellCountY="6"



    2、或者不想改数目:

    <\packages\apps\Launcher2\src\com\Android\launcher2\AppsCustomizeTabHost.Java>

        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

              mTabs.getLayoutParams().width = contentWidth   + 108;



    3、workspace、AppsCustomize的cell大小:

    <\packages\apps\Launcher2\res\values-sw600dp\dimens.xml>

        <dimen name="workspace_cell_width">110dip</dimen>
        <dimen name="workspace_cell_height">110dip</dimen>



        <dimen name="apps_customize_cell_width">110dp</dimen>
        <dimen name="apps_customize_cell_height">110dp</dimen>


    4、里面icon的大小:

    <\packages\apps\Launcher2\res\values-sw600dp\dimens.xml>

         <dimen name="app_icon_size">80dp</dimen>



    5、workspace没有拖动,第二页第一个icon出现在第一页的最右边:

    加大workspace的宽度,或间距:

    workspace的paddingLeft、paddingRight:

    <\packages\apps\Launcher2\res\values-sw600dp-land\dimens.xml>

        <dimen name="workspace_left_padding">50dip</dimen>
        <dimen name="workspace_right_padding">50dip</dimen>



    workspace两屏间距:

    <dimen name="workspace_page_spacing">100dp</dimen>



    修改workspace的字体大小:

    如果没有就添加:

    <\packages\apps\Launcher2\res\values-sw480dp\styles.xml>

        <style name="WorkspaceIcon.Landscape">

            <item name="android:textSize">13sp</item>

        </style>



    6、加wallpaper:

    1.<\packages\apps\Launcher2\res\values-sw600dp\wallpapers.xml>

       加wallpaper的名字

    2.<\packages\apps\Launcher2\res\drawable-nodpi>

       加如wallpaper 

    7、gallery的widget默认添加到workspace上:

    <\packages\apps\Launcher2\res\xml\default_workspace.xml>

        <!-- Middle screen [2] -->
        <appwidget
            launcher:packageName="com.android.gallery3d"
            launcher:className="com.android.gallery3d.gadget.PhotoAppWidgetProvider"
            launcher:screen="2"
            launcher:x="1"
            launcher:y="0"
            launcher:spanX="3"
            launcher:spanY="3" />



    <\packages\apps\Gallery2\src\com\android\gallery3d\gadget\PhotoAppWidgetProvider.java>

        @Override
        public void onUpdate(Context context,  
                for (int id : appWidgetIds) {
                    if(id == 2){ 

                        helper.setWidget(id,WidgetDatabaseHelper.TYPE_SHUFFLE, null);                  
                    }

        }



    8、在桌面上添加网页的快捷方式:

    <\packages\apps\Launcher2\res\xml\default_workspace.xml> 

        <shortcut

            launcher:title="@string/application_name"
            launcher:icon="@drawable/ic_no_applications"
            launcher:uri="http://www.aaa"
            launcher:screen="0"
            launcher:x="0"
            launcher:y="3" />



    9、在桌面上默认放文件夹:

    <\packages\apps\Launcher2\res\xml\default_workspace.xml>

         <folder
              launcher:screen="2"
              launcher:x="2"
              launcher:y="2"
              launcher:title = "@string/application_name" >


         <favorite
              launcher:className="com.android.deskclock.DeskClock"
              launcher:packageName="com.android.deskclock"
              launcher:Container="1"
              launcher:x="0"
              launcher:y="0" />

         <favorite
              launcher:className="com.android.calculator2.Calculator"
              launcher:packageName="com.android.calculator2"
              launcher:container="1"
              launcher:x="0"
              launcher:y="0" />

         </folder>    



    10、桌面上添加快捷方式,点击播放视频:

    <\packages\apps\Launcher2\res\xml-sw720dp\default_workspace.xml>

     <shortcut launcher:title="@string/application_name" 

    launcher:icon="@drawable/ic_launcher_application" 

    launcher:uri="file:///mnt/sdcard/external_sdcard/1...playermenu;end" 

    launcher:screen="2" 

       launcher:x="1" 

    launcher:y="1" />



    11、安装apk,显示隐藏的google play:

    1.写google显示的apk:

    GooglePlayShow的activity:

            ComponentName componentname = new ComponentName("com.android.vending", "com.android.vending.AssetBrowserActivity");
            packagemanager.setComponentEnabledSetting(componentname, 1, 1);

            componentname = new ComponentName("com.example.googleplayshow", "com.example.googleplayshow.MainActivity");
            packagemanager.setComponentEnabledSetting(componentname, 2, 1);



    2.<\packages\apps\Launcher2\src\com\android\launcher2\LauncherModel.java>

                } else if (Intent.ACTION_PACKAGE_ADDED.equals(action)) {
                    if (!replacing) {
                             if(packageName.equals("com.example.googleplayshow")){
                                  context.startActivity(new Intent().setComponent(new ComponentName("com.example.googleplayshow", "com.example.googleplayshow.MainActivity")).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
                             }
                        op = PackageUpdatedTask.OP_ADD;
                    } else {
                        op = PackageUpdatedTask.OP_UPDATE;
                    }
                }



    隐藏google search:

    <\packages\apps\Launcher2\src\com\android\launcher2\Launcher.java>

        private void setupViews() {

            mSearchDropTargetBar = (SearchDropTargetBar) mDragLayer.findViewById(R.id.qsb_bar);
            mSearchDropTargetBar.hideSearchBar(false);



        void showWorkspace(boolean animated, Runnable onCompleteRunnable) {

            //mSearchDropTargetBar.showSearchBar(wasInSpringLoadedMode);



    12、widget中隐藏google play:

    <\packages\apps\Launcher2\src\com\android\launcher2\AppsCustomizePagedView.java>

    updatePackages里面添加:

    if(!widget.provider.getPackageName().equals("com.android.vending") && !widget.provider.getPackageName().equals("com.android.vending.MarketWidgetProvider")){

        mWidgets.add(widget);

    }



    13、clock的widget下部分显示不全,向上调

    <\packages\amlogic\Launcher2\res\values\dimens.xml>

    <dimen name="app_widget_preview_padding_top">10dp</dimen>



    修改widget的text的size:

    <\packages\amlogic\Launcher2\res\layout\apps_customize_widget.xml>

      <TextView xmlns:android="http://schemas.android/apk/res/android"

         android:id="@+id/widget_name"

         android:textSize="20sp" />



    14、launcher中隐藏一个app:

    需要该app的packageName,例如要隐藏settings:

    <\packages\apps\Launcher2\src\com\android\launcher2\LauncherModel.java>

            private void loadAllAppsByBatch() { 

                        apps = packageManager.queryIntentActivities(mainIntent, 0); 



                        ResolveInfo removeApp = null;

                        for(ResolveInfo info:apps){

                            if(info.activityInfo.packageName.equals("com.android.settings")){

                                    removeApp = info;

                            }



                        }



                        if(removeApp != null){

                            apps.remove(removeApp);

                        }



    15、launcher中隐藏多个app: 红色为改动部分

    <\packages\apps\Launcher2\src\com\android\launcher2\LauncherModel.java>

          private void loadAllAppsByBatch() {  

       final PackageManager packageManager = mContext.getPackageManager();

                List<ResolveInfo> apps = new ArrayList<ResolveInfo>();

                List<ResolveInfo> allApps = null;





                int N = Integer.MAX_VALUE;



                int startIndex;

                int i=0;

                int batchSize = -1;

                while (i < N && !mStopped) {

                    if (i == 0) {

                        mAllAppsList.clear();

                        final long qiaTime = DEBUG_LOADERS ? SystemClock.uptimeMillis() : 0;



                        allApps = packageManager.queryIntentActivities(mainIntent, 0);

                        for(ResolveInfo info : allApps){

                            if(info.activityInfo != null 

                                    && !info.activityInfo.packageName.equalsIgnoreCase("com.android.email")

                                    && !info.activityInfo.packageName.equalsIgnoreCase("com.android.providers.downloads.ui")

                                    && !info.activityInfo.packageName.equalsIgnoreCase("com.adobe.flashplayer")){

                                apps.add(info);

                            }

                        }


    settings 问题总结:

    1.入口,设置分屏显示

    frameworks\base\core\res\res\values\bools.xml 下的 preferences_prefer_dual_pane 为true.

    <bool name="preferences_prefer_dual_pane">true</bool>



    2.top level headers--这里可以去掉左边的headers

    <settings.java>

    private void updateHeaderList(List<Header> target) {

    if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)) {
       target.remove(header);
    }



    3.默认字体:

    public void readFontSizePreference(ListPreference pref) {

         ActivityManagerNative.getDefault().getConfiguration()



    系统的Configuration是从ActivityManagerService设置的:



    <\frameworks\base\services\java\com\android\server\am\ActivityManagerService.java>

    mConfiguration.setToDefaults();

    fontScale = Float.parseFloat(SystemProperties.get("ro.fontScale","1"));



    4.settings的theme:

    <\packages\apps\Settings\AndroidManifest.xml>

        <application android:label="@string/settings_label"
                android:icon="@mipmap/ic_launcher_settings"
                android:taskAffinity=""
                android:theme="@android :style/Theme.Holo"
                android:uiOptions="splitActionBarWhenNarrow"
                android:hardwareAccelerated="true">



    <\frameworks\base\core\res\res\values\themes.xml>

    <style name="Theme.Holo">

    字体颜色

    <item name="textColorPrimary">@android :color/primary_text_holo_dark</item>

    加亮框的颜色:

    <item name="activatedBackgroundIndicator">@android :drawable/activated_background_holo_dark</item>

    触摸框的颜色:

    <item name="listChoiceBackgroundIndicator">@android :drawable/list_selector_holo_dark</item>

    左边背景:

    <item name="windowBackground">@android :drawable/screen_background_selector_dark</item>

    右边的背景:

    <item name="detailsElementBackground">@android :drawable/panel_bg_holo_dark</item>
    title的背景:

    <item name="actionBarStyle">@android :style/Widget.Holo.ActionBar</item>



    5.设置--》开发者选项--修改后台进程限制



    frameworks/base/services/java/com/android/server$ vi ./am/ActivityManagerService.java

    大概839行 把int mProcessLimitOverride = -1;改成4(不得超过4个进程)

    标准限制 对应 -1

    不允许后台进程 对应 0

    不得超过1个进程 对应 1

    不得超过2个进程  对应 2

    不得超过3个进程 对应 3



    6. 默认不要锁屏,设置-安全--屏幕锁定 (无)

    overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml

     <bool name="def_lockscreen_disabled">true</bool>



    7. 位置服务--- 默认Google的位置服务为勾选

    overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml

    <string name="def_location_providers_allowed" translatable="false">gps</string>

    改成

    <string name="def_location_providers_allowed" translatable="false">gps,network</string>

    常用修改
    一. 修改默认(Settting.apk 中选项默认值一般存在于 frameworks\base\packages\SettingsProvider\res\values\defaults.xml)
    1. 默认勾选 未知来源
    <bool name="def_install_non_market_apps">false</bool> 

    2. 默认铃声, 通知, 闹钟 音乐
    可以在system.prop 分别配置

    ro.config.ringtone=Playa.ogg (默认铃声设置,文件在/system/media/audio/ringtones 把喜欢的铃声放这里,比如123.MP3放入ringtones文件夹中,这里代码改为ro.config.ringtone=123.mp3)

    ro.config.notification_sound=regulus.ogg (默认提示音,文件在/system/media/audio/notifications 修改方法同上)

    ro.config.alarm_alert=Alarm_Beep_03.ogg (默认闹铃,文件在/system/media/audio/alarms 修改方法同上)

    3. 壁纸不跟随滑动
    packages/apps/Launcher2/./src/com/android/launcher2/Workspace.java  大概 875行
    private float wallpaperOffsetForCurrentScroll() 
    修改 wallpaperOffsetForCurrentScroll 的返回值。 改成 return  0.5f; 

    二.隐藏或删除某项
    1.去掉设置中Wifi选项
    device/amlogic/xxxref/xxxref.mk 文件中
    # Device specific system feature description
    PRODUCT_COPY_FILES += \
    $(LOCAL_PATH)/tablet_core_hardware.xml:system/etc/permissions/tablet_core_hardware.xml \
    frameworks/native/data/etc/android.hardware.wifi.xml:system/etc/permissions/android.hardware.wifi.xml \ (删除)

    2.去掉设置中蓝牙选项
    参考 wifi。
    在 tablet_core_hardware.xml  删除 <feature name="android.hardware.bluetooth" />    这一行

    3. HDMI 部分
    1)去掉HDMI选项  在system.prop中 加入 ro.hdmi.autoswitch=false
    2)去掉480p 选项 在prop中设置 ro.hdmi480p.enable=false

    4. 去掉 powerwidget 中 某一项
    以去掉 gps 为例

    在 packages\apps\Settings\res\layout\widget.xml 下, 移除

     <ImageView

            android:layout_width="1dip"

            android:layout_height="match_parent"

            android:background="@drawable/appwidget_settings_divider_holo"

            android:contentDescription="@null"

            />



        <LinearLayout

            android:id="@+id/btn_bluetooth"

            android:layout_width="0dip"

            android:layout_weight="1"

            android:layout_height="match_parent"

            android:paddingTop="12dp"

            android:background="@drawable/appwidget_button_center"

            android:clickable="true"

            android:focusable="true"

            android:orientation="vertical">



            <ImageView

                android:id="@+id/img_bluetooth"

                android:layout_width="match_parent"

                android:layout_height="0dip"

                android:layout_weight="1"

                android:scaleType="center"

                android:contentDescription="@null"

                />



            <ImageView

                android:id="@+id/ind_bluetooth"

                android:layout_width="match_parent"

                android:layout_height="wrap_content"

                android:scaleType="fitXY"

                android:contentDescription="@null"

                />



        </LinearLayout>

    然后 com.android.settings.widget.SettingsAppWidgetProvider.java 
    注释 views.setOnClickPendingIntent(R.id.btn_gps, getLaunchPendingIntent(context, BUTTON_GPS)); 这一行。

    5.  去掉 Setting widget 中 某一项
    以去掉 "网络共享与便携式热点" 为例
    根据"网络共享与便携式热点" 这个关键词 在 values-zh_rCN 中搜索 到的 key值, 然后在AndroidManifest.xml 搜索这个 key值。 找到对于的Activity 配置
    移除 <category android:name="com.android.settings.SHORTCUT" />  这一行。


    6. 修改浏览器默认浏览器模式

    packages\apps\Browser\res\xml-sw600dp\advanced_preferences.xml

     <ListPreference

           android:key="user_agent"

           android:title="@string/pref_development_uastring"

           android:entries="@array/pref_development_ua_choices"

           android:entryValues="@array/pref_development_ua_values"

           android:defaultValue="3"/>

       修改 android:defaultValue="3" 具体的值参考一下选项

      <string-array name="pref_development_ua_choices" translatable="false">

            <item>Android</item>

            <item>Desktop</item>

            <item>iPhone</item>

            <item>iPad</item>

            <item>Froyo-N1</item>

            <item>Honeycomb-Xoom</item>

        </string-array>

        <!-- Do not tranlsate.  Development option -->

        <string-array name="pref_development_ua_values" translatable="false">

            <item>0</item>

            <item>1</item>

            <item>2</item>

            <item>3</item>

            <item>4</item>

            <item>5</item>





    7. workspace 预置 文件夹 

    范例

    folder 放到最前面。launcher:container 的值是folder的数据库中的id。一般从1开始。

    <folder



                launcher:screen="2"

                launcher:x="1"

                launcher:y="1"

                launcher:title ="@string/application_name" >



           <favorite

                launcher:className="com.android.settings"

                launcher:packageName="com.android.settings.Settings"

                launcher:container="2"

                launcher:x="0"

                launcher:y="0" />



           <favorite

                launcher:className="com.fb.FileBrower"

                launcher:packageName="com.fb.FileBrower.FileBrower"

                launcher:container="2"

                launcher:x="0"

                launcher:y="0" />

        </folder>





    widget 范例

    <appwidget

            launcher:packageName="com.android.calendar"

            launcher:className="com.android.calendar.widget.CalendarAppWidgetProvider"

            launcher:screen="1"

            launcher:x="0"

            launcher:y="0"

            launcher:spanX="2"

            launcher:spanY="3" />



    快捷方式范例

    <favorite

            launcher:packageName="com.android.settings"

            launcher:className="com.android.settings.Settings"

            launcher:screen="2"

            launcher:x="1"

            launcher:y="3" />





    网页快捷方式

    <shortcut

    launcher:title="@string/custom_google"

            launcher:icon="@drawable/favicon_google"

            launcher:uri="http://www.google/"

            launcher:screen="3"

            launcher:x="4"

            launcher:y="1"/>

    8. 系统自带LatinIME 高级设置--按键音量设置   修改默认值

              java/res/values/keypress-volumes.xml



    <string-array name="keypress_volumes" translatable="false">

             <!-- Build.HARDWARE,volume -->

            <item>amlogic,0.3</item>    //加入这行。 把0.3改成自己的默认值。0.3代表30%

             <item>herring,0.5</item>

             <item>tuna,0.5</item>

             <item>stingray,0.4</item>



    9.lockscreen坐标数字时钟被遮住



    请调整红色的数字:


    <\frameworks\base\core\res\res\layout-sw600dp\keyguard_screen_tab_unlock_land.xml>

      <!-- left side: status and music -->

        <RelativeLayout

            android:layout_height="match_parent"

            android:layout_weight="0.5"



        <!-- right side -->

        <RelativeLayout

            android:layout_height="match_parent"

            android:layout_weight="0.5"



    10.在4.1上修改默认字体大小:

      比如改成大:

      <frameworks\base\packages\SettingsProvider\res\values\defaults.xml>

    <fraction name="def_font_scale">115%</fraction>



    11.没有蓝牙的平台,去掉窗口小部件-设置快捷方式-拉到桌面显示的“蓝牙”选项

    <\packages\apps\Settings\src\com\android\settings\OutputSettingsBroadcastReceiver.java>

    public void onReceive(Context context, Intent intent) 

    {

    // boot completed

    if(intent.getAction().equalsIgnoreCase(Intent.ACTION_BOOT_COMPLETED))

    {



                         if(!context.getPackageManager().hasSystemFeature(context.getPackageManager().FEATURE_BLUETOOTH)){

                                ComponentName componentname = new ComponentName("com.android.settings", "com.android.settings.Settings$BluetoothSettingsActivity");

                                context.getPackageManager().setComponentEnabledSetting(componentname, 2, 1);

                         }

    }



    11. 修改 浏览器的默认标签

    分别在一下资源文件中添加自定义的标签

    packages\apps\Browser\res\values\strings.xml

    <string-array name="bookmarks" translatable="false">

            <item>Google</item>

            <item>http://www.google/</item>

            <item>Picasa</item>

            <item>http://picasaweb.google/</item>

            <item>Yahoo!</item>

            <item>http://www.yahoo/</item>

            <item>MSN</item>

            <item>http://www.msn/</item>

            <item>Twitter</item>

            <item>http://twitter/</item>

            <item>Facebook</item>

            <item>http://www.facebook/</item>

            <item>Wikipedia</item>

            <item>http://www.wikipedia/</item>

            <item>eBay</item>

            <item>http://www.ebay/</item>

            <item>CNN</item>

            <item>http://wwwn/</item>

            <item>NY Times</item>

            <item>http://www.nytimes/</item>

            <item>ESPN</item>

            <item>http://espn/</item>

            <item>Amazon</item>

            <item>http://www.amazon/</item>

            <item>Weather Channel</item>

            <item>http://www.weather/</item>

            <item>BBC</item>

            <item>http://www.bbc.co.uk/</item>

        </string-array>



    packages\apps\Browser\res\values\bookmarks_icons.xml ,

    注意:这里每个网站对应一个缩略图和一个favicon

    <array name="bookmark_preloads">

            <item>@raw/favicon_google</item>

            <item>@raw/thumb_google</item>

            <item>@raw/favicon_picasa</item>

            <item>@raw/thumb_picasa</item>

            <item>@raw/favicon_yahoo</item>

            <item>@raw/thumb_yahoo</item>

            <item>@raw/favicon_msn</item>

            <item>@raw/thumb_msn</item>

            <item>@raw/favicon_twitter</item>

            <item>@raw/thumb_twitter</item>

            <item>@raw/favicon_facebook</item>

            <item>@raw/thumb_facebook</item>

            <item>@raw/favicon_wikipedia</item>

            <item>@raw/thumb_wikipedia</item>

            <item>@raw/favicon_ebay</item>

            <item>@raw/thumb_ebay</item>

            <item>@raw/favicon_cnn</item>

            <item>@raw/thumb_cnn</item>

            <item>@raw/favicon_nytimes</item>

            <item>@raw/thumb_nytimes</item>

            <item>@raw/favicon_espn</item>

            <item>@raw/thumb_espn</item>

            <item>@raw/favicon_amazon</item>

            <item>@raw/thumb_amazon</item>

            <item>@raw/favicon_weatherchannel</item>

            <item>@raw/thumb_weatherchannel</item>

            <item>@raw/favicon_bbc</item>

            <item>@raw/thumb_bbc</item>

        </array>
    对应的图片在 packages\apps\Browser\res\raw





    12. 锁屏界面, 解锁组件增加图标

    已增加 VideoPlayer 为例,

    在frameworks/base/core/res/res/drawable-hdpi  下面

    添加一个对应的png图标

    下面红色为增加的部分。

    frameworks/core/res/res/values-sw600dp-land/arrays.xml 

             <item>@drawable/ic_lockscreen_unlock</item>

             <item>@drawable/ic_action_assist_generic</item>

             <item>@drawable/ic_lockscreen_camera</item>

     -        <item>@null</item>

    +        <item>@drawable/ic_lockscreen_videoplayer</item>  

           </array>



     <array name="lockscreen_target_descriptions_with_camera">

    frameworks/base/res/res/values/arrays.xml b/core/res/res/values/arrays.xml

             <item>@drawable/ic_lockscreen_unlock</item>

             <item>@drawable/ic_action_assist_generic</item>

             <item>@drawable/ic_lockscreen_camera</item>

    -        <item>@null</item>

    +        <item>@drawable/ic_lockscreen_videoplayer</item>

         </array>



         <array name="lockscreen_target_descriptions_with_camera">

    frameworks/base/res/res/values/public.xml b/core/res/res/values/public.xml



    index ac0a457..be4257e 100755

    --- a/core/res/res/values/public.xml

    +++ b/core/res/res/values/public.xml



       <java-symbol type="drawable" name="ic_lockscreen_unlock_phantom" />

       <java-symbol type="drawable" name="ic_media_route_on_holo_dark" />

       <java-symbol type="drawable" name="ic_media_route_disabled_holo_dark" />



      <java-symbol type="drawable" name="ic_lockscreen_videoplayer" />



       <java-symbol type="layout" name="action_bar_home" />

       <java-symbol type="layout" name="action_bar_title_item" />

       <java-symbol type="layout" name="action_menu_item_layout" />



    frameworks/base/policy/src/com/android/internal/policy/impl/LockScreen.java 



                     case com.android.internal.R.drawable.ic_lockscreen_camera:

                         launchActivity(new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA));

                         mCallback.pokeWakelock();

                        break;                    

                    case com.android.internal.R.drawable.ic_lockscreen_videoplayer:

                         launchActivity(new Intent().setClassName("com.farcore.videoplayer", "com.farcore.videoplayer.FileList"));

                         mCallback.pokeWakelock();

                         break;

    注意: 在 frameworks/base/core/res/ 中执行mm 。然后在frameworks/base/policy 中执行mm。看看能否编译过。不行的话,在 在根目录下 执行make update-api 



    13. 休眠策略

    修改默认的休眠策略,请参考

    frameworks\base\packages\SettingsProvider\res\values\defaults.xml

    <integer name="def_wifi_sleep_policy">0</integer>

    <!--  0 == Never, 1 == Only when plugged in,2 == Always. -->   



    14. Launcher 半透明
    4.0, 4.1  下载附件中的patch集合--- translucent.zip
    如果是 4.2.2系统 , 还需修改

    Launcher/src/com/android/launcher2/Launcher.java



             mLauncherView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

             mWorkspaceBackgroundDrawable = getResources().getDrawable(R.drawable.workspace_bg);

             mBlackBackgroundDrawable = new ColorDrawable(Color.BLACK); // 修改为 mBlackBackgroundDrawable = new ColorDrawable(0x7f000000);    

      packages\amlogic\Launcher2\src\com\android\launcher2\Launcher.java



             mStateAnimation.addListener(new AnimatorListenerAdapter() {

                    boolean animationCancelled = false;

                    @Override

                    public void onAnimationStart(Animator animation) {

                        dispatchOnLauncherTransitionEnd(fromView, animated, false); //add

                        dispatchOnLauncherTransitionEnd(toView, animated, false);   //add

                        updateWallpaperVisibility(false);  //true 改成false

                        // Prepare the position

                        toView.setTranslationX(0.0f);

                        toView.setTranslationY(0.0f);

                        toView.setVisibility(View.VISIBLE);

                        toView.bringToFront();

                    }


    15. APK 预装时无法找到lib库的问题



        (1) 如果log报错是找不到lib库首先可以修改lib的路径



    jb4.1\frameworks\base\core\java\android\app\NativeActivity.java

         public static final String SYSTEM_LIB_PATH = "/system/lib";



               if (libraryFile.exists()) {

                    path = libraryFile.getPath();

                }else{

                    File systemLibraryFile = new File(SYSTEM_LIB_PATH,System.mapLibraryName(libname));   

                    if (systemLibraryFile.exists()) {

                        path = systemLibraryFile.getPath();

                    }

                }    



    (2)apk本身会检测检测/data/data/lib路径是否存在资源文件时方法1不适用,用第二种方法:  



               在项目上的mk文件 /device/amlogic/g18refg/8ref.mk 中,加上 preinstallation



    PRODUCT_PACKAGES += \

    lights.amlogic \

    FileBrowser \

    AppInstaller \

    VideoPlayer \

    HdmiSwitch \

    Update \

    fw_env \

    preinstallation



    将网页底部的附件 Preinstallation.zip拷贝到packages\amlogic下面解压   将需要预装安装的apk拷贝到preinstallation目录下面,编辑里面的preinstall.sh文件内容如下:



    #!/system/xbin/busybox sh



    echo "do preinstall applications"



    # com.mxtech.videoplayer.ad apk包名



    if [ ! -e /data/data/com.mxtech.videoplayer.ad/ ]; then

      pm install /system/preinstall/com.mxtech.videoplayer.ad.50.apk

    fi



    if [ ! -e /data/data/org.xbmc.xbmc/ ]; then

      pm install /system/preinstall/xbmc-20130414-e2c3799-Frodo-armeabi-v7a.apk

    fi

    。。。。。。



    然后在device\amlogic\common\init\tablet\init.amlogic.rc 中,启动预安装脚本的服务.



    MX:

    service preinstall /system/bin/preinstall.sh

             class main

             user root

             group root

             oneshot

             console

             disabled     





    M3:

    service preinstall /system/bin/preinstall.sh

    user root

            group root

            disabled

            oneshot



    在init.amlogic.rc最后一行加上



    start preinstall





    16. 去掉 hotspot

    把红色的部分删掉

    device\amlogic\gXXXX\overlay\frameworks\base\core\res\res\values\config.xml

        <string-array translatable="false" name="config_tether_wifi_regexs">

            <item>"wlap0"</item>

            <item>"wl0.1"</item>

            <item>"wlan0"</item>

        </string-array>

        <integer-array translatable="false" name="config_tether_upstream_types">

            <item>0</item>

            <item>9</item>

        </integer-array>



    17.桌面上添加快捷方式,点击播放视频:

    <\packages\apps\Launcher2\res\xml-sw720dp\default_workspace.xml>

     <shortcut

    launcher:title="@string/application_name"

    launcher:icon="@drawable/ic_launcher_application" launcher:uri="file:///mnt/sdcard/external_sdcard/1...playermenu;end"

    launcher:screen="2" launcher:x="1" launcher:y="1" />



    添加网页的快捷方式:

    <\packages\apps\Launcher2\res\xml-sw720dp\default_workspace.xml> 

        <shortcut

            launcher:title="@string/application_name"
            launcher:icon="@drawable/ic_no_applications"
            launcher:uri="http://www.aaa"
            launcher:screen="0"
            launcher:x="0"
            launcher:y="3" />



    18.去掉camera的全景icon:

    4.1:

    <\packages\apps\Camera\res\layout-sw600dp-land\mode_picker.xml>

            <com.android.camera.ui.RotateImageView android:id="@+id/mode_panorama"

                    android:contentDescription="@string/accessibility_switch_to_panorama"

                    android:layout_width="match_parent"

                    android:layout_height="wrap_content"

                    android:layout_weight="1"

    android:visibility="gone"

                    android:scaleType="center"

                    android:background="@drawable/bg_pressed"

                    android:src="@drawable/ic_switch_pan_holo_light" />



    4.2:

    <\packages\apps\Camera\src\com\android\camera\CameraActivity.java>

    加上红色加亮的地方:

        public void init() {

            for (int i = 0; i < mDrawables.length; i++) {

                if ((i == LIGHTCYCLE_MODULE_INDEX && !LightCycleHelper.hasLightCycleCapture(this))||i == PANORAMA_MODULE_INDEX) {

                    continue; // not enabled, so don't add to UI

                }

                drawids[ix++] = DRAW_IDS[i];

            }



    <\packages\apps\Camera\src\com\android\camera\CameraActivity.java>

        public void init() {

            int[] drawids = new int[LightCycleHelper.hasLightCycleCapture(this)

                                    ? DRAW_IDS.length -1 : DRAW_IDS.length - 2];



    19.锁屏左边clock太大显示不全:

    <\frameworks\base\core\res\res\layout-sw600dp\keyguard_screen_status_land.xml>

            <TextView android:id="@+id/timeDisplayBackground"

    android:textSize="@dimen/keyguard_pattern_unlock_clock_font_size"



    <TextView android:id="@+id/timeDisplayForeground"

    android:textSize="@dimen/keyguard_pattern_unlock_clock_font_size"



    //dimens.xml里的keyguard_pattern_unlock_clock_font_size调小



    可以把clock调成居中显示,不要靠右,造成右边显示不全

    <LinearLayout

            xmlns:android="http://schemas.android/apk/res/android"

            android:orientation="vertical"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:gravity="right">

    //改成center



    20. 去掉settings的battery里面的mobile network signal显示

    加上红色语句:

    <\packages\apps\Settings\src\com\android\settings\fuelgauge\BatteryHistoryChart.java>

            if (!com.android.settings.Utils.isWifiOnly(getContext())) {

                mHavePhoneSignal = true;

            }

            mHavePhoneSignal = false;      



    21. 去掉待机的CRT动画

    把自己项目overlay中的

    frameworks/base/core/res/res/values/config.xml

    <bool name="config_animateScreenLights">false</bool> 删掉 就可以了


    22. 添加格式化内部sdcard

    jb4.1\packages\amlogic\Settings\src\com\android\settings\deviceinfo\StorageVolumePreferenceCategory.java



           public StorageVolumePreferenceCategory(Context context, Resources resources, StorageVolume storageVolume, StorageManager storageManager, boolean isPrimary) {

    // Cannot format emulated storage

            mAllowFormat = mStorageVolume != null && !mStorageVolume.isEmulated()&&mStorageVolume.isRemovable();

            // For now we are disabling reformatting secondary external storage

            // until some interoperability problems with MTP are fixed

            //if (!isPrimary) mAllowFormat = false;



    +        if(mStorageVolume != null && mStorageVolume.getPath().equals("/storage/sdcard0")){

    +            mAllowFormat = true;

    +        }



    23. 4.2 LockScreen 任何方向都可以解锁, 修改成只有向右才能解锁

    4.2 Lockscreen 对应的java 文件不再是 Lockscreen, 而是KeyguardSelectorView.java



    frameworks/base/core/res/res/values/arrays.xml b/core/res/res/values/arrays.xml



         <array name="lockscreen_targets_unlock_only">

             <item>@*android:drawable/ic_lockscreen_unlock</item>

    +       <item>@null</item>

    +       <item>@null</item>

    +       <item>@null</item>

         </array>



         <array name="lockscreen_target_descriptions_unlock_only">

             <item>@*android:string/description_target_unlock</item>

    +       <item>@null</item>

    +       <item>@null</item>

    +       <item>@null</item>

         </array>



    24.android 4.2改launcher里面的icon横排的数目:

    <\packages\apps\Launcher2\res\values-sw720dp\config.xml>

    <integer name="cell_count_x">7</integer>



    如果改成7,hotseat里面第8个icon不见了,可以往第8个槽里面放进去,但是重启后,icon又不见了,可以这样修改:

    <\packages\apps\Launcher2\src\com\android\launcher2\LauncherModel.java>
                    final ItemInfo occupied[][][] =
                            new ItemInfo[Launcher.SCREEN_COUNT + 1][mCellCountX + 2][mCellCountY + 1]; //原来这里是+1









    25. 4.2 LockScreen 解锁界面四个方向添加一个setting入口

    frameworks\base\core\res\res\values/arrays.xml

        <array name="lockscreen_targets_with_camera">

            <item>@drawable/ic_lockscreen_unlock</item>

            <item>@drawable/ic_action_assist_generic</item>

            <item>@drawable/ic_lockscreen_camera</item>

            <item>@drawable/ic_lockscreen_settings</item>

        </array>



    在 frameworks\base\core\res\res\drawable 增加 ic_lockscreen_settings.xml 文件 并添加 ic_lockscreen_settings_normal.phg ic_lockscreen_settings_activated.png 资源文件



    <selector xmlns:android="http://schemas.android/apk/res/android">



     <item

            android:state_enabled="true"

            android:state_active="false"

            android:state_focused="false"

            android:drawable="@drawable/ic_lockscreen_settings_normal" />



        <item

            android:state_enabled="true"

            android:state_active="true"

            android:state_focused="false"

            android:drawable="@drawable/ic_lockscreen_settings_activated" />



        <item

            android:state_enabled="true"

            android:state_active="false"

            android:state_focused="true"

            android:drawable="@drawable/ic_lockscreen_settings_activated" />

    </selector>


     frameworks\base\policy\src\com\android\internal\policy\impl\LockScreen.java

         public void onTrigger(View v, int target) {

                final int resId = mGlowPadView.getResourceIdForTarget(target);

                switch (resId) {



                     case com.android.internal.R.drawable.ic_lockscreen_settings: //启动setting 应用

                        launchActivity(new Intent().setComponent(new ComponentName("com.android.settings","com.android.settings.Settings")));   

                        mCallback.pokeWakelock();

                        break;







    26. 4.2 上隐藏 Wifi Display 

      去掉项目overlay/frameworks/base/core/res/res/config.xml 中的config_enableWifiDisplay 



    27. 默认音量修改

    frameworks/base/media/java/android/media/AudioService.java

    private final int[] MAX_STREAM_VOLUME = new int[] {

            5,  // STREAM_VOICE_CALL

            7,  // STREAM_SYSTEM

            7,  // STREAM_RING

            15, // STREAM_MUSIC

            7,  // STREAM_ALARM

            7,  // STREAM_NOTIFICATION

            15, // STREAM_BLUETOOTH_SCO

            7,  // STREAM_SYSTEM_ENFORCED

            15, // STREAM_DTMF

            15  // STREAM_TTS

        };



    frameworks/base/media/java/android/media/AudioManager.java



    /**  @hide  Default volume index values for audio streams */

        public static final int[] DEFAULT_STREAM_VOLUME = new int[] {

            4,  // STREAM_VOICE_CALL

            7,  // STREAM_SYSTEM

            5,  // STREAM_RING

            11, // STREAM_MUSIC

            6,  // STREAM_ALARM

            5,  // STREAM_NOTIFICATION

            7,  // STREAM_BLUETOOTH_SCO

            7,  // STREAM_SYSTEM_ENFORCED

            11, // STREAM_DTMF

            11  // STREAM_TTS

        };



    28.widget中隐藏google play:

    <\packages\apps\Launcher2\src\com\android\launcher2\AppsCustomizePagedView.java>

    updatePackages里面添加:

    if(!widget.provider.getPackageName().equals("com.android.vending") && !widget.provider.getPackageName().equals("com.android.vending.MarketWidgetProvider")){

        mWidgets.add(widget);

    }



    29.去掉设置-->显示-->亮度里的“自动调整亮度”选项

    <\packages\apps\Settings\res\layout\preference_dialog_brightness.xml>

            <CheckBox android:id="@+id/automatic_mode"

    加上

        android:visibility="invisible"



    30.设置-位置信息访问权限默认关闭

    <\frameworks\base\packages\SettingsProvider\res\values\defaults.xml>

    <string name="def_location_providers_allowed" translatable="false"></string>

    这里不要填写gps或者network,清空



    31.设置-安全-验证应用默认不勾允

    <\frameworks\base\packages\SettingsProvider\res\values\defaults.xml>

    <bool name="def_package_verifier_enable">false</bool>



    32.设置-声音-触摸提示音与锁屏提示音默认不勾允状态

    <\frameworks\base\packages\SettingsProvider\res\values\defaults.xml>

    <integer name="def_lockscreen_sounds_enabled">0</integer>

    <bool name="def_sound_effects_enabled">false</bool>



    33.设置-以太网菜单请移动“更多”菜单下

    请用附件ethernet.patch,开关是ro.ethernet.more,设置为true,ethernet移到more里面

    在settings的Git下打这个patch



    34.窗口小部件“指针时钟”显示不全

    把clock的widget向上调,下面的值改小:

    <\packages\amlogic\Launcher2\res\values\dimens.xml>

    <dimen name="app_widget_preview_padding_top">10dp</dimen>



    35.去掉settings的more里面的网络共享与便携式热点

    ro.tether.denied=true



    36.平台主界面底部工具栏上的图标全部居中显示,从左至右的图标依次为:vol-、back、home、窗口切换、vol+

    1.在prop里面将ro.statusbar.volume设置为true

    2.<\frameworks\base\packages\SystemUI\res\layout-sw600dp\navigation_bar.xml>

    将

    <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/sub"

    ……

    />

    这段放到

    <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/back"

    ……

    />

    这段之前



    <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/add"

    ……

    />

    这段放到

    <com.android.systemui.statusbar.policy.KeyButtonView

    android:id="@+id/recent_apps"

    ……

    />

    这段之后



    注意这个文件有两处需要调换上面的



    37.主界面模拟时钟改成数字时钟

    default_workspace.xml里面加上:

    <appwidget

        launcher:packageName="com.android.deskclock"

        launcher:className="com.android.alarmclock.DigitalAppWidgetProvider"



    38、settings中的developer options的开关打开,debug关掉:

    <\frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java>

        private void loadSecureSettings(SQLiteDatabase db) {

           loadSetting(stmt, Settings.Secure.ADB_ENABLED, 0);
           loadSetting(stmt, Settings.Secure.DEVELOPMENT_SETTINGS_ENABLED, 1);



    39、改桌面icon行、列数:

    <\packages\apps\Launcher2\res\layout-sw***dp\workspace.xml>

        launcher:cellCountX="10"

        launcher:cellCountY="6"



    40、more里面morebile data项默认不选:

    1.<\frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java>

        private void loadSecureSettings(SQLiteDatabase db) {

            SQLiteStatement stmt = null;

            try {

                stmt = dbpileStatement("INSERT OR IGNORE INTO secure(name,value)"

                        + " VALUES(?,?);");

    添加:

                loadIntegerSetting(stmt, Settings.Secure.MOBILE_DATA,

                        R.integer.def_mobile_data);



    2.<\frameworks\base\packages\SettingsProvider\res\values\defaults.xml>

    <integer name="def_mobile_data">0</integer>



    41.secure的unknown的设置默认打开:

    <\frameworks\base\packages\SettingsProvider\res\values\defaults.xml>

       <bool name="def_install_non_market_apps">true</bool>



    42、修改app list的背景:

    <\packages\apps\Launcher2\res\layout\apps_customize_pane.xml>

    <com.android.launcher2.AppsCustomizeTabHost

        xmlns:android="http://schemas.android/apk/res/android"

        xmlns:launcher="http://schemas.android/apk/res/c...droid.launcher"

        android:background="@drawable/wallpaper_03">



    43、bluetooth tethering的checkbox去掉:

    overlay里面的

     <\frameworks\base\core\res\res\values\config.xml>

         <string-array translatable="false" name="config_tether_bluetooth_regexs">
            <item>"bt-pan"</item>
        </string-array> 

    去掉<item>"bt-pan"</item>



    44. Google play 不是内置, 而是安装,导致出问题的解决办法

    frameworks/baseservices/java/com/android/server/pm/PackageManagerService.java

    @@ -4594,6 +4594,9 @@ public class PackageManagerService extends IPackageManager.Stub {

                                 }

                             }

                         }

    +                   if (pkg.packageName.equals("com.android.vending")){

    +                       allowed = true;

    +                   }

                         if (!allowed && (bp.protectionLevel

                                 & PermissionInfo.PROTECTION_FLAG_DEVELOPMENT) != 0) {

                             // For development permissions, a development permission


    45.以太网设置问题

    以太网在settings.db中的条目是"eth_on", 默认值由系统属性 ro.ethernet.default_on 决定,

    ro.ethernet.default_on=false 默认关闭

    ro.ethernet.default_on=true默认打开

    不定义该属性默认关闭

    46.开机不停震动 
    手机开机,马达一直震动,应该是uboot正常启动后,没有设置震动关闭 
    解决:在震动200ms后关闭马达 
    u-boot/property/normal_mode.c 
    void normal_mode(void) 
    { 
    //MMU_Init(CONFIG_MMU_TABLE_ADDR); 
    vibrator_hw_init(); 


    set_vibrator(1); 
    udelay(200*1000); 
    set_vibrator(0); 
    ... 
    } 


    47.关机震动时间设置 
    frameworks/base/core/java/com/android/internal/app/ShutdownThread.java中 
    private static final int SHUTDOWN_VIBRATE_MS = 500;   //默认震动0.5秒,修改这个参数 




    48.设置系统默认音量 
    修改文件:frameworks/base/media/java/android/media/AudioManager.java 
    public static final int[] DEFAULT_STREAM_VOLUME = new int[] { 
             4,  // STREAM_VOICE_CALL 
             7,  // STREAM_SYSTEM 
             5,  // STREAM_RING 
             11, // STREAM_MUSIC 
             6,  // STREAM_ALARM 
             5,  // STREAM_NOTIFICATION 
             7,  // STREAM_BLUETOOTH_SCO 
             11, // STREAM_FM 
             11, // STREAM_DTMF 
             11, // STREAM_TTS 
             7  // STREAM_SYSTEM_ENFORCED 
         }; 
    根据需要进行修改即可。 
    注意:如果在3rdparty里面有同名文件最好一起修改。 


    49.如何调节音量档位 
    需要根据自己的情况来调整index to volume的算法。 
    相关实现的模块是 AudioPolicy。基类 AudioPolicyManagerBase 文件位于 
    framework/base/services/audioflinger/AudioPolicyManagerBase.cpp 
    实现类 AudioPolicyManagerALSA,位于 
    external/sprd/alsa/alsa_sound/AudioPolicyManagerALSA.cpp 
    函数 computeVolume: 
    这个方法平台目前没有用子类实现,所以走的是基类方法。如果客户需要修改,建议在子类中重载这 
    个方法。 
    再讲下基类方法: 
    1 通过 index 算出一个百分比; 
    2 通过这个百分比经过一个对数转换换成音量的百分比; 
    3 特殊情况的一些转换; 
    修改建议是子类的方法应该调用基类的方法并且做微调。 
    比如对 1,将 index 到百分比的对应关系略微修改。 
    比如对 3,可以把基类方法处理的结果在根据需要调整。 


    50.电池相关 
    若手机界面的电池进度条显示不够准确,请根据实际测试值调整kernel\drivers\ power\charge.c 的voltage_capacity_table表格中的值 15%对应的是低电告警电压,而0%是自动关机电压。 
    电池的报警电压调整:frameworks\base\core\res\res\values\config.xml, 
    config_lowBatteryWarningLevel:15----->百分比,可以动态调整该数值来调整低电电压。 
    过压保护的逻辑在: 
    Kernel\drivers\power\sprd_power.c里 
    charge_handler()函数中有个battery_data->over_voltage用于电压保护逻辑。 
    这个数值的来源是Kernel\arch\arm\mach-sc8810\include\mach\chg_drvapi.h 
    #define OVP_OVER_VOL 6500 


    51.修改系统默认时间: 
    修改\idh.code\kernel\drivers\rtc\ rtc-sprd.c 
    static int __init sprd_rtc_init(void) 
    { 
    ...... 
    sec_2011_to_1970 = mktime(2011, 1, 1, 0, 0, 0); 
    return 0; 
    } 
    mktime函数的参数即是修改点。 
    同时还要同步修改闹钟时间,否则闹钟会有问题。 
    packages\apps\DeskClock\src\com\android\deskclock\Alarms.java 
    private static void alarm_flag_setup(final long alarmTimeInMillis) { 
    Calendar c = Calendar.getInstance(); 
    c.set(2011, 0, 1, 0, 0, 0);//注意这里月份是0代表1月 
    ...... 


    52.如何设置版本号 
    定义 android 版本号的地方在 build/tools/buildinfo.sh 内,可以修改此文件。 
    ro.build.display.id=$BUILD_DISPLAY_ID 改为 ro.build.display.id= $BUILD_D ISPLAY_ID_CUSTOM, 然 后 在customize/custom_cfg/proj_name/res/boardconfig.mk 
    下 定 义 宏BUILD_DISPLAY_ID_CUSTOM 就可以为自己的项目定义版本号. 
    显示硬件版本在设置->关于手机->硬件版本里看到: 
    packages/apps/Settings/res/xml/device_info_settings.xml 
    <Preference android:key="hardware_number" 
    style="?android:preferenceInformationStyle" 
    android:title="@string/hard_version" 
    android:summary="1.1.0"/> 


    53.无接近传感器,如何在开始通话后关闭屏幕 
    在 Phone 应用的 phoneApp 这个类中。找到下边这段代码: 
    mProximityWakeLock = 
    pm.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, LOG_TAG); 
    然后注释掉。这个是获取了接近传感器的 WakeLock。然后在 updatePokeLock 这个方法中。将 
    //pokeLockSetting |= LocalPowerManager.POKE_LOCK_MEDIUM_TIMEOUT; 
    改为 
    pokeLockSetting |= LocalPowerManager.POKE_LOCK_SHORT_TIMEOUT; 
    将updateWakeState 方法中 
    setScreenTimeout(ScreenTimeoutDuration.DEFAULT); 
    改为 
    setScreenTimeout(ScreenTimeoutDuration.SHORT); 
    这个是将默认延时时间设置为SHORT(5秒)。如果需要改为其他时间需要去改 setScreenTimeout 
    这个方法。 


    54.ms,mms,contact 容量限制 
    [适用版本]2.3.5 
    1.只要在容量允许的情况下,sms,mms 接收条数是没有限制的,但是每个会话的条数是有限 
    制的,默认情况下,每个会话的短信限存 200 条,彩信限存 20 条,但是能调整到 5000 条。 
    MmsConfig.java 代码中做了如下限制: 
    private static int mDefaultSMSMessagesPerThread = 200;// default value 
    private static int mMinMessageCountPerThread = 2; // default value 
    private static int mMaxMessageCountPerThread = 5000; // default value 
    private static int mDefaultMMSMessagesPerThread = 20; // default value 
    2.contact 的记录总数目前没有限制。 


    55.单摄像头进入时间较长如何解决 
    在customize/customer_cfg/project.../kernel/camera/camera_cfg.c中main_sensor_infor_tab和sub_sensor_infor_tab里会放很多sensor的结构体;camera启动初始化时,底层驱动会匹配相关的菜单,删除没有的sensor,能加快启动 


    56.客户定制开/关机铃声 
    开机:替换 3rdparty/anim/poweranim/special/bin/startupsound 
    关机:替换 3rdparty/anim/poweranim/special/bin/shutdownsound 
    注:这里的startupsound/shutdownsound可以是mp3或者ogg格式的,替换时不需要扩展名 


    57.背光亮度,静音等默认值修改 
    修改\frameworks\base\packages\SettingsProvider\res\values\defaults.xml中的默认值即可。 


    58.浏览器如何修改内置的“搜索引擎” 
    修改packages\apps\browser\res\values\donoottranslate-search_engines,xml文件,中 
    “search_engines”的string-arry中的item项即可。如下事例为内置了 139/百度/google 三个搜索引 
    擎。 
    <item>search139</item> 
    <item>baidu</item> 
    </string-array> 
    <item>google</item> 
    <string-array name="search_engines" translatable="false"> 
    注意:如果支持多种语言,其他文件下的同名文件donoottranslate-search_engines,xml也需要 
    修改。 


    59.关机充电动画修改 
    关机充电动画的资源路径是: 
    external/sprd/charge/res/images/(展讯平台) 
    将这个目录下的 png 图片文件修改客户需要的文件就可以了。 


    60.如何设置默认动态壁纸 
    找到 /frameworks/base/core/res/res/values/config.xml 文件中 
    <string name="default_wallpaper_component">@null</string> 
    为设置默认壁纸的代码如若想要更换成为动态壁纸。只需将“@null”更改为动态壁纸的路径即可,例如:将默认壁纸更改为“线性光幕效果”的动态壁纸,则更改成如下代码: 
    <string name="default_wallpaper_component">com.android.wallpaper/com.android.wallpaper.nexus.NexusWallpaper</string>
    com.android.wallpaper 在 AndroidManifest 文件中的 packagename 
    com.android.wallpaper.nexus.NexusWallpaper 在 AndroidManifest 文件中的 service name 
    需要注意的是:静态的图片壁纸和 live wallpaper 是两个系统,加载的时候是完全两套机制,静态图片 
    通过 launcher 里面的一个 xml 文件配置来管理系统默认静态壁纸,live wallpaper 则是通过 intent 机制向系统搜寻所有匹配 Activity,所以,这里的默认值为 null,而不是那个系统默认静态壁纸的地址,系统是读 config.xml 文件的设置,若为 null 才继续查找静态壁纸配置内容. 没有效果的话,恢复下出厂设置即可。 


    61.如何设置系统默认壁纸 
    如果只需要修改动态壁纸,替换 frameworks/base/core/res/res/drawable/default_wallpaper.jpg即可,或者在源码中修改对应 default_wallpaper地址。 


    62.关机菜单中如何添加重启选项 
    /frameworks/base/policy/src/com/android/internal/policy/impl/GlobalActions.java" 文件添加如下修改部分即可: 
    mItems = Lists.newArrayList( 
    // silent mode 
    mSilentModeToggle, 
    // next: airplane mode 
    mAirplaneModeOn, 
    new SinglePressAction( 
                             com.android.internal.R.drawable.ic_lock_power_off, 
                             R.string.global_action_power_off) { 
                         public void onPress() { 
               // shutdown by making sure radio and power are handled accordingly. 
                             ShutdownThread.shutdown(mContext, true); 
                         } 


                        public boolean showDuringKeyguard() { 
                             return true; 
                         } 


                        public boolean showBeforeProvisioning() { 
                             return true; 
                         } 
                     }, 
    // add for reboot 
    new SinglePressAction( 
              com.android.internal.R.drawable.ic_lock_power_off, //替换成相应的图 
              R.string.global_action_power_off) { //替换成相应的提示文字 
              public void onPress() { 
                ShutdownThread.reboot(mContext, null, true); 
              } 


             public boolean showDuringKeyguard() { 
                return true; 
              } 


             public boolean showBeforeProvisioning() { 
                return true; 
              } 
           }); 
    //end add 


    63.如何修改系统默认输入法 
    下面将以“谷歌拼音输入法”为例,进行解释和说明。 
    第一步 修改/frameworks/base/packages/SettingsProvider/res/values/defaults.xml 添加如下代码: 
    <string name="config_default_input_method" 
    translatable="false">com.android.inputmethod.pinyin/.PinyinIME</string> 


    com.android.inputmethod.pinyin 在 AndroidManifest 文件中的 packagename 
    .PinyinIME 在 AndroidManifest 文件中的service name 
    第二步:修改 
    /frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java 
    在 private void loadSecureSettings(SQLiteDatabase db) 方法中,添加如下代码: 
    loadStringSetting( stmt, Settings.Secure.DEFAULT_INPUT_METHOD, 
    R.string.config_default_input_method ); 


    64.如何在桌面预置应用程序图标 
    桌面预制的图标:是在 launcher2 的 default_workspace.xml中配置的,文件路径: 
    Launcher2\res\xml\default_workspace.xml 


    65.添加搜索引擎 
    以添加139搜索引擎为例 
    a) 在packages/apps/Browser/res/values/all_search_engines.xml 
    <string-array name="search139" translatable="false"> 
    <item>139</item> 
    <item></item> 
    <item>http://s.139/favicon.ico</item> 
    <item>http://s.139/search.do?q={searchTerms}&amp;category=downloadable|web|browseable&amp;tid=2123,2124,2125,2126&amp;fr=portalcustom2</item>
    <item>UTF-8</item> 
    <item></item> 
    </string-array> 
    这6个<item>从上到下依次表示显示标签,关键字,搜索图标,搜索引擎地址,编码方式,搜索提示地址。 
    b) 在packages/apps/Browser/res/values/donottranslate-search_engines.xml 
    <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> 
    <string-array name="search_engines" translatable="false"> 
    <item>search139</item> 
    <item>baidu</item> 
    <item>google</item> 
    <item>yahoo</item> 
    <item>bing</item> 
    </string-array> 
    </resources> 
    在这边将139搜索引擎添加进来。 
    这边添加的搜索引擎是将1中的添加的搜索引擎变成设置中选择搜索引擎的选项。 


    66.修改 idle 界面搜索引擎的链接地址 
    packages/apps/quicksearchbox/res/values/strings.xml 下修改: 
    www.google为www.google.hk 


    67.Linux下ADB安装后增加设备权限: 
    /etc/udev/rules.d/51-Android.rules 
    SUBSYSTEM=="usb", SYSFS{"huawei"}=="12d1", MODE="0666"   //华为设备号 
    SUBSYSTEM=="usb", SYSFS{"Samsung"}=="04e8", MODE="0666"  //三星设备号 


    68.隐藏editText的软键盘

    在相应的配置文件中加入红色部分如下:

         <EditText
            android:layout_width="wrap_content"
            android:focusable="false"
            android:focusableInTouchMode="false"
            android:layout_height="wrap_content"
            android:id="@+id/editText"
            android:layout_below="@+id/textView"
            android:layout_alignParentStart="true" /> 



















        全志一些具体工作

        dmesg

        grep remotect1

        ===================================================全志新建一个自己的工程和编译============================================================

        1.在自己Android目录中:

        注意:执行完上述步骤之后,检查一下你工程目录中的package.sh文件,确定你要在lichee\tools\pack\chips\sun8iw3p1\configs\android中使用的名字。

        2.在lichee\tools\pack\chips\sun8iw3p1\configs\android中复制一份相同的目录,修改成自己的名字(名字要与上述注意事项的名字相同)。

        3.编译(以A23为例子)

        1)在lichee下:./build.sh config-->s0.un8iw3p1-->0. Android-->选择你自己的项目名(如不是第一次编译,直接./build.sh)

        2)在android中:执行source build/envsetup.sh -->lunch-->选择你自己的项目名-->extract-bsp,然后make

        ===============================================主要配置和修改============================================================

        主要配置sys_config.fex:Y:\a20\lichee\tools\pack\chips\sun7i\configs\android\wing-evb-v20\sys_config.fex

        本来A20开发板上自带CSI接口模组gt2005. 但需要将其替换成ov2643.

        1.修改: android/device/softwinner/wing-evb-v20/init.sun7i.rc

        使其在初始化时insmod ov2643 的driver.

        #sam modify it for ov2643

        #insmod /system/vendor/modules/gt2005.ko

        insmod /system/vendor/modules/ov2643.ko

        2. 修改

        lichee\tools\pack\chips\sun7i\configs\android\wing-evb-v20\sys_config.fex

        [csi0_para]

        csi_used = 1

        csi_dev_qty = 1

        csi_stby_mode = 0

        csi_mname = "ov2643"

        csi_if = 0

        csi_iovdd = ""

        csi_avdd = ""

        csi_dvdd = ""

        csi_vol_iovdd =

        csi_vol_dvdd =

        csi_vol_avdd =

        csi_vflip = 0

        csi_hflip = 1

        csi_flash_pol = 0

        csi_facing = 0

        csi_twi_id = 1

        csi_twi_addr = 0x60

        csi_pck = port:PE00<3>

        csi_ck = port:PE01<3>

        csi_hsync = port:PE02<3>

        csi_vsync = port:PE03<3>

        csi_d0 = port:PE04<3>

        csi_d1 = port:PE05<3>

        csi_d2 = port:PE06<3>

        csi_d3 = port:PE07<3>

        csi_d4 = port:PE08<3>

        csi_d5 = port:PE09<3>

        csi_d6 = port:PE10<3>

        csi_d7 = port:PE11<3>

        csi_reset =port:PH13<1><0>

        csi_power_en =port:PH16<1><1>

        csi_stby =port:PH18<1><0>

        任务2:使MAC地址不重复:

        修改:lichee\tools\pack\chips\sun7i\configs\android\default\env.cfg

        任务3: 修改开机画面:

        请注意:通常意义上的开机画面其实分以下三种:

        1. Linux系统启动时的小企鹅。(Android早期版本和当前一些开发板还有用)

        2. Android平台初始化时显示的rle图像。

        3.Android平台图形系统启动时,显示的一个动画,如果没有特别设定,就是那个不断变化光线位置的ANDROID的动画。

        我们着重学习2和3。

        3.2: 添加和修改Android平台初始化时显示的rle图像:

        /android/system/core/init/init.c

        的main()函数中有:

        queue_builtin_action(console_init_action,"console_init");

        它向init 进程中添加了一个执行Action。名字为:"console_init"。 执行的是:console_init_action()

        这里,就是显示开机画面的代码。

        #define INIT_IMAGE_FILE "/initlogo.rle"

        if( load_argb8888_image(INIT_IMAGE_FILE) ) {

        fd = open("/dev/tty0", O_WRONLY);

        if (fd >= 0) {

        const char*msg;

        msg = "\n"

        "\n"

        "\n"

        "\n"

        "\n"

        "\n"

        "\n" // console is 40 cols x 30 lines

        "\n"

        "\n"

        "\n"

        "\n"

        "\n"

        "\n"

        "\n"

        " A N D R OI D ";

        write(fd,msg, strlen(msg));

        close(fd);

        }

        这里,如果有/initlogo.rle,则利用framebuffer把图片显示在屏幕中。否则,打开串口,打印ANDROID.

        如何将24bpp或者32bpp bmp图像转化成rle文件格式呢?

        A20提供了一个软件:

        \lichee\tools\tools_win\LogoGen\LogoGen\BmpConvert.exe

        在Windows下,使用它将BMP图像转化为rle文件。

        之后把它放到:/android/device/softwinner/wing-evb-v20/目录下。

        请注意:此原始图像应与屏幕分辨率相同。当使用720P时,则应该使用1280x720的图片。

        3.3:修改Android平台图形系统启动时的动画:

        首先分析代码:

        /android/frameworks/base/cmds/bootanimation/BootAnimation.cpp

        #define USER_BOOTANIMATION_FILE"/data/local/bootanimation.zip"

        #define SYSTEM_BOOTANIMATION_FILE"/system/media/bootanimation.zip"

        #define SYSTEM_ENCRYPTED_BOOTANIMATION_FILE"/system/media/bootanimation-encrypted.zip"

        if ((encryptedAnimation&&

        (access(SYSTEM_ENCRYPTED_BOOTANIMATION_FILE,R_OK) == 0) &&

        (mZip.open(SYSTEM_ENCRYPTED_BOOTANIMATION_FILE)== NO_ERROR))

        ((access(USER_BOOTANIMATION_FILE, R_OK) == 0)&&

        (mZip.open(USER_BOOTANIMATION_FILE) ==NO_ERROR))

        ((access(SYSTEM_BOOTANIMATION_FILE, R_OK) == 0)&&

        (mZip.open(SYSTEM_BOOTANIMATION_FILE) ==NO_ERROR))) {

        mAndroidAnimation =false;

        }

        这一段明确说明了:如果/data/local/bootanimation.zip,/system/media/bootanimation.zip,/system/media/bootanimation-encrypted.zip这三个文件有任何一个存在且能够正常解压,则mAndroidAnimation=false.

        另一处:

        if (mAndroidAnimation) {

        r = android();

        } else{

        r = movie();

        }

        结合上面的代码,说明如果没有以上三个文件,则执行android();

        加载:/android/frameworks/base/core/res/assets/images/中的:android-logo-mask.png android-logo-shine.png

        这两个文件,一个是镂空的ANDROID字体默认的前景图片,文字部分镂空,大小256×64,一个是斜闪光,是动感效果。

        源码里默认是没有那些个.zip动画的,所以总会跳到android字体闪动的画面。

        我们通常下载一个别人制作好的文件,放在:

        \\android\out\target\product\wing-evb-v20\system\media下。

        desc.txt文件很简单:

        例1:

        480 854 20

        p 1 3 part0

        p 0 3 part1

        480854 20: 图像像素长宽为:480x854. 显示帧数:20帧。

        p 13 part0:part0里面的图片(可以是多幅) 每个显示一次,间隔3。

        p 03 part1:part1里面的图片显示无数次,间隔为3。

        例2:

        480 800 7

        p 0 0 part0

        480 800 7: 图像像素长宽为:480x800. 显示帧数:7帧。

        p 0 0 part0:part0里面的图像显示无数次。间隔为0。

        4. 预装APK:

        预装APK的方式有两种不同方式,一种是作为系统软件安装,用户无法在卸载界面看到它(所以无法卸载)。另一种作为正常软件安装。

        4.1:按照正常软件安装:

        把APK放到:/android/device/softwinner/wing-common/preinstallapk

        编译烧入后。启动后会静默安装。

        4.2:按系统软件安装:

        把APK放到:/android/device/softwinner/wing-common/apk

        如果此APK有library.则需要把它放到:/android/device/softwinner/wing-common/apklib

        最终,在Android Rootfs中,这个库会放到 /system/lib/中。

        5. 指定缺省Launcher:

        6. 配置wifi+bt

        a) init.sun7i.rc:Android/device/softwinner/wing-evb-v20/init.sun7i.rc为资源和服务配置的文件

        b) BoardConfig.mk:Android/device/softwinner/wing-evb-v20/BoardConfig.mk决定Android要加载哪一款wifi模组,以及是否支持蓝牙。

        c) .config:将wifi driver编译成模块,CONFIG_RTL8723AU = m

        d) Wing-evb-v20.mk:/android\device\softwinner\wing-evb-v20。决定拷贝文件rtl8723au wifi的firmware到相应的目录,要修改此目录。

        e) Ueventd.sun7i.rc:android\device\softwinner\wing-evb-v20。增加设备的节点

        f) Config.xml:android\device\softwinner\wing-evb-v20\overlay\frameworks\base\core\res\res\values.要打开蓝牙功能需要在文件中把蓝牙的bneq网口打开修改。

        g) Vnd-wing-evb-v10.txt:android\device\softwinner\common\hardware\realtek\bluetooth\libbt-vendor\rtl8723au\include配置蓝牙:

        h) bdroid_buildcfg.h:android\device\softwinner\wing-evb-v20\bluetooth。配置打开蓝牙时显示的本机的名字

        i) sys_config.fex:lichee\tools\pack\chips\sun7i\configs\android\wing-evb-v20决定选用的wifi模组,以及GPIO pin 的分配

        7.配置LCD屏

        a) LCD_PWM_EN,LCD_BL_EN,LCD_PWR_EN 这三个函数是通过 GPIO 控制实现电源和背光的开启关闭,IO 的位置及属性定义在 sys_config.fex 文件中。

        b) LCD基本配置在driver/video/sun7i/lcd/lcd0_panel_cfg.c中,可调节LCD背光,pwm等参数。

        c)

        d)

        8.摄像头配置

        a) Device Drivers --->Multimedia support ---> CSI Driver Config for sunxi ---> 或者Video capture adapters ---> 里面可以配置选上相应的摄像头。

        9.启动频率和电压

        a) Sys_config.fex文件中target中根据参考手册修改

        10.增加蓝牙选项

        1)android\frameworks\base\core\res\res\values\config.xml中加

        2)Y:\a20-v3.0\a20\android\device\softwinner\wing-k70\wing_k70.mk中增加相应模块

        3)Y:\a20-v3.0\a20\android\device\softwinner\wing-k70\init.sun7i.rc中增加相应模块

        4)Y:\a20-v3.0\a20\android\device\softwinner\wing-k70\BoardConfig.mk中增加相应模块

        11.修改字体以及整体大小

        a) Y:\a20\android\out\target\product\wing-k70\recovery\root\default.prop

        b) Y:\a20\android\out\target\product\wing-k70\system\build.prop中的fontScale

        12.关于按键映射

        1)mcu讲数据由串口传至arm,arm由串口程序接收,接收后,使用system函数映射按键system("input keyevent 82");后面的键值由Android映射的按键决定。

        2)增加MUTE按键:由于Android本身有静音按键,但是在a20\android\frameworks\base\media\java\android\media\AudioManager.java中却没有映射出来,所以要自己添加程序:

        public void handleKeyDown(KeyEvent event, int stream) {

        int keyCode = event.getKeyCode();

        boolean mute = isStreamMute(AudioManager.STREAM_MUSIC);

        switch (keyCode) {

        case KeyEvent.KEYCODE_VOLUME_UP:

        case KeyEvent.KEYCODE_VOLUME_DOWN:

        if (mute) {

        setStreamMute(AudioManager.STREAM_MUSIC, false);

        int volume = getStreamVolume(AudioManager.STREAM_MUSIC);

        if (volume == 0) {

        if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {

        setStreamMute(AudioManager.STREAM_MUSIC, true);

        break;

        } else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {

        setStreamMute(AudioManager.STREAM_SYSTEM, false);

        setStreamMute(AudioManager.STREAM_NOTIFICATION, false);

        }

        } else {

        setStreamMute(AudioManager.STREAM_SYSTEM, false);

        setStreamMute(AudioManager.STREAM_NOTIFICATION, false);

        adjustStreamVolume(AudioManager.STREAM_MUSIC,

        AudioManager.ADJUST_SAME,

        AudioManager.FLAG_SHOW_UI);

        break;

        }

        }

        int flags = FLAG_SHOW_UI

        FLAG_VIBRATE;

        if (mUseMasterVolume) {

        adjustMasterVolume(

        keyCode == KeyEvent.KEYCODE_VOLUME_UP

        ? ADJUST_RAISE

        : ADJUST_LOWER,

        flags);

        } else {

        adjustSuggestedStreamVolume(

        keyCode == KeyEvent.KEYCODE_VOLUME_UP

        ? ADJUST_RAISE

        : ADJUST_LOWER,

        stream,

        flags);

        }

        if (stream == AudioManager.STREAM_MUSIC) {

        int v = getStreamVolume(AudioManager.STREAM_MUSIC);

        mute = isStreamMute(AudioManager.STREAM_MUSIC);

        if (!mute && (v == 0)) {

        setStreamMute(AudioManager.STREAM_SYSTEM, true);

        setStreamMute(AudioManager.STREAM_MUSIC, true);

        setStreamMute(AudioManager.STREAM_NOTIFICATION, true);

        adjustStreamVolume(stream,

        AudioManager.ADJUST_SAME,

        AudioManager.FLAG_SHOW_UI);

        }

        }

        break;

        case KeyEvent.KEYCODE_VOLUME_MUTE:

        // TODO: Actually handle MUTE.

        mute = !mute;

        setStreamMute(AudioManager.STREAM_SYSTEM, mute);

        setStreamMute(AudioManager.STREAM_MUSIC, mute);

        setStreamMute(AudioManager.STREAM_NOTIFICATION, mute);

        adjustStreamVolume(AudioManager.STREAM_MUSIC,

        AudioManager.ADJUST_SAME,

        AudioManager.FLAG_SHOW_UI);

        break;

        }

        }

        加入上述代码,可讲MUTE键映射成功。

        13.关于UartTestApp服务(注意权限一定要最高)

        1)使用,mmm把seria编译成UartTestApp可行性文件后,在目录out/target/product/wing-k70/system/bin下,在init.rc中加入service UartTestApp /system/bin/UartTestApp

        class main

        user root

        group graphics

        2)修改bin目录下的preinstall.sh文件,加上$BUSYBOX chmod 777 /system/bin/UartTestApp

        3)如果1)中没有效果,接着在android\device\softwinner\wing-common\preinstall.sh中加上$BUSYBOX chmod 777 /system/bin/UartTestApp

        4)然后make

        14.gsensor方向

        1)修改驱动文件

        2)修改out/xxx/xxx/system/user/gsensor.cfg下的文件

        15.圆圈与十字架不在同一点

        以A23平台为例,是在android\frameworks\base\services\jni下的com_android_server_input_InputManagerService.cpp文件,outSpriteIcon->hotSpotX = pointerIcon.hotSpotX-10;

        outSpriteIcon->hotSpotY = pointerIcon.hotSpotY-10;这个位置更改白色圆圈图片的坐标,数值又白点位置决定。

        16.A23问题

        Nw7723l:有8089和rda两种wifi,

        8089:有1024x600和800x480两种分辨率,切换两种分辨时,主要修改:

        1)sys_config.fex,看是什么lcd,如RGB和LVDS的

        2)Out/xxx/xxx/system/bulid.prop中的ro.sf.lcd_density大小,1024为160,800为120,

        3)Sensor方向:--》14

        4)修改屏幕的方向。在build.prop文件中ro.sf.rotation=180(800x480)ro.sf.rotation=0(1024x600)

        5)修改开机启动画面android\out\target\product\polaris-nw7723lesp\system\media,修改 6)

        6) lichee\tools\pack\chips\sun8iw3p1\configs\android\polaris-nw7723lesp中的bootlogo.bmp,根据情况修改。

        7)去掉又上角信号图标,找到\android\frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\policy\NetworkController.java

        把其中关于stat_sys_signal_null的部分注释掉。

        8)去掉解锁屏幕上关于SIM:字样。找到\android\frameworks\base\packages\Keyguard\src\com\android\keyguard\CarrierText.java把setText("SIM1:" + (text != null ? text.toString().toUpperCase() : null));注释掉。

        16.关于亮度调节

        亮度条减到一定值时屏幕变黑,此时修改亮度最小值:android\device\softwinner\fiber-common\hardware\libhardware\lights\lights.c

        static int set_light_backlight(struct light_device_t *dev,

        struct light_state_t const *state)

        {

        struct light_context_t *ctx;

        int err = 0;

        int brightness = rgb_to_brightness(state);

        // add

        if( brightness <= 80 )

        brightness = 80;

        //

        pthread_mutex_lock(&g_lock);

        unsigned long args[3];

        args[0] = 0;

        args[1] = brightness;

        args[2] = 0;

        err = ioctl(fd,DISP_CMD_LCD_SET_BRIGHTNESS,args);

        pthread_mutex_unlock(&g_lock);

        return err;

        }

        17.修改主页面添加程序的快捷方式:android\device\softwinner\astar-7723l\overlay\packages\apps\Launcher2\res\xml-sw720dp,或者在device/softewinner/overlay/Launcher中根据需要修改,可参照A23,default_ apace.xml里面的数据,跟A23对比即可。

        18.删除右上角信号图标:找到X:\A23\nw7723l\esp8089\android\frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\SignalClusterView.java,找到stat_sys_signal_null,把这一部分代码注释即可。

        19.A33移植注意问题

        1)lcd_pwm_pol 由0改为1,不然调节亮度会有问题

        2)vip_define_sensor_list = 0取消扫描,不然会找不到摄像头

        3)[clock] pll configuration选项的pll10 = 297

        4)[dram_para]中dram_clk = 480与A23 = 552不同,不降频使用系统会不稳定

        5)声音太小在配置文件中找到audio。pa_double_used = 1,原来为0更改为1。添加headset_mic_vol = 3 main_mic_vol = 1

        6)修改下拉菜单中的服务问题:修改framework下的GsmServiceStateTracker.java KeyguardTouchDelegate.java KeyguardUpdateMonitor.java NetworkController.java中的文件,修改的时候跟a23的对比修改。

        7)找不到camera时,有可能是camera.cfg中的没有相关的信息(在out目录下)。Camera方向不对时,更改camera.cfg中相关的角度。

        8)找不到gsensor时,可参照7)。同时,查看android\device\softwinner\polaris-common\hardware\libhardware\libsensors\sensorDetect.cpp下有没有对应sensor的信息,跟原来的可用的对比,在debug模式下查看gsensor信息:input5。修改完成后使用adb push xxx /system/usr下

        9)修改虚拟按键位置:竖屏时虚拟按键不能完全显示:平板布局需修改文件。frameworks/base/packages/SystemUI/res/layout-sw600dp/navigation_bar.xml,

        如果想注销某个按键,只需作如下修改即可:

        - android:layout_width="128dp" android:paddingStart="25dp" android:paddingEnd="25dp"

        + android:layout_width="0dp" android:paddingStart="25dp" android:paddingEnd="25dp"

        如果想要按键偏移,可以修改这个值android:layout_width="3300",

        10)更换camera时,如0312+0328,首先确保I2C地址是正确的,如果两个I2C地址一样的话在sys_config.fex中有一个设置为不一样的(比如前置随便设置一个),否则只能检测一个,另一个会检测不到,在设置好地址后,挂载模块以后,看打印信息echo 8 > /proc/sys/kernel/printk,查看驱动的信息,如果找不到i2c地址使用test查看哪个i2c地址是正确的,在函数static int sensor_read(struct v4l2_subdev *sd, unsigned char reg, unsigned char *value)中加入

        struct i2c_client *client = v4l2_get_subdevdata(sd);

        client->addr = I2C_ADDR;

        for(i = 0; i < 128 ;i ++)

        {

        client->addr = i;//I2C_ADDR;

        printk("r:sa set is 0x%x\n",i);

        ret = cci_read_a8_d8(sd,reg,value);

        if(ret == 0)

        printk(KERN_ERR "found 0x%x \n",i);

        },根据情况而变。如果在sensor_detect中出错,打印查看value的值,更改它。

        10)移植rda5991:

        a) 调试蓝牙时,如出现mmc uartclk 过高,不在频率范围时,可更改X:\a33\android\external\bluetooth_rda\bt_cfg.h文件中的CUST_BT_SERIAL_BOURATE小一点的波特率

        11)去掉蓝牙图标:删除frameworks/native/data/etc/android.hardware.bluetooth.xml文件以及system/etc/permissions/android.hardware.bluetooth.xml,同理增加蓝牙图标时放进去即可。

        12)置换默认壁纸android\frameworks\base\core\res\res\drawable-sw600dp-nodpi

        13)修改默认亮度:修改frameworks\base\packages\SettingsProvider\res\values\defaults.xml文件中的def_screen_brightness的值

        14)A33 lvds RGB切换

        a) 修改系统UI方向:RGB:在device\softwinner\astar-7723l\astar_7723l.mk中加入PRODUCT_PROPERTY_OVERRIDES += \ro.sf.rotation=180 ,在build.prop中加入ro.sf.rotation=180 LVDS: = 0

        b) 修改bootlogo.bmp以及initlogo.rle:RGB:反向,LVDS:正向

        c) 修改gsensor方向:在system/usr/gsensor.cfg中修改lcs RGB:false true LVDS:true false

        20.去掉setting中某个选项:

        a) 如果只是preference而不是checkboxpreference时,直接注释掉相应的preference即可

        b) 如果是checkboxpreference:找到对应的Android:key找到对应的java代码,在相应代码后面加上getPreferenceScreen().removePreference(mBluetoothTether);

        如下例子:去掉“手机套餐”以及“蓝牙共享网络”,xml路劲Setting/res/xml/wirless_setting.xml setting/res/tether_prefx.xml java路径:src/com/android/setting/tethersetting.java

        Xml:lichee/brandy/u-boot-2011.09/drivers/video_sunxi/sunxi_v2/de_bsp/de/lowlevel_sun8iw5/de_be.c

        android:key="enable_bluetooth_tethering"

        android:title="@string/bluetooth_tether_checkbox_text"

        android:persistent="false" />

        Java:

        mBluetoothTether = (CheckBoxPreference) findPreference(ENABLE_BLUETOOTH_TETHERING);

        getPreferenceScreen().removePreference(mBluetoothTether);

        21.去掉窗口小部件中的蓝牙快捷方式:在窗口小部件的xml源码中:Settings/res/layout/widget.xml中,找到蓝牙的加入android:visibility="gone"使其隐藏

        22.系统自带的浏览器下载东西时出错退出信息如下failed to find provider info for downloads Unknown URL content://downloads

        ,查看有没有DownloadProvider(下载)这个服务,如果没有,在priv-app中加入DownloadProvider.apk和在app中加入DownloadProviderUi.apk

        23.修改logcat的等级lichee\tools\pack\chips\sun8iw5p1\configs\default\env.cfg中的loglevel,默认是4,数字越大,级别越高。

        24.关于Android4.4对外置卡写入限制问题:Android4.4以后对外置卡写入进行了限制,如要写入,需要对frameworks\base\data\etc下的platform.xml或者system/etc/permissions/platform.xml文件中

        加入这一行

        25.切换成阿拉伯语是systemui出现错误:Keyguard discontent ,其实是虚拟按键没有找到,主要是在切换语言是,使用了不同语言的frameworks\base\packages\SystemUI\res\layout

        layout-ldrtl优先级介绍,layout-ldrtl优先级要低于语言级别(layout-ar),因此如果存在layout-ar目录,会首先去查找layout-ar目录下的布局文件,因此建议删除layout-ar等bidi语言目录。layout-ldrtl优先级又高于分辨率等级,优先级归纳如下:

        layout-ar(语言级别) > layout-ldrtl > layout-800*540(分辨率),如果layout-ldrtl中的navigation_bar.xml文件中没有相应虚拟按键的id(比如没有volume的按键),则对比另外几个layout,把没有的id添加上

        E/AndroidRuntime( 1845): java.lang.NullPointerException

        E/AndroidRuntime( 1845): at com.android.systemui.statusbar.phone.NavigationBarView.setDisabledFlags(NavigationBarView.java:395)

        E/AndroidRuntime( 1845): at com.android.systemui.statusbar.phone.NavigationBarView.notifyScreenOn(NavigationBarView.java:321)

        E/AndroidRuntime( 1845): at com.android.systemui.statusbar.phone.PhoneStatusBar.notifyNavigationBarScreenOn(PhoneStatusBar.java:822)

        E/AndroidRuntime( 1845): at com.android.systemui.statusbar.phone.PhoneStatusBar.access$3800(PhoneStatusBar.java:110)

        E/AndroidRuntime( 1845): at com.android.systemui.statusbar.phone.PhoneStatusBar$30.onReceive(PhoneStatusBar.java:2485)

        E/AndroidRuntime( 1845): at com.android.systemui.statusbar.phone.PhoneStatusBar.makeStatusBarView(PhoneStatusBar.java:639)

        E/AndroidRuntime( 1845): at com.android.systemui.statusbar.phone.PhoneStatusBar.addStatusBarWindow(PhoneStatusBar.java:2270)

        E/AndroidRuntime( 1845): at com.android.systemui.statusbar.phone.PhoneStatusBar.createAndAddWindows(PhoneStatusBar.java:2244)

        E/AndroidRuntime( 1845): at com.android.systemui.statusbar.BaseStatusBar.start(BaseStatusBar.java:253)

        E/AndroidRuntime( 1845): at com.android.systemui.statusbar.phone.PhoneStatusBar.start(PhoneStatusBar.java:349)

        E/AndroidRuntime( 1845): at com.android.systemui.statusbar.SystemBars.createStatusBarFromConfig(SystemBars.java:106)

        E/AndroidRuntime( 1845): at com.android.systemui.statusbar.SystemBars.onNoService(SystemBars.java:58)

        E/AndroidRuntime( 1845): at com.android.systemui.statusbar.ServiceMonitor.startService(ServiceMonitor.java:228)

        E/AndroidRuntime( 1845): at com.android.systemui.statusbar.ServiceMonitor.access$000(ServiceMonitor.java:49)

        E/AndroidRuntime( 1845): at com.android.systemui.statusbar.ServiceMonitor$1.handleMessage(ServiceMonitor.java:73)

        E/AndroidRuntime( 1845): at android.os.Handler.dispatchMessage(Handler.java:102)

        E/AndroidRuntime( 1845): at android.os.Looper.loop(Looper.java:136)

        E/AndroidRuntime( 1845): at android.app.ActivityThread.main(ActivityThread.java:5017)

        E/AndroidRuntime( 1845): at java.lang.reflect.Method.invokeNative(Native Method)

        E/AndroidRuntime( 1845): at java.lang.reflect.Method.invoke(Method.java:515)

        E/AndroidRuntime( 1845): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)

        E/AndroidRuntime( 1845): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)

        E/AndroidRuntime( 1845): at dalvik.system.NativeStart.main(Native Method)

        W/ActivityManager( 468): Process com.android.systemui has crashed too many times: killing!

        26.修改开机第一屏时的背光亮度:lichee\brandyu-boot-2011.09\drivers\video_sunxi\sunxi_v1\de_bsp\de\ebios\de_be.c中的brightness = brightness>100?100:(brightness<0?0:brightness);以及ichee\brandyu-boot-2011.09\drivers\video_sunxi\sunxi_v2\de_bsp\de\lowlevel_sun8iw5\de_be.c同上。

        27.当看视频时把屏幕倒回来看时,点击视频会抖动,修改android/device/softwinner/polaris-common/hardware/libhardware/hwcomposer中的hwc_sunxi.cpp文件中的static int _hwcdev_fe_can_use函数

        double fe_clk = 234000000;

        int fe_pro_w=0;

        int fe_pro_h=0;

        int m = 5;

        int n = 4; 在后面添加return 0,

        return 0;

        。。。

        28.在容易出现死机重启时,ddr不稳定,尝试修改dram_clk的频率,以及dcdc5_vol的电压,以及LVx_freq的频率

        29.移植ap6476注意事项

        1)调试wifi

        a) 首先确认wifi脚位配置是否正确

        b) 查看wifi使用的电压引脚,配置电压,在arch/arm/mach-sunxi/rf/wifi_pm_ap6xxx.c中添加wifi电压相关的信息

        type = script_get_item(wifi_para, "ap6xxx_wl_regon", &val);

        if (SCIRPT_ITEM_VALUE_TYPE_PIO!=type)

        ap6xxx_msg("get ap6xxx ap6xxx_wl_regon gpio failed\n");

        else

        gpio_p = &val.gpio;

        ap6xxx_wl_regon = gpio_p->gpio;

        sunxi_ap6xxx_gpio_req(gpio_p);等等相关信息

        c)在setting中,看wifi开关是否能打开,如打不开,是上层为配置好,查看X:\softwinner\A33\nw1034\android\device\softwinner\astar-nw1034\中相关mk文件有吗ap6476相关信息,查看framework,与移植包一一对应修改

        d)如出现[ 10.706820] [mmc]: sdc1 power_supply is null

        [ 10.711567] [mmc]: sdc1 card_power_on ok

        [ 10.730037] [mmc]: sdc1 set ios: clk 400000Hz bm PP pm ON vdd 3.3V width 1 timing LEGACY(SDR12) dt B

        [ 10.740278] [mmc]: mclk 0xf1c2008c 0x8002000e

        [ 10.822362] [mmc]: *** sunxi_mci_dump_errinfo(L773): smc 1 err, cmd 52, RTO !!

        [ 10.831311] [mmc]: *** sunxi_mci_dump_errinfo(L773): smc 1 err, cmd 52, RTO !!

        [ 10.839453] [mmc]: sdc1 set ios: clk 400000Hz bm PP pm ON vdd 3.3V width 1 timing LEGACY(SDR12) dt B

        [ 10.849710] [mmc]: mclk 0xf1c2008c 0x8002000e

        [ 10.912002] [mmc]: sdc1 set ios: clk 400000Hz bm PP pm ON vdd 3.3V width 1 timing LEGACY(SDR12) dt B

        [ 10.922230] [mmc]: mclk 0xf1c2008c 0x8002000e

        [ 10.983926] [mmc]: *** sunxi_mci_dump_errinfo(L773): smc 1 err, cmd 8, RTO !!

        Mmc等错误,尝试降低sdio的速率并查看电压是否正常。

        2)调试蓝牙

        a) 首先确认蓝牙脚位配置是否正确

        b) 在正确的情况下查看蓝牙电压是否正确,

        出现D/BluetoothAdapterState( 919): CURRENT_STATE=PENDING, MESSAGE = STARTED, isTurningOn=true, isTurningOff=false

        I/bluedroid( 919): enable

        E/GKI_LINUX( 919): ##### ERROR : GKI_exception: GKI_exception(): Task State Table

        E/GKI_LINUX( 919): #####

        E/GKI_LINUX( 919): ##### ERROR : GKI_exception: TASK ID [0] task name [(null)] state [0]

        E/GKI_LINUX( 919): #####

        E/GKI_LINUX( 919): ##### ERROR : GKI_exception: TASK ID [1] task name [BTIF] state [1]

        E/GKI_LINUX( 919): #####

        E/GKI_LINUX( 919): ##### ERROR : GKI_exception: TASK ID [2] task name [A2DP-MEDIA] state [1]

        E/GKI_LINUX( 919): #####

        E/GKI_LINUX( 919): ##### ERROR : GKI_exception: GKI_exception 65531 Sending to unknown dest#####

        E/GKI_LINUX( 919): ##### ERROR : GKI_exception:

        E/GKI_LINUX( 919): ********************************************************************

        E/GKI_LINUX( 919): #####

        E/GKI_LINUX( 919): ##### ERROR : GKI_exception: * GKI_exception(): 65531 Sending to unknown dest

        E/GKI_LINUX( 919): #####

        E/GKI_LINUX( 919): ##### ERROR : GKI_exception: **********************************等错误,先查看蓝牙的wake脚位的电压是否正确,如不为高,

        查看是否已经在arch/arm/mach-sunxi/rf/bt_pm.c中的rfkill_set_power函数增加wifi_pm_gpio_ctrl("ap6xxx_bt_wake", 1);把wake脚设置为高。

        c) 如果出现[ 196.177323] +++++++++++ bt gpio on +++++++

        d) [ 196.191878] gpio ap6xxx_bt_regon set io=360 val 1, act val 1

        e) [ 196.210244] gpio ap6xxx_bt_wake set io=362 val 1, act val 1

        f) [ 196.733337] sw_uart_check_baudset()443 - uart1, select set 5, baud 1000000, uartclk 24000000 beyond rance[31000000, 120000000]

        g) [ 196.848732] sw_uart_check_baudset()443 - uart1, select set 5, baud 1000000, uartclk 24000000 beyond rance[31000000, 120000000]

        h) [ 196.871298] sw_uart_check_baudset()443 - uart1, select set 5, baud 1000000, uartclk 24000000 beyond rance[31000000, 120000000]

        修改串口的速率,根据uartclk 24000000查看lichee/linux-3.4/drivers/tty/serial/sunxi-uart.c中的范围,提高或者降低波特率。在android\hardware\broadcom\libbt\include\vnd_softwinner-ap6476.txt中修改

        BLUETOOTH_UART_DEVICE_PORT = "/dev/ttyS2"

        FW_PATCHFILE_LOCATION = "/system/vendor/modules/"

        LPM_IDLE_TIMEOUT_MULTIPLE = 5

        UART_TARGET_BAUD_RATE = 1500000

        30.wifi,蓝牙等默认开关位置

        android\frameworks\base\packages\SettingsProvider\res\values\defaults.xml

        31.A23(5501)增加、删除wifi选项

        1)注释或者添加

        android:title="@string/header_category_wireless_networks" />

        android:id="@+id/wifi_settings"

        android:fragment="com.android.settings.wifi.WifiSettings"

        android:title="@string/wifi_settings_title"

        android:icon="@drawable/ic_settings_wireless" />

        2)X:\softwinner\A23\nw5501\nw5501_sources_wifi_0805\android\packages\apps\Settings\src\com\android\settings\Settings.java

        a)在 private int[] SETTINGS_FOR_RESTRICTED 中注释或者添加

        //R.id.wireless_section,

        //R.id.wifi_settings,

        B)在private void updateHeaderList(Listtarget)中注释或者添加

        else if (id == R.id.wifi_settings) {

        // Remove WiFi Settings if WiFi service is not available.

        if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI)) {

        target.remove(i);

        }

        }

        C)在static int getHeaderType(Header header) 中注释或者添加

        else if (header.id == R.id.wifi_settings

        header.id == R.id.bluetooth_settings) {

        return HEADER_TYPE_SWITCH;

        }

        D)在 switch (headerType) {中注释或者添加

        if (header.id == R.id.wifi_settings) {

        mWifiEnabler.setSwitch(holder.switch_);

        } else {

        mBluetoothEnabler.setSwitch(holder.switch_);

        }

        3)有wifi的时候出现如下错误

        D/audio_hw_primary( 114): out_standby

        E/WifiHW ( 378): Supplicant not running, cannot connect

        E/WifiHW ( 378): Supplicant not running, cannot connect

        E/WifiHW ( 378): Supplicant not running, cannot connect

        E/WifiHW ( 378): Supplicant not running, cannot connect

        E/WifiHW ( 378): Supplicant not running, cannot connect

        E/WifiStateMachine( 378): Failed to setup control channel, restart supplicant

        D/WifiHW ( 108): Enter: wifi_get_fw_path function, fw_type=0,

        E/WifiStateMachine( 378): Failed to reload STA firmware java.lang.IllegalStateException: command '129 softap fwreload wlan0 STA' failed with '400 129 Softap operation failed (No such device)'

        W/CommandListener( 108): Failed to retrieve HW addr for wlan0 (No such device)

        D/CommandListener( 108): Setting iface cfg

        E/WifiStateMachine( 378): Unable to change interface settings: java.lang.IllegalStateException: command '131 interface setcfg wlan0 0.0.0.0 0 down' failed with '400 131 Failed to set address (No such device)'

        E/wpa_supplicant( 3204): nl80211: Could not configure driver to use managed mode

        E/wpa_supplicant( 3204): Could not read interface p2p0 flags: No such device

        E/wpa_supplicant( 3204): p2p0: Failed to initialize driver interface

        E/WifiHW ( 378): Unable to open connection to supplicant on "wlan0": No such file or directory

        E/WifiHW ( 378): Supplicant not running, cannot connect

        E/WifiHW ( 378): Supplicant not running, cannot connect

        E/WifiHW ( 378): Supplicant not running, cannot connect

        E/WifiHW ( 378): Supplicant not running, cannot connect

        E/WifiHW ( 378): Supplicant not running, cannot connect

        E/WifiStateMachine( 378): Failed to setup control channel, restart supplicant

        主要是驱动没有找到,查看驱动是否挂载,没有挂载的时候在init.sun8i.rc中加入insmod esp8089.ko

        Adb shell基础知识

        32.在写一个apk时,Edittext可以指定输入字符

        33.

        1)在shell中,可以使用am start -n 包名/类名 来打开应用程序如am start -n com.android.settings/.Settings

        2)使用svc wifi enable/disabled来打开或者关闭wifi

        3)Shell截屏:

        adb shell /system/bin/screencap -p /sdcard/screenshot.png

        adb pull /sdcard/screenshot.png E:\

        34.制作测试软件

        在lichee下执行./build.sh config选择平台dragonboard,然后编译lichee,同时更改test_config.fex,加载相应的驱动。

        35.去掉电池图标

        找到该文件android\frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\policy\BatteryController.java

        //add by lc 150210 1line

        import android.view.View;

        import com.android.systemui.R;

        public class BatteryController extends BroadcastReceiver {

        private static final String TAG = "StatusBar.BatteryController";

        private Context mContext;

        private ArrayListmIconViews = new ArrayList();

        private ArrayListmLabelViews = new ArrayList();

        private ArrayListmChangeCallbacks =

        new ArrayList();

        public interface BatteryStateChangeCallback {

        public void onBatteryLevelChanged(int level, boolean pluggedIn);

        }

        public BatteryController(Context context) {

        mContext = context;

        IntentFilter filter = new IntentFilter();

        //del 20150210 1line

        // filter.addAction(Intent.ACTION_BATTERY_CHANGED);

        context.registerReceiver(this, filter);

        }

        public void addIconView(ImageView v) {

        //add lc 20150210 2line

        v.setVisibility(View.GONE);

        mIconViews.add(v);

        }

        public void addLabelView(TextView v) {

        //add lc 20150210

        v.setVisibility(View.GONE);

        mLabelViews.add(v);

        }

        36.一个应用不需要横竖屏选择的时候加入以下:只横屏显示,在AndroidManifest.xml的< p="">

        37.只替换内核的时,在shell中,进入system目录:dd if=/boot.img of=/dev/block/nandc

        38.设置字体大小比例

        因为我修改 ro.sf.lcd_density的值,将它从160修改 为120,所以导致整个系统的字体都变得很小。因此需要将整个字体变大,并且在设置-->显示-->字体大小的4个选项的值都必须变大。我想到的思路是将字体的缩放比例调大一些,下面是我的修改步骤。

        1、修改默认字体的大小

        Step1: 修改frameworks/base/core/java/android/content/res/Configuration.java

        文件中的setToDefaults()方法,将默认的字体缩放比例调为1.35f,即修改fontScale属性

        [java]

        Public void setToDefaults(){

        fontScale=1.35f; //default value is 1

        mcc = mnc = 0;

        ....

        }

        2、修改设置-->显示-->字体大小的4个选项值

        Step2: vim packages/apps/Settings/res/values/arrays.xml和

        vim packages/apps/Settings/res/values-sw600dp/arrays.xml

        下面就是4个选项对应的值,分别为 小、正常、大、超大

        [html]

        1.4

        dabao1.45

        1.5

        1.55

        Step3: 编译frameworks模块

        [html]

        mm frameworks/

        Step4:

        编译packages模块

        [html]

        mm packages/

        39.更改图标大小android\packages\apps\Launcher2\res\values-sw600dp\dimens.xml,找到58dp

        ,数值越大,图标越大。图标太大时字体会显示不全

        40.禁用下拉菜单KeyguardViewMediator.java

        03:2禁用状态栏下拉

        if (mStatusBarManager == null) {

        mStatusBarManager = (StatusBarManager)

        getSystemService(Context.STATUS_BAR_SERVICE);

        }

        禁用if (mStatusBarManager != null) {

        mStatusBarManager.disable(StatusBarManager.DISABLE_EXPAND);

        }

        不禁用if (mStatusBarManager != null) {

        mStatusBarManager.disable(StatusBarManager.DISABLE_NONE);

        }

        41.摄像头插值,在camera.cfg中找到分辨率,改成你要

        42.apk反编译问题,jdk最好装1.7以上的,版本太低有些反编译有些apk的时候会出现错误,

        Exception in thread "main" java.lang.UnsupportedClassVersionError: brut/apktool/Main : Unsupported major.minor version 51.0

        at java.lang.ClassLoader.defineClass1(Native Method)

        at java.lang.ClassLoader.defineClassCond(Unknown Source)

        at java.lang.ClassLoader.defineClass(Unknown Source)

        at java.security.SecureClassLoader.defineClass(Unknown Source)

        at java.URLClassLoader.defineClass(Unknown Source)

        at java.URLClassLoader.access$000(Unknown Source)

        at java.URLClassLoader$1.run(Unknown Source)

        at java.security.AccessController.doPrivileged(Native Method)

        at java.URLClassLoader.findClass(Unknown Source)

        at java.lang.ClassLoader.loadClass(Unknown Source)

        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)

        at java.lang.ClassLoader.loadClass(Unknown Source)

        打包后用apktool反编译再打包都没问题,安装时出现Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]错误,网上查资料原来是签名的问题,解决方案如下。

        《一》使用命令行生成签名文件

        (1)创建一个用来存放签名文件的文件夹Android_keystore

        (2)在命令行窗口中输入命令:(粗体部分)

        [java] view plaincopy

        1. D:\Android_keystore>keytool -genkey -alias aeo_android.keystore -keyalg RSA -validity 2000 -keystore aeo_abdroid.keystore

        [java] view plaincopy

        1. 输入密钥库口令:

        2. 再次输入新口令:

        3. 您的名字与姓氏是什么?

        4. [Unknown]: localhost

        5. 您的组织单位名称是什么?

        6. [Unknown]: btbu

        7. 您的组织名称是什么?

        8. [Unknown]: btbu

        9. 您所在的城市或区域名称是什么?

        10. [Unknown]: beijing

        11. 您所在的省/市/自治区名称是什么?

        12. [Unknown]: beijing

        13. 该单位的双字母国家/地区代码是什么?

        14. [Unknown]: cn

        15. CN=XiaoFeng, OU=btbu, O=btbu, L=beijing, ST=beijing, C=cn是否正确?

        16. [否]: y

        输入的密钥口令

        (如果和密钥库口令相同, 按回车):

        这时会在D盘的Android_keystore文件夹下生成aeo_android.keystore文件,就是我们需要的签名文件,(-validity 20000 表示证书的有效天数为20000天)

        《二》用生成的签名文件对apk文件进行签名

        (1)在Eclipse中用“Export the unsigned apk”工具导出项目,这里保存到D盘的Android_keystore文件夹下,名为testbim.apk

        (2)使用jarsigner给 testbim.apk 文件签名,如下所示:

        [java] view plaincopy

        1. D:\Android_keystore>"C:\Program Files\Java\jdk1.7.0_67\bin\jarsigner.exe" -verbose -keystore aeo_android.keystore -signedjar Launcher2_signed.apk Launcher2.apk aeo_android.keystore

        2. 输入密钥库的口令短语:

        3. 正在添加: META-INF/MANIFEST.MF

        4. 正在添加: META-INF/AEO_ANDR.SF

        5. 正在添加: META-INF/AEO_ANDR.RSA

        6. 正在签名: res/drawable-hdpi/ic_action_search.png

        7. 正在签名: res/drawable-hdpi/ic_launcher.png

        8. 正在签名: res/drawable-ldpi/ic_launcher.png

        9. 正在签名: res/drawable-mdpi/ic_action_search.png

        10. 正在签名: res/drawable-mdpi/ic_launcher.png

        11. 正在签名: res/drawable-xhdpi/ic_action_search.png

        12. 正在签名: res/drawable-xhdpi/ic_launcher.png

        13. 正在签名: res/layout/activity_main.xml

        14. 正在签名: res/layout/two.xml

        15. 正在签名: res/menu/activity_main.xml

        16. 正在签名: AndroidManifest.xml

        17. 正在签名: classes.dex

        18. 正在签名: resources.arsc

        keytool 是个密钥和证书管理工具。jarsigner 工具利用密钥仓库中的信息来产生或校验 Java 存档 (JAR) 文件的数字签名 (JAR 文件将类文件、图象、声音和/或其它数字化数据打包在一个文件中)。

        这两个工具都是JDK自带的,所以你当前需要先确保JDK安装正确。并且环境变量设置正确,以便可以以命令行的方式进行处理。

        输入密匙的口令短语:

        ......

        通过上面的命令就可以讲未签名的testbim.apk 文件签名为

        [java] view plaincopy

        1. testbim_signed.apk

        (3)最后验证是否签名成功

        Android_keystore>"C:\Program Files\Java\jdk1.6.0_30\bin\jarsigner.exe" -verify testbim_signed.apk

        如果成功则

        输出:

        jar 已验证

        43.使用adb与机器连接的时候出现错误

        adb server is out of date. killing...

        ADB server didn't ACK

        * failed to start daemon *

        是adb server端口被占用了

        先执行adb nodaemon server ,查看adb server的端口是多少

        C:\Users\xxxx>

        cannot bind 'tcp:5037'

        再执行下netstat -ano

        findstr "5037"

        C:\Users\xxxxxx>netstat -ano

        findstr "5037"

        TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 4236

        TCP 127.0.0.1:5037 127.0.0.1:49422 ESTABLISHED 4236

        TCP 127.0.0.1:49422 127.0.0.1:5037 ESTABLISHED 3840

        然后执行tskill 4236即可

        44.去掉长按图标时Info选项

        1) android\packages\apps\Launcher2\src\com\android\launcher2\SearchDropTargetBar.java在这个文件中去点关于info的信息

        Line 49: private ButtonDropTarget mInfoDropTarget;

        Line 67: dragController.addDragListener(mInfoDropTarget);

        Line 69: dragController.addDropTarget(mInfoDropTarget);

        Line 72: mInfoDropTarget.setLauncher(launcher);

        Line 101: mInfoDropTarget = (ButtonDropTarget) mDropTargetBar.findViewById(R.id.info_target_text);

        Line 105: mInfoDropTarget.setSearchDropTargetBar(this);

        2) android\packages\apps\Launcher2\res\layout\drop_target_bar.xml中删除以下

        xmlns:android="http://schemas.android/apk/res/android"

        style="@style/DropTargetButtonContainer"

        android:layout_weight="1">

        style="@style/DropTargetButton"

        android:id="@+id/info_target_text"

        android:text="@string/info_target_label"

        android:drawableStart="@drawable/info_target_selector" />

        备注:lichee/brandy/u-boot-2011.09/drivers/video_sunxi/sunxi_v2/de_bsp/de/lowlevel_sun8iw5/de_be.c

        X:\softwinner\A33\7729\lichee\brandy\u-boot-2011.09\include\spare_head.h 52 #define SUNXI_UPDATE_NEXT_ACTION_CHARGE (6)

本文标签: