Android系统移植与调试之------->如何添加一个adb wifi无线调试的功能【开发者选项】-【Wifi调试】

首先弄懂怎么设置adb wifi无线调试的功能,如下所示。

1. 手机端开启adb tcp连接端口

:/$setprop service.adb.tcp.port 5555
:/$stop adbd
:/$start adbd

其中setprop是用来设置系统属性的,这里不需要root权限,su即可。可通过adb shell设置,亦可通过手机上安装的Android terminal设置。

2. 电脑端的设置和使用

连接adb,其中phone_ipaddress和portnumber是指手机的ip和前面设置的监听端口号(如5555)

adb connect phone_ipaddress:portnumber

直接adb shell或adb -s 设备shell连接设备

如若要断开则如下:

adb disconnect phone_ipaddress:port

    

      但是每次这样的去设置很繁琐,所以直接在设置中做一个开关就把手机端的设置做好,如下所示:

一、打开开关,并连接Wifi

二、打开开关,没有连接Wifi

三、未打开开关

这样就可以直接进行adb wifi调试了,手机端就不用每次都先用USB调试去设置修改的属性,才能激活adb wifi调试。

======================================================================================================

下面来具体说说实现的思路:

第一步:在【设置】-->【开发者选项】中做一个类似于【USB调试】的开关【Wifi调试】

第二步:【Wifi调试】开关打开就激活监听5555端口,用来进行adb wifi调试,【Wifi调试】开关关闭就不监听5555端口,这样就不能进行adb wifi调试

第三步:在第二步中打开关闭【Wifi调试】开关的时候,调用相应的接口进行设置

第四步:将第三步中要调用的接口写好

1、先在布局中加入该开关

首先找到布局文件,packages/apps/Settings/res/xml/development_prefs.xml,找到【USB调试】开关的相应代码,然后再里面加一个【Wifi调试】开关,代码如下:

        <SwitchPreference
            android:key="enable_adb"
            android:title="@string/enable_adb"
            android:summary="@string/enable_adb_summary"/>

        <!-- added by ouyang start -->
        <SwitchPreference
            android:key="enable_wifi_adb"
            android:title="@string/enable_wifi_adb"
            android:summary="@string/enable_wifi_adb_summary"/>
 	<!-- added by ouyang end -->

上面代码中,第一个代码是【USB调试】开关的代码,第二个是我加的【Wifi调试】开关的代码,然后为什么的字符串做相应的国际化操作,代码如下:

packages/apps/Settings/res/values-zh-rCN/strings.xml 中加入:

<!-- added by ouyang start 2015-12-17 -->
    <string name="enable_wifi_adb">Wifi调试</string>
    <string name="enable_wifi_adb_openwifi">Wifi没连接,请连接wifi</string>
    <string name="enable_wifi_adb_summary">连接Wifi后启用调试模式</string>
    <string name="enable_wifi_adb_connected_summary">Wifi调试已打开,在电脑端你可以输入以下命令进行调试:\n
         			adb connect <xliff:g id="ip_address">%1$s</xliff:g>:5555</string>
    <!-- added by ouyang end 2015-12-17 -->

packages/apps/Settings/res/values/strings.xml 中加入:

 <!-- added by ouyang start 2015-12-17 -->
    <string name="enable_wifi_adb">Wifi debugging</string>
    <string name="enable_wifi_adb_openwifi">Wifi is not connected,please turn wifi on and connect it</string>
    <string name="enable_wifi_adb_summary">Debug mode when Wifi is connected</string>
    <string name="enable_wifi_adb_connected_summary">adb wifi is on,from your computer run:\n
         			adb connect <xliff:g id="ip_address">%1$s</xliff:g>:5555</string>
     <!-- added by ouyang end 2015-12-17 -->

2、在packages/apps/Settings/src/com/android/settings/DevelopmentSettings.java文件中,对刚才加入的【Wifi调试】开关进行相关的逻辑处理。

首先先定义开关的几个变量,如下:

    //add by ouyang 2015-12-17  start
    private static final String ENABLE_WIFI_ADB = "enable_wifi_adb";
    private static final String ADB_WIFI_ENABLED_KEY = "ADB_WIFI_ENABLED";
    private static SwitchPreference mEnableWifiAdb;
    //add by ouyang 2015-12-17  end

然后再onCreate()方法中初始化【Wifi调试】开关,如下:

   mEnableAdb = findAndInitSwitchPref(ENABLE_ADB);
   //add by ouyang 2015-12-17
   mEnableWifiAdb = findAndInitSwitchPref(ENABLE_WIFI_ADB);

然后在onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference)方法中对【Wifi调试】开关的打开和关闭操作做逻辑处理。

           if (preference == mEnableAdb) {
             if (mEnableAdb.isChecked()) {
                mDialogClicked = false;
                if (mAdbDialog != null) dismissDialogs();
                mAdbDialog = new AlertDialog.Builder(getActivity()).setMessage(
                        getActivity().getResources().getString(R.string.adb_warning_message))
                        .setTitle(R.string.adb_warning_title)
                        .setPositiveButton(android.R.string.yes, this)
                        .setNegativeButton(android.R.string.no, this)
                        .show();
                mAdbDialog.setOnDismissListener(this);
            } else {
                Settings.Global.putInt(getActivity().getContentResolver(),
                        Settings.Global.ADB_ENABLED, 0);
                mVerifyAppsOverUsb.setEnabled(false);
                mVerifyAppsOverUsb.setChecked(false);
                /// M: ALPS01256802, The "Developer options" status is opened.
                onPreferenceTreeClick(null, mVerifyAppsOverUsb);
                updateBugreportOptions();
            }
        }
        //add by ouyang 2015-12-17 start
        else if (preference == mEnableWifiAdb) {
            if (mEnableWifiAdb.isChecked()) {
            	Settings.Global.putInt(getActivity().getContentResolver(),ADB_WIFI_ENABLED_KEY, 1);
            	android.os.SystemProperties.set("sys.connect.adb.wifi","1");

            	WifiManager wifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE);
                WifiInfo wifiInfo = wifiManager.getConnectionInfo();
                int ipAddress = wifiInfo.getIpAddress();
                String ipAddressString = (ipAddress & 0xFF ) + "." +((ipAddress >> 8 ) & 0xFF) + "." +
                        ((ipAddress >> 16 ) & 0xFF) + "." +( ipAddress >> 24 & 0xFF) ;
                Log.i(TAG, "ipAddress="+ipAddress);
                Log.i(TAG, "ipAddressString="+ipAddressString);
            	if ("0.0.0.0".equals(ipAddressString)) {
            		mEnableWifiAdb.setSummary(getResources().getString(R.string.enable_wifi_adb_openwifi));
				}else{
					mEnableWifiAdb.setSummary(getResources().
							getString(R.string.enable_wifi_adb_connected_summary,ipAddressString));
				}
            } else {
            	Settings.Global.putInt(getActivity().getContentResolver(),ADB_WIFI_ENABLED_KEY, 0);
            	android.os.SystemProperties.set("sys.connect.adb.wifi","0");
            	mEnableWifiAdb.setSummary(getResources().getString(R.string.enable_wifi_adb_summary));
            }
        }
        //add by ouyang 2015-12-17 end

上面的代码主要是,

       当【Wifi调试】开关打开的时候,保存一个原来表示该【Wifi调试】开关打开关闭的状态的值为1,然后调用接口android.os.SystemProperties.set("sys.connect.adb.wifi","1");如果wifi这个时候打开就显示相应的adb wifi命令,如ip地址为192.168.107.201的时候就显示,"Wifi调试已打开,在电脑端你可以输入以下命令进行调试:adb connect 192.168.107.201:5555";如果wifi为打开,就提示“Wifi没连接,请连接wifi”

       当【Wifi调试】开关关闭的时候,保存一个原来表示该【Wifi调试】开关打开关闭的状态的值为0,然后调用接口android.os.SystemProperties.set("sys.connect.adb.wifi","0");

        ADB_WIFI_ENABLED_KEY这个状态值,在进入该Activity的时候,如果上次打开了【Wifi调试】开关,那么下次进来的时候就要显示【Wifi调试】开关是打开状态,否则是关闭状态。下面说说ADB_WIFI_ENABLED_KEY这个状态值的相关代码,如下:

在onResume()方法中,加入下面代码:

        //add by ouyang 2015-12-17 start
        IntentFilter filter = new IntentFilter();
    	filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
    	filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
    	filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
    	getActivity().registerReceiver(wifiBroadcastReceiver, filter);

    	boolean isAdbWifiChecked = Settings.Global.getInt(getActivity().getContentResolver(),ADB_WIFI_ENABLED_KEY, 0) != 0;
        mEnableWifiAdb.setChecked(isAdbWifiChecked);
        Log.i(TAG, "isAdbWifiChecked:" + isAdbWifiChecked);
    	//add by ouyang 2015-12-17 end 

代码的意思是,进入该Activity就动态的注册一个广播,用来监听Wifi的状态改变的,然后来动态的显示Android手机获取的IP地址。然后根据ADB_WIFI_ENABLED_KEY这个状态值来显示【Wifi调试】开关的打开关闭状态。

在updateAllOptions()方法中,也要去做下处理,代码如下:

/// M: CR ALPS00244115. Lock and unlock screen, the "USB debugging" is unchecked.
        boolean isChecked = (mAdbDialog != null && mAdbDialog.isShowing()) ? true :
                    (Settings.Global.getInt(cr, Settings.Global.ADB_ENABLED, 0) != 0);
        updateSwitchPreference(mEnableAdb, isChecked);

        //add by ouyang 2015-12-17 start
        boolean isAdbWifiChecked = Settings.Global.getInt(cr,ADB_WIFI_ENABLED_KEY, 0) != 0;
        updateSwitchPreference(mEnableWifiAdb, isAdbWifiChecked);
        //add by ouyang 2015-12-17 end

        /// M: update usb preference again
        mExt.customUSBPreference(mEnableAdb);
        //add by ouyang 2015-12-17
        mExt.customUSBPreference(mEnableWifiAdb);

下面来说说上面动态注册的广播,代码如下:

BroadcastReceiver wifiBroadcastReceiver = new BroadcastReceiver() {
		@Override
		public void onReceive(Context context, Intent intent) {
			String TAG = "wifiBroadcastReceiver";
			boolean isAdbWifiChecked = mEnableWifiAdb.isChecked();
			ConnectivityManager connectivityManager = (ConnectivityManager) context
					.getSystemService(Context.CONNECTIVITY_SERVICE);
			NetworkInfo net = connectivityManager.getActiveNetworkInfo();
			if (net == null) {
				Log.i(TAG, "No net type");
				if (isAdbWifiChecked) {
					mEnableWifiAdb.setSummary(getResources()
							.getString(R.string.enable_wifi_adb_openwifi));
				}
			} else {
				Log.i(TAG, "Net Type:" + net.getTypeName());
			}
			State wifi = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
			if (wifi == State.CONNECTED || wifi == State.CONNECTING) {
				Log.i(TAG, "wifi connected");
				WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
				WifiInfo wifiInfo = wifiManager.getConnectionInfo();
				int ipAddress = wifiInfo.getIpAddress();
				String ipAddressString = (ipAddress & 0xFF) + "." + ((ipAddress >> 8) & 0xFF) + "."
						+ ((ipAddress >> 16) & 0xFF) + "." + (ipAddress >> 24 & 0xFF);
				if (isAdbWifiChecked) {
					mEnableWifiAdb.setSummary(
							getResources().getString(
									R.string.enable_wifi_adb_connected_summary, ipAddressString));
				}
				Log.i(TAG, getResources().getString(
						R.string.enable_wifi_adb_connected_summary, ipAddressString));
			} else if (wifi == State.DISCONNECTED || wifi == State.DISCONNECTING) {
				Log.i(TAG, "wifi disconnected");
				if (isAdbWifiChecked) {
					mEnableWifiAdb.setSummary(
							getResources().getString(R.string.enable_wifi_adb_openwifi));
				}
				Log.i(TAG, getResources().getString(
						R.string.enable_wifi_adb_connected_summary));
			}

		}
	};

上面的代码主要是当【Wifi调试】开关打开的时候,来用动态表示Android手机的Wifi连接状态,如果wifi未连接,就提示“Wifi没连接,请连接wifi”,如果Wifi连接了,就动态的将从DHCP服务器获取的IP地址显示出来,如ip地址为192.168.107.201的时候就显示,"Wifi调试已打开,在电脑端你可以输入以下命令进行调试:adb connect 192.168.107.201:5555"

======================================================================================================

好吧,在packages/apps/Settings/,即Settings APP层面的代码写完了,下面来说说调用的两个接口怎么实现。

android.os.SystemProperties.set("sys.connect.adb.wifi", "1");

android.os.SystemProperties.set("sys.connect.adb.wifi", "0");

首先找到frameworks/base/core/java/android/os/SystemProperties.java文件,找到set(String key, String val)方法,代码如下,发现调用了native_set(key, val)方法。

   /**
     * Set the value for the given key.
     * @throws IllegalArgumentException if the key exceeds 32 characters
     * @throws IllegalArgumentException if the value exceeds 92 characters
     */
    public static void set(String key, String val) {
        if (key.length() > PROP_NAME_MAX) {
            throw new IllegalArgumentException("key.length > " + PROP_NAME_MAX);
        }
        if (val != null && val.length() > PROP_VALUE_MAX) {
            throw new IllegalArgumentException("val.length > " +
                PROP_VALUE_MAX);
        }
        native_set(key, val);
    }

native_set(key, val)方法定义如下:

private static native void native_set(String key, String def);

   该接口类在初始化运行环境中注册对应的cpp接口android_os_SystemProperties.cpp,实际操作通过JNI调用的是cpp文件对应的接口:

frameworks/base/core/jni/AndroidRuntime.cpp

namespace android {
      extern int register_android_os_SystemProperties(JNIEnv *env);
}

frameworks/base/core/jni/android_os_SystemProperties.cpp

static void SystemProperties_set(JNIEnv *env, jobject clazz,
                                      jstring keyJ, jstring valJ)
{
    int err;
    const char* key;
    const char* val;

    if (keyJ == NULL) {
        jniThrowNullPointerException(env, "key must not be null.");
        return ;
    }
    key = env->GetStringUTFChars(keyJ, NULL);

    if (valJ == NULL) {
        val = "";       /* NULL pointer not allowed here */
    } else {
        val = env->GetStringUTFChars(valJ, NULL);
    }

    err = property_set(key, val);

    env->ReleaseStringUTFChars(keyJ, key);

    if (valJ != NULL) {
        env->ReleaseStringUTFChars(valJ, val);
    }

    if (err < 0) {
		ALOGE("setproperty key=%s value=%s err=%d\n", key, val, err);
        jniThrowException(env, "java/lang/RuntimeException",
                          "failed to set system property");
    }
}

好了,关于该android.os.SystemProperties.set()方法的分析,可以参考

http://blog.csdn.net/ameyume/article/details/8056492

http://www.blogjava.net/anymobile/articles/301989.html

下面直接写下面两个接口的实现

android.os.SystemProperties.set("sys.connect.adb.wifi", "1");

android.os.SystemProperties.set("sys.connect.adb.wifi", "0");

在device/lentek/lentk6735_66t_l1/E580/init.rc文件中加入下面的代码,其中E580是项目的名称。

#added by ouyang start connect adb with wifi
on property:sys.connect.adb.wifi=1
	setprop service.adb.tcp.port 5555
	stop adbd
	start adbd
on property:sys.connect.adb.wifi=0
	setprop service.adb.tcp.port ""
	stop adbd
	start adbd
#added by ouyang end connect adb with wifi

上面代码就是当调用

android.os.SystemProperties.set("sys.connect.adb.wifi", "1");和sys.connect.adb.wifiandroid.os.SystemProperties.set("sys.connect.adb.wifi", "0");接口的时候的具体实现,

即"sys.connect.adb.wifi"属性设置为1的时候,监听5555端口,

   "sys.connect.adb.wifi"属性设置为0的时候,不监听任何端口

====================================================================================

好了,下面来再一次测一测该功能怎么样,重新打开wifi,重新打开【Wifi调试】开关,显示如下:

可以看出来,此时Android手机的IP地址是192.168.107.168,因此下面在PC端测试看是否可以用adb wifi无线调试,使用命令adb connect 192.168.107.168连接,adb disconnect 192.168.107.168断开连接,如下图所示:

C:\Documents and Settings\Administrator>adb connect 192.168.107.168
connected to 192.168.107.168:5555

C:\Documents and Settings\Administrator>adb shell
shell@lentk6735_66t_l1:/ $ ll
drwxr-xr-x root     root              2015-12-21 10:15 acct
drwxrwx--- system   cache             2015-12-17 19:01 cache
lrwxrwxrwx root     root              1970-01-01 08:00 charger -> /sbin/healthd
dr-x------ root     root              2015-12-21 10:15 config
drwxr-xr-x root     root              2015-12-21 10:15 custom
lrwxrwxrwx root     root              2015-12-21 10:15 d -> /sys/kernel/debug
drwxrwx--x system   system            2015-12-21 10:16 data
-rw-r--r-- root     root          385 1970-01-01 08:00 default.prop
drwxr-xr-x root     root              2015-12-21 10:15 dev
-rw-r--r-- root     root          127 1970-01-01 08:00 enableswap.sh
lrwxrwxrwx root     root              2015-12-21 10:15 etc -> /system/etc
-rw-r--r-- root     root         1851 1970-01-01 08:00 factory_init.project.rc
-rw-r--r-- root     root        18861 1970-01-01 08:00 factory_init.rc
-rw-r--r-- root     root        31413 1970-01-01 08:00 file_contexts
-rw-r----- root     root         1980 1970-01-01 08:00 fstab.mt6735
-rwxr-x--- root     root       543928 1970-01-01 08:00 init
-rwxr-x--- root     root          605 1970-01-01 08:00 init.aee.rc
-rwxr-x--- root     root         2065 1970-01-01 08:00 init.c2k.rc
-rwxr-x--- root     root         1071 1970-01-01 08:00 init.environ.rc
-rwxr-x--- root     root         3548 1970-01-01 08:00 init.modem.rc
-rwxr-x--- root     root        45152 1970-01-01 08:00 init.mt6735.rc
-rwxr-x--- root     root        32013 1970-01-01 08:00 init.mt6735.usb.rc
-rwxr-x--- root     root          963 1970-01-01 08:00 init.no_ssd.rc
-rwxr-x--- root     root         4411 1970-01-01 08:00 init.project.rc
-rwxr-x--- root     root        22787 1970-01-01 08:00 init.rc
-rwxr-x--- root     root          972 1970-01-01 08:00 init.recovery.mt6735.rc
-rwxr-x--- root     root         2288 1970-01-01 08:00 init.trace.rc
-rwxr-x--- root     root         3885 1970-01-01 08:00 init.usb.rc
-rwxr-x--- root     root          583 1970-01-01 08:00 init.xlog.rc
-rwxr-x--- root     root          301 1970-01-01 08:00 init.zygote32.rc
-rwxr-x--- root     root          531 1970-01-01 08:00 init.zygote64_32.rc
-rw-r--r-- root     root         1004 1970-01-01 08:00 meta_init.c2k.rc
-rw-r--r-- root     root         1062 1970-01-01 08:00 meta_init.modem.rc
-rw-r--r-- root     root         1655 1970-01-01 08:00 meta_init.project.rc
-rw-r--r-- root     root        14464 1970-01-01 08:00 meta_init.rc
drwxrwxr-x root     system            2015-12-21 10:15 mnt
drwxrws--- root     system            2015-12-17 18:59 nvdata
drwxrwx--x system   system            2015-12-21 10:15 persist
dr-xr-xr-x root     root              1970-01-01 08:00 proc
-rw-r--r-- root     root         9326 1970-01-01 08:00 property_contexts
drwxrwx--- system   system            2015-12-17 18:59 protect_f
drwxrwx--- system   system            2015-12-17 18:59 protect_s
drwx------ root     root              2015-12-05 18:05 root
drwxr-x--- root     root              1970-01-01 08:00 sbin
lrwxrwxrwx root     root              2015-12-21 10:15 sdcard -> /storage/sdcard0
-rw-r--r-- root     root          471 1970-01-01 08:00 seapp_contexts
-rw-r--r-- root     root           80 1970-01-01 08:00 selinux_version
-rw-r--r-- root     root       258377 1970-01-01 08:00 sepolicy
-rw-r--r-- root     root        11419 1970-01-01 08:00 service_contexts
drwxr-x--x root     sdcard_r          2015-12-21 10:15 storage
dr-xr-xr-x root     root              2015-12-21 10:15 sys
drwxr-xr-x root     root              1970-01-01 08:00 system
-rw-r--r-- root     root         8642 1970-01-01 08:00 ueventd.rc
lrwxrwxrwx root     root              2015-12-21 10:15 vendor -> /system/vendor
shell@lentk6735_66t_l1:/ $ exit

C:\Documents and Settings\Administrator>adb disconnect 192.168.107.168

发现可以正常的进行adb wifi 无线调试了。将【Wifi调试】开关【Wifi调试】开关关闭,再去连接的话,就会无法连接了。如下所示:

C:\Documents and Settings\Administrator>adb connect 192.168.107.168
unable to connect to 192.168.107.168:5555

C:\Documents and Settings\Administrator>

         ====================================================================================

  作者:欧阳鹏  欢迎转载,与人分享是进步的源泉!

  转载请保留原文地址:http://blog.csdn.net/ouyang_peng

====================================================================================

时间: 2024-09-29 04:25:01

Android系统移植与调试之-------&gt;如何添加一个adb wifi无线调试的功能【开发者选项】-【Wifi调试】的相关文章

Android系统移植与调试之-------&amp;gt;如何修改Android设备添加重启、飞行模式、静音模式等功能(一)

1.首先先来看一下修改前后的效果对比图 修改之后的图片 确认重启界面  具体的修改内容在下一篇中具体介绍. Android系统移植与调试之------->如何修改Android设备添加重启.飞行模式.静音模式等功能(二) ==================================================================================================   作者:欧阳鹏  欢迎转载,与人分享是进步的源泉!   转载请保留原文地址:h

《Android深度探索(卷1):HAL与驱动开发》——1.2节Android系统移植的主要工作

1.2 Android系统移植的主要工作Android深度探索(卷1):HAL与驱动开发Android移植可分为两部分:应用移植和系统移植.应用移植是指将如图1-1所示第4层的应用程序移植到某一个特定硬件平台上.由于不同硬件平台之间的差异,Android SDK API也有可能存在差异(有的厂商会修改部分Android SDK API以适应自身硬件的需要),或者将应用程序从低版本Android移植到高版本的Android上.为了保证应用程序可以在新的硬件平台正常运行,需要对源代码进行一些修改.当

android system-安卓系统编译时,system目录下添加一个文件,为何生成的system.img为什么不包含该文件?

问题描述 安卓系统编译时,system目录下添加一个文件,为何生成的system.img为什么不包含该文件? 安卓系统编译时,在system路径下添加了一些文件,但是编译生成的system.img为什么不包含这些文件? 解决方案 http://www.linuxidc.com/Linux/2014-06/103521.htm

红米手机开发者选项usb调试怎么开启

具体方法 1.在我们的红米手机中点击"设置"-"关于手机"的选项  如下图所示. 开发者选项usb调试怎么开启-红米开启开发者选项"> 2.现在我们会看到关于Android版本的选项,快速的点击此选项"五次",然后会提示你"您已处于开发者模式" 如图 3.现在在设置中我们就会看到"开发者选项"的按钮,点击进入 4.将"USB调试"后面打开,会提示你是否允许USB调试,点击

Android系统移植与调试之-------&amp;gt;Android Make分析

随着移动互联网的发展,移动开发也越来越吃香了,目前最火的莫过于android,android是什么就不用说了,android自从开源以来,就受到很多人的追捧.当然,一部人追捧它是因为它是Google开发的.对一个程序 员来说,一个系统值不值得追捧得要拿代码来说话.我这里并不打算分析android的代码,而是android的makefile,也许大家已经知道了在android源码里,我们可以看见很多makefile文件,起初我也不明白,经过一段时间的研究,后来慢慢明白了,我想通过分析 andori

Android系统移植与调试之-------&amp;gt;build.prop文件详细赏析

小知识:什么是build.prop?   /system/build.prop 是一个属性文件,在Android系统中.prop文件很重要,记录了系统的设置和改变,类似於/etc中的文件.这个文件是如何生成的呢? build/tools/buildinfo.sh 脚本就是专门用于生成build.prop文件 build/core/Makefile中使用build/tools/buildinfo.sh 脚本生成build.prop文件, 并把系统默认的system.prop以及定制的system.

Android系统移植与调试之-------&amp;gt;如何修改Android系统默认显示【开发者选项】并默认打开【USB调试】和【未知来源】开关

              今天有个用户对[设置]有个特殊的要求,即: 1.开机的时候默认显示[开发者选项]并打开[USB调试]开关    ([Developer options]-->[USB debugging]) 2.开机的时候默认打开[安全]-->[未知来源]的开关    ([Security]--->[Unknown sources])     1.首先解决[设置]界面默认显示[开发者选项]的问题 查看源代码:packages/apps/Settings/src/com/and

Android系统移植与调试之-------&amp;gt;Android Sensor传感器系统架构初探

1. 体系结构 2. 数据结构 3. 四大函数 本文以重力感应器装置G-sensor为例探索Android的各层次结构. 1. 体系结构     Android的体系结构可分为4个层次. 第一层次  底层驱动层,包括标准Linux,Android核心驱动,Android相关设备驱动,G-sensor的设备驱动程序即存在于此 第二层次 Android标准C/C++库,包括硬件抽象层,Android各底层库,本地库,JNI 第三层次 Android Java Framwork框架层 第四层次 Jav

Android系统移植与调试之-------&amp;gt;如何修改Android手机显示的4G信号强度的格子数

           在修改显示的信号强度之前,先了解一下什么是dB,什么是dBm? 1.dB dB是一个表征相对值的值,纯粹的比值,只表示两个量的相对大小关系,没有单位,当考虑甲的功率相比于乙功率大或小多少个dB时, 按下面的计算公式:10log(甲功率/乙功率),如果采用两者的电压比计算,要用20log(甲电压/乙电压).) [例] 甲功率比乙功率大一倍,那么10lg(甲功率/乙功率)=10lg2=3dB.也就是说,甲的功率比乙的功率大3 dB. 反之,如果甲的功率是乙的功率的一半,则甲的功