久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PackageManagerService启动过程

發布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PackageManagerService启动过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.PackageManagerService服務啟動過程:【Android的所有Java服務都是通過SystemServer進程啟動的,并且駐留在SystemServer進程中】
public final class SystemServer {
........
private Context mSystemContext;
private SystemServiceManager mSystemServiceManager;
? ?
private Installer mInstaller;?//應用安裝器
........
private PackageManagerService mPackageManagerService;
private PackageManager mPackageManager;
private ContentResolver mContentResolver;
? ?
private boolean mOnlyCore;
private boolean mFirstBoot;
........
public static void main(String[] args) {
? ?new SystemServer().run();
}
........
private void run() {
? ? ?........
? ? ?Looper.prepareMainLooper();?// 準備主線程的looper
? ? ?........
? ? ?createSystemContext();
? ? ?mSystemServiceManager = new SystemServiceManager(mSystemContext);//創建SystemServiceManager對象
? ? ?LocalServices.addService(SystemServiceManager.class, mSystemServiceManager);
? ? ?// Start services. 啟動服務
? ? ?try {
? ? ? ? startBootstrapServices();
? ? ? ? startCoreServices();
? ? ? ? ?startOtherServices();
? ? ?} catch (Throwable ex) {
? ? ?Slog.e("System", "******************************************");
? ? ?Slog.e("System", "************ Failure starting system services", ex);
? ? ?throw ex;
? ?}
? ?........
? ?// Loop forever.
? ?Looper.loop();?// 進入循環
? ?throw new RuntimeException("Main thread loop unexpectedly exited");
}
........
private void createSystemContext() {
???ActivityThread activityThread = ActivityThread.systemMain();
???mSystemContext = activityThread.getSystemContext();
???mSystemContext.setTheme(android.R.style.Theme_DeviceDefault_Light_DarkActionBar);
}
? ?
startBootstrapServices(){
? ?//通過反射獲取Installer類,然后實例化該類,并注冊到mServices中,再調用該對象的onStart方法
???mInstaller = mSystemServiceManager.startService(Installer.class);
???........
???//通過讀取屬性來判斷運行核心應用
? ?String cryptState = SystemProperties.get("vold.decrypt");
? ?if (ENCRYPTING_STATE.equals(cryptState)) {
? ? ? ?Slog.w(TAG, "Detected encryption in progress - only parsing core apps");
? ? ? ? ? ? ? ? mOnlyCore = true;
? ?} else if (ENCRYPTED_STATE.equals(cryptState)) {
? ? ? ? ? ? ? ? Slog.w(TAG, "Device encrypted - only parsing core apps");
? ? ? ? ? ? ? ? mOnlyCore = true;
? ?}
? ?//調用PackageManagerService的靜態方法main來構造PackageManagerService的對象
???mPackageManagerService = PackageManagerService.main(mSystemContext, mInstaller, mFactoryTestMode !=

??????????????????????????????????????????????????????? FactoryTest.FACTORY_TEST_OFF, mOnlyCore);
???//判斷PackageManagerService是否是第一次啟動,SystemServer進程被殺后會被重啟
???mFirstBoot = mPackageManagerService.isFirstBoot();
???mPackageManager = mSystemContext.getPackageManager();
}
........
private void startOtherServices() {
???........
???//PackageManagerService執行dex優化
???try {
? ? ? ? ? ? ? ? mPackageManagerService.performBootDexOpt();
???} catch (Throwable e) {
? ? ? ? ? ? ? ? reportWtf("performing boot dexopt", e);
???}
???........
???try {
? ? ? ? ? ? ? ? mPackageManagerService.systemReady();//PackageManagerService執行systemReady方法
???} catch (Throwable e) {
? ? ? ? ? ? ? ? reportWtf("making Package Manager Service ready", e);
???}
???........
}

2.Installer的實例化與onStart方法
public final class Installer extends SystemService {
? ? private final InstallerConnection mInstaller;

??? public Installer(Context context) {
? ? ? ? super(context);
? ? ? ? mInstaller = new InstallerConnection();//與底層installer連接的類
? ? }
? ??
? ? @Override
? ? public void onStart() {
? ? ? ? Slog.i(TAG, "Waiting for installd to be ready.");
? ? ? ? ping();
? ? }
? ? ........
? ? public boolean ping() {
? ? ? ? if (mInstaller.execute("ping") < 0) {//調用底層installer執行ping命令
? ? ? ? ? ? return false;
? ? ? ? } else {
? ? ? ? ? ? return true;
? ? ? ? }
? ? }
? ? ........
}


3.PackageManagerService的實例化
public class PackageManagerService extends IPackageManager.Stub{
? ? ........
? ? final Installer mInstaller;
? ? ........
? ? final Settings mSettings;
? ? boolean mRestoredSettings;
? ? ........
? ? final ActivityIntentResolver mActivities = new ActivityIntentResolver();
? ? final ActivityIntentResolver mReceivers = new ActivityIntentResolver();
? ? final ServiceIntentResolver mServices = new ServiceIntentResolver();
? ? final ProviderIntentResolver mProviders = new ProviderIntentResolver();
? ? ........
? ? public static final PackageManagerService main(Context context, Installer installer, boolean factoryTest, boolean onlyCore) {
? ? ? ??//構造PackageManagerService服務對象
? ? ? ? PackageManagerService m = new PackageManagerService(context, installer, factoryTest, onlyCore);
? ? ? ??//注冊PackageManagerService服務
? ? ? ? ServiceManager.addService("package", m);
? ? ? ? return m;
? ? }
? ? ........
? ??//測量屏幕尺寸
? ? private static void getDefaultDisplayMetrics(Context context, DisplayMetrics metrics) {
? ? ? ? DisplayManager displayManager = (DisplayManager) context.getSystemService(
? ? ? ? ? ? ? ? Context.DISPLAY_SERVICE);
? ? ? ? displayManager.getDisplay(Display.DEFAULT_DISPLAY).getMetrics(metrics);
? ? }
? ??
? ? public PackageManagerService(Context context, Installer installer, boolean factoryTest, boolean onlyCore) {
? ? ? ? EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_PMS_START, SystemClock.uptimeMillis());
? ? ? ? if (mSdkVersion <= 0) {//SDK版本檢查
? ? ? ? ? ? Slog.w(TAG, "**** ro.build.version.sdk not set!");
? ? ? ? }
? ? ? ? ........
? ? ? ? mContext = context;
? ? ? ? mFactoryTest = factoryTest;//開機模式
? ? ? ? mOnlyCore = onlyCore;//是否對包做dex優化
? ? ? ? mLazyDexOpt = "eng".equals(SystemProperties.get("ro.build.type"));//如果編譯版本為eng,則不需要dex優化
? ? ? ? mMetrics = new DisplayMetrics();//創建顯示尺寸信息
? ? ? ??
? ? ? ? // 創建SharedUserSetting對象并添加到Settings的成員變量mSharedUsers中

? ? ? ? mSettings = new Settings(context);?// 存儲系統運行過程中的設置信息
? ? ? ? // 通過Settings的addSharedUserLPw函數向mSharedUsers,mUserIds,mOtherUserIds數組

????????// 添加了6個特定進程的SharedUserSetting對象
? ? ? ? mSettings.addSharedUserLPw("android.uid.system", Process.SYSTEM_UID,

????????????????????????????? ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PRIVILEGED);
? ? ? ? mSettings.addSharedUserLPw("android.uid.phone", RADIO_UID,

?????????????????????????????ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PRIVILEGED);
? ? ? ? mSettings.addSharedUserLPw("android.uid.log", LOG_UID,

?????????????????????????????ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PRIVILEGED);
? ? ? ? mSettings.addSharedUserLPw("android.uid.nfc", NFC_UID,

?????????????????????????????ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PRIVILEGED);
? ? ? ? mSettings.addSharedUserLPw("android.uid.bluetooth", BLUETOOTH_UID,

?????????????????????????????ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PRIVILEGED);
? ? ? ? mSettings.addSharedUserLPw("android.uid.shell", SHELL_UID,

?????????????????????????????ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PRIVILEGED);


? ? ? ? String separateProcesses = SystemProperties.get("debug.separate_processes");
? ? ? ? if (separateProcesses != null && separateProcesses.length() > 0) {
? ? ? ? ? ? if ("*".equals(separateProcesses)) {
? ? ? ? ? ? ? ? mDefParseFlags = PackageParser.PARSE_IGNORE_PROCESSES;
? ? ? ? ? ? ? ? mSeparateProcesses = null;
? ? ? ? ? ? ? ? Slog.w(TAG, "Running with debug.separate_processes: * (ALL)");
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? mDefParseFlags = 0;
? ? ? ? ? ? ? ? mSeparateProcesses = separateProcesses.split(",");
? ? ? ? ? ? ? ? Slog.w(TAG, "Running with debug.separate_processes: "
? ? ? ? ? ? ? ? ? ? ? ? + separateProcesses);
? ? ? ? ? ? }
? ? ? ? } else {
? ? ? ? ? ? mDefParseFlags = 0;
? ? ? ? ? ? mSeparateProcesses = null;
? ? ? ? }
? ? ? ??
? ? ? ? // 保存應用安裝器,用于訪問installd服務進程,完成一些apk安裝,卸載,優化工作
? ? ? ? mInstaller = installer;?//在ServerServer中創建,調用了其中的ping測試是否連上 ?
? ? ? ? //獲取屏幕尺寸大小

? ? ? ? getDefaultDisplayMetrics(context, mMetrics);
? ? ? ??
? ? ? ??// 獲取SystemConfig對象【見后續詳解】
? ? ? ? SystemConfig systemConfig = SystemConfig.getInstance();
? ? ? ? mGlobalGids = systemConfig.getGlobalGids();
? ? ? ? mSystemPermissions = systemConfig.getSystemPermissions();
? ? ? ? mAvailableFeatures = systemConfig.getAvailableFeatures();?// 從systemConfig中獲取硬件支持的特性

??????? synchronized (mInstallLock) {
? ? ? ? // writer
? ? ? ? synchronized (mPackages) {
? ? ? ? ? ? //創建消息處理線程并啟動【HandlerThread的子類ServiceThread的對象】
? ? ? ? ? ? mHandlerThread = new ServiceThread(TAG, Process.THREAD_PRIORITY_BACKGROUND, true /*allowIo*/);
? ? ? ? ? ? mHandlerThread.start();
? ? ? ? ? ? //創建往消息處理線程中發消息的mHandler,
? ? ? ? ? ? mHandler = new PackageHandler(mHandlerThread.getLooper());
? ? ? ? ? ? Watchdog.getInstance().addThread(mHandler, WATCHDOG_TIMEOUT);

??????????? //創建一些安裝目錄
? ? ? ? ? ? File dataDir = Environment.getDataDirectory(); // dataDir =/data/
? ? ? ? ? ? mAppDataDir = new File(dataDir, "data");
? ? ? ? ? ? mAppInstallDir = new File(dataDir, "app");
? ? ? ? ? ? mAppLib32InstallDir = new File(dataDir, "app-lib");
? ? ? ? ? ? mAsecInternalPath = new File(dataDir, "app-asec").getPath();
? ? ? ? ? ? mUserAppDataDir = new File(dataDir, "user");
? ? ? ? ? ? mDrmAppPrivateInstallDir = new File(dataDir, "app-private");
? ? ? ? ? ??
? ? ? ? ? ? //創建用戶管理對象UserManagerService
? ? ? ? ? ? sUserManager = new UserManagerService(context, this, mInstallLock, mPackages);
? ? ? ? ? ??
? ? ? ? ? ??// 獲取系統權限
? ? ? ? ? ? // Propagate permission configuration in to package manager.
? ? ? ? ? ? ArrayMap<String, SystemConfig.PermissionEntry> permConfig = systemConfig.getPermissions();
? ? ? ? ? ? for (int i=0; i<permConfig.size(); i++) {
? ? ? ? ? ? ? ? SystemConfig.PermissionEntry perm = permConfig.valueAt(i);
? ? ? ? ? ? ? ? BasePermission bp = mSettings.mPermissions.get(perm.name);
? ? ? ? ? ? ? ? if (bp == null) {
? ? ? ? ? ? ? ? ? ? bp = new BasePermission(perm.name, "android", BasePermission.TYPE_BUILTIN);
? ? ? ? ? ? ? ? ? ? mSettings.mPermissions.put(perm.name, bp);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if (perm.gids != null) {
? ? ? ? ? ? ? ? ? ? bp.gids = appendInts(bp.gids, perm.gids);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ??
? ? ? ? ? ??// 獲取系統庫并保存到mSharedLibraries中
? ? ? ? ? ? ArrayMap<String, String> libConfig = systemConfig.getSharedLibraries();
? ? ? ? ? ? for (int i=0; i<libConfig.size(); i++) {
? ? ? ? ? ? ? ? mSharedLibraries.put(libConfig.keyAt(i),
? ? ? ? ? ? ? ? ? ? ? ? new SharedLibraryEntry(libConfig.valueAt(i), null));
? ? ? ? ? ? }


? ? ? ? ? ? mFoundPolicyFile = SELinuxMMAC.readInstallPolicy();
? ? ? ? ? ??// 調用Settings的readLPw方法讀取文件信息
? ? ? ? ? ? mRestoredSettings = mSettings.readLPw(this, sUserManager.getUsers(false), mSdkVersion, mOnlyCore);
? ? ? ? ? ? ........
? ? ? ? ? ? long startTime = SystemClock.uptimeMillis();
? ? ? ? ? ? ........
? ? ? ? ??? // 設置掃描模式
? ? ? ? ? ? final int scanFlags = SCAN_NO_PATHS | SCAN_DEFER_DEX | SCAN_BOOTING;
? ? ? ? ? ??
? ? ? ? ??? //alreadyDexOpted記錄已經進行過Dex優化的文件
? ? ? ? ? ? final HashSet<String> alreadyDexOpted = new HashSet<String>();
? ? ? ? ? ? final String bootClassPath = System.getenv("BOOTCLASSPATH");?// 獲取BOOTCLASSPATH屬性
???????????//獲取SYSTEMSERVERCLASSPATH屬性

??????????? final String systemServerClassPath = System.getenv("SYSTEMSERVERCLASSPATH");

????????????//如果bootClassPath不為空則將這個屬性中的所有文件添加到alreadyDexOpted中
? ? ? ? ? ? if (bootClassPath != null) {
? ? ? ? ? ? ? ? String[] bootClassPathElements = splitString(bootClassPath, ':');
? ? ? ? ? ? ? ? for (String element : bootClassPathElements) {
? ? ? ? ? ? ? ? ? ? alreadyDexOpted.add(element);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? Slog.w(TAG, "No BOOTCLASSPATH found!");
? ? ? ? ? ? }
? ? ? ? ? ??//如果systemServerClassPath不為空則將這個屬性中的所有文件添加到alreadyDexOpted中
? ? ? ? ? ? if (systemServerClassPath != null) {
? ? ? ? ? ? ? ? String[] systemServerClassPathElements = splitString(systemServerClassPath, ':');
? ? ? ? ? ? ? ? for (String element : systemServerClassPathElements) {
? ? ? ? ? ? ? ? ? ? alreadyDexOpted.add(element);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? Slog.w(TAG, "No SYSTEMSERVERCLASSPATH found!");
? ? ? ? ? ? }

????????????// 判斷前面獲取的mSharedLibraries,如果有需要進行Dex優化的則進行優化,
? ? ? ? ? ? boolean didDexOptLibraryOrTool = false;
? ? ? ? ? ? final List<String> allInstructionSets = getAllInstructionSets();
? ? ? ? ? ? final String[] dexCodeInstructionSets = getDexCodeInstructionSets(allInstructionSets.toArray(new String[allInstructionSets.size()]));
? ? ? ? ? ??//在前面解析platfor.xml時,將一些外部庫路徑保存到了mSharedLibraries變量中
? ? ? ? ? ? if (mSharedLibraries.size() > 0) {?//確保 外部庫也被 優化 ?
? ? ? ? ? ? ? ? //循環變量mSharedLibraries變量

? ? ? ? ? ? ? ? for (String dexCodeInstructionSet : dexCodeInstructionSets) {
? ? ? ? ? ? ? ? ? ? for (SharedLibraryEntry libEntry : mSharedLibraries.values()) {
? ? ? ? ? ? ? ? ? ? ? ? final String lib = libEntry.path;
? ? ? ? ? ? ? ? ? ? ? ? if (lib == null) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? ? ? ? ? ? ? }

??????????????????????? try {
? ? ? ? ? ? ? ? ? ? ? ? ? ? byte dexoptRequired = DexFile.isDexOptNeededInternal(lib, null, dexCodeInstructionSet, false);
? ? ? ? ? ? ? ? ? ? ? ? ? ? if (dexoptRequired != DexFile.UP_TO_DATE) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? alreadyDexOpted.add(lib);

??????????????????????????????? // The list of "shared libraries" we have at this point is
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (dexoptRequired == DexFile.DEXOPT_NEEDED) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //通過安裝器進行dex優化
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? mInstaller.dexopt(lib, Process.SYSTEM_UID, true, dexCodeInstructionSet);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? mInstaller.patchoat(lib, Process.SYSTEM_UID, true, dexCodeInstructionSet);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? didDexOptLibraryOrTool = true;
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? } catch (FileNotFoundException e) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? Slog.w(TAG, "Library not found: " + lib);
? ? ? ? ? ? ? ? ? ? ? ? } catch (IOException e) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? Slog.w(TAG, "Cannot dexopt " + lib + "; is it an APK or JAR? "
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + e.getMessage());
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ??// 將framework-res.apk與core-libart.jar添加到alreadyDexOpted中,不需要優化
? ? ? ? ? ? File frameworkDir = new File(Environment.getRootDirectory(), "framework");
? ? ? ? ? ? alreadyDexOpted.add(frameworkDir.getPath() + "/framework-res.apk");
? ? ? ? ? ? alreadyDexOpted.add(frameworkDir.getPath() + "/core-libart.jar");

??????????? // 判斷/system/frameworks/下所有文件,有需要進行Dex優化的則進行優化
? ? ? ? ? ? String[] frameworkFiles = frameworkDir.list();
? ? ? ? ? ? if (frameworkFiles != null) {
? ? ? ? ? ? ? ? // TODO: We could compile these only for the most preferred ABI. We should
? ? ? ? ? ? ? ? // first double check that the dex files for these commands are not referenced
? ? ? ? ? ? ? ? // by other system apps.
? ? ? ? ? ? ? ? for (String dexCodeInstructionSet : dexCodeInstructionSets) {
? ? ? ? ? ? ? ? ? ? for (int i=0; i<frameworkFiles.length; i++) {
? ? ? ? ? ? ? ? ? ? ? ? File libPath = new File(frameworkDir, frameworkFiles[i]);
? ? ? ? ? ? ? ? ? ? ? ? String path = libPath.getPath();
? ? ? ? ? ? ? ? ? ? ? ? // Skip the file if we already did it.
? ? ? ? ? ? ? ? ? ? ? ? if (alreadyDexOpted.contains(path)) {?// 跳過所有已經進行過Dex優化的文件
? ? ? ? ? ? ? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? // Skip the file if it is not a type we want to dexopt.
? ? ? ? ? ? ? ? ? ? ? ? if (!path.endsWith(".apk") && !path.endsWith(".jar")) {?// 跳過既不是APK也不是JAR的文件
? ? ? ? ? ? ? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? try {?// 如果需要進行優化,則進行Dex優化
? ? ? ? ? ? ? ? ? ? ? ? ? ? byte dexoptRequired = DexFile.isDexOptNeededInternal(path, null, dexCodeInstructionSet, false);
? ? ? ? ? ? ? ? ? ? ? ? ? ? if (dexoptRequired == DexFile.DEXOPT_NEEDED) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? mInstaller.dexopt(path, Process.SYSTEM_UID, true, dexCodeInstructionSet);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? didDexOptLibraryOrTool = true;
? ? ? ? ? ? ? ? ? ? ? ? ? ? } else if (dexoptRequired == DexFile.PATCHOAT_NEEDED) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? mInstaller.patchoat(path, Process.SYSTEM_UID, true, dexCodeInstructionSet);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? didDexOptLibraryOrTool = true;
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? } catch (FileNotFoundException e) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? Slog.w(TAG, "Jar not found: " + path);
? ? ? ? ? ? ? ? ? ? ? ? } catch (IOException e) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? Slog.w(TAG, "Exception reading jar: " + path, e);
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }

??????????? //掃描以下各個目錄下的apk文件
? ? ? ? ? ? File vendorOverlayDir = new File(VENDOR_OVERLAY_DIR);
? ? ? ? ? ? scanDirLI(vendorOverlayDir, PackageParser.PARSE_IS_SYSTEM
? ? ? ? ? ? ? ? ? ? | PackageParser.PARSE_IS_SYSTEM_DIR, scanFlags | SCAN_TRUSTED_OVERLAY, 0);

??????????? // Find base frameworks (resource packages without code).
? ? ? ? ? ? scanDirLI(frameworkDir, PackageParser.PARSE_IS_SYSTEM
? ? ? ? ? ? ? ? ? ? | PackageParser.PARSE_IS_SYSTEM_DIR
? ? ? ? ? ? ? ? ? ? | PackageParser.PARSE_IS_PRIVILEGED,
? ? ? ? ? ? ? ? ? ? scanFlags | SCAN_NO_DEX, 0);

??????????? // Collected privileged system packages.
? ? ? ? ? ? final File privilegedAppDir = new File(Environment.getRootDirectory(), "priv-app");
? ? ? ? ? ? scanDirLI(privilegedAppDir, PackageParser.PARSE_IS_SYSTEM
? ? ? ? ? ? ? ? ? ? | PackageParser.PARSE_IS_SYSTEM_DIR
? ? ? ? ? ? ? ? ? ? | PackageParser.PARSE_IS_PRIVILEGED, scanFlags, 0);

??????????? // Collect ordinary system packages.
? ? ? ? ? ? final File systemAppDir = new File(Environment.getRootDirectory(), "app");
? ? ? ? ? ? scanDirLI(systemAppDir, PackageParser.PARSE_IS_SYSTEM
? ? ? ? ? ? ? ? ? ? | PackageParser.PARSE_IS_SYSTEM_DIR, scanFlags, 0);

??????????? // Collect all vendor packages.
? ? ? ? ? ? File vendorAppDir = new File("/vendor/app");
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? vendorAppDir = vendorAppDir.getCanonicalFile();
? ? ? ? ? ? } catch (IOException e) {
? ? ? ? ? ? ? ? // failed to look up canonical path, continue with original one
? ? ? ? ? ? }
? ? ? ? ? ? scanDirLI(vendorAppDir, PackageParser.PARSE_IS_SYSTEM
? ? ? ? ? ? ? ? ? ? | PackageParser.PARSE_IS_SYSTEM_DIR, scanFlags, 0);

??????????? // Collect all OEM packages.
? ? ? ? ? ? final File oemAppDir = new File(Environment.getOemDirectory(), "app");
? ? ? ? ? ? scanDirLI(oemAppDir, PackageParser.PARSE_IS_SYSTEM
? ? ? ? ? ? ? ? ? ? | PackageParser.PARSE_IS_SYSTEM_DIR, scanFlags, 0);

??????????? //調用底層installer,執行movefiles命令
? ? ? ? ? ? if (DEBUG_UPGRADE) Log.v(TAG, "Running installd update commands");
? ? ? ? ? ? mInstaller.moveFiles();

??????????? // 保存通過OTA升級刪除的apk
? ? ? ? ? ? final List<String> possiblyDeletedUpdatedSystemApps = new ArrayList<String>();
? ? ? ? ? ? final ArrayMap<String, File> expectingBetter = new ArrayMap<>();
? ? ? ? ? ? if (!mOnlyCore) {
? ? ? ? ? ? ? ? Iterator<PackageSetting> psit = mSettings.mPackages.values().iterator();//遍歷Settings的成員變量mPackages
? ? ? ? ? ? ? ? while (psit.hasNext()) {
? ? ? ? ? ? ? ? ? ? PackageSetting ps = psit.next();

????????????????????//不是系統app則繼續進行下一個
? ? ? ? ? ? ? ? ? ? if ((ps.pkgFlags & ApplicationInfo.FLAG_SYSTEM) == 0) {?
? ? ? ? ? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? ? ? ? ? }

????????????????????//如果是系統app,同時已經被PackageManagerService掃描過了
? ? ? ? ? ? ? ? ? ? final PackageParser.Package scannedPkg = mPackages.get(ps.name);
? ? ? ? ? ? ? ? ? ? if (scannedPkg != null) {
????????????????????????// 如果系統app剛被掃描并且在disabled列表,則它肯定是通過ota添加的,

??????????????????????? // 從當前掃描的package中移除它,所以以前用戶安裝的可以被掃描到
? ? ? ? ? ? ? ? ? ? ? ? if (mSettings.isDisabledSystemPackageLPr(ps.name)) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? logCriticalInfo(Log.WARN, "Expecting better updated system app for "
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + ps.name + "; removing system app. ?Last known codePath="
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + ps.codePathString + ", installStatus=" + ps.installStatus
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + ", versionCode=" + ps.versionCode + "; scanned versionCode="
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + scannedPkg.mVersionCode);
? ? ? ? ? ? ? ? ? ? ? ? ? ? removePackageLI(ps, true);?// 如果該apk包在當前掃描記錄中且已不能使用,則移除該apk包信息
? ? ? ? ? ? ? ? ? ? ? ? ? ? expectingBetter.put(ps.name, ps.codePath);
? ? ? ? ? ? ? ? ? ? ? ? }
??????????????????????? continue;
? ? ? ? ? ? ? ? ? ? }

??????????????????? if (!mSettings.isDisabledSystemPackageLPr(ps.name)) {
? ? ? ? ? ? ? ? ? ? ? ? psit.remove();
? ? ? ? ? ? ? ? ? ? ? ? logCriticalInfo(Log.WARN, "System package " + ps.name
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + " no longer exists; wiping its data");
? ? ? ? ? ? ? ? ? ? ? ? removeDataDirsLI(ps.name);
? ? ? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? ? ? final PackageSetting disabledPs = mSettings.getDisabledSystemPkgLPr(ps.name);
? ? ? ? ? ? ? ? ? ? ? ? if (disabledPs.codePath == null || !disabledPs.codePath.exists()) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? possiblyDeletedUpdatedSystemApps.add(ps.name);?// 將通過OTA升級刪除的系統apk信息起來
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? //查找未完成安裝的apk包,清除未完成的安裝包并且刪除臨時文件
? ? ? ? ? ? ArrayList<PackageSetting> deletePkgsList = mSettings.getListOfIncompleteInstallPackagesLPr();
? ? ? ? ? ? for(int i = 0; i < deletePkgsList.size(); i++) {
? ? ? ? ? ? ? ? cleanupInstallFailedPackage(deletePkgsList.get(i));?//移除安裝失敗的package?
? ? ? ? ? ? }
? ? ? ? ? ? deleteTempPackageFiles();

??????????? // 刪除所有沒有與包關聯起來的shared userIDs
? ? ? ? ? ? mSettings.pruneSharedUsersLPw();

??????????? if (!mOnlyCore) {
? ? ? ? ? ? ? ? EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_PMS_DATA_SCAN_START, SystemClock.uptimeMillis());
? ? ? ? ? ? ? ??
??? ? ? ? ? ? ? // 掃描/data/app/與/data/app-private/目錄【第二個參數為0,可卸載】
? ? ? ? ? ? ? ? scanDirLI(mAppInstallDir, 0, scanFlags, 0);
? ? ? ? ? ? ? ? scanDirLI(mDrmAppPrivateInstallDir, PackageParser.PARSE_FORWARD_LOCK, scanFlags, 0);

????????????????// 刪除通過OTA升級刪除的系統apk信息,如果不是以前更新的應用則完全刪除,否則撤銷其系統權限
? ? ? ? ? ? ? ? for (String deletedAppName : possiblyDeletedUpdatedSystemApps) {
? ? ? ? ? ? ? ? ? ? PackageParser.Package deletedPkg = mPackages.get(deletedAppName);
? ? ? ? ? ? ? ? ? ? mSettings.removeDisabledSystemPackageLPw(deletedAppName);?//刪除通過OTA升級刪除的系統apk信息

??????????????????? String msg;
? ? ? ? ? ? ? ? ? ? if (deletedPkg == null) {
? ? ? ? ? ? ? ? ? ? ? ? msg = "Updated system package " + deletedAppName
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + " no longer exists; wiping its data";
? ? ? ? ? ? ? ? ? ? ? ? removeDataDirsLI(deletedAppName);// 完全刪除
? ? ? ? ? ? ? ? ? ? } else {?// 撤銷其系統權限
? ? ? ? ? ? ? ? ? ? ? ? msg = "Updated system app + " + deletedAppName
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + " no longer present; removing system privileges for "
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + deletedAppName;

??????????????????????? deletedPkg.applicationInfo.flags &= ~ApplicationInfo.FLAG_SYSTEM;

??????????????????????? PackageSetting deletedPs = mSettings.mPackages.get(deletedAppName);
? ? ? ? ? ? ? ? ? ? ? ? deletedPs.pkgFlags &= ~ApplicationInfo.FLAG_SYSTEM;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? logCriticalInfo(Log.WARN, msg);
? ? ? ? ? ? ? ? }

??????????????? // 確保所有出現在userdata分區的apk都是可見的,如果不可見,則crawl back and revive the system version
? ? ? ? ? ? ? ? for (int i = 0; i < expectingBetter.size(); i++) {
? ? ? ? ? ? ? ? ? ? final String packageName = expectingBetter.keyAt(i);
? ? ? ? ? ? ? ? ? ? if (!mPackages.containsKey(packageName)) {
? ? ? ? ? ? ? ? ? ? ? ? final File scanFile = expectingBetter.valueAt(i);

??????????????????????? logCriticalInfo(Log.WARN, "Expected better " + packageName
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + " but never showed up; reverting to system");

??????????????????????? final int reparseFlags;
? ? ? ? ? ? ? ? ? ? ? ? if (FileUtils.contains(privilegedAppDir, scanFile)) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? reparseFlags = PackageParser.PARSE_IS_SYSTEM
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | PackageParser.PARSE_IS_SYSTEM_DIR
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | PackageParser.PARSE_IS_PRIVILEGED;
? ? ? ? ? ? ? ? ? ? ? ? } else if (FileUtils.contains(systemAppDir, scanFile)) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? reparseFlags = PackageParser.PARSE_IS_SYSTEM
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | PackageParser.PARSE_IS_SYSTEM_DIR;
? ? ? ? ? ? ? ? ? ? ? ? } else if (FileUtils.contains(vendorAppDir, scanFile)) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? reparseFlags = PackageParser.PARSE_IS_SYSTEM
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | PackageParser.PARSE_IS_SYSTEM_DIR;
? ? ? ? ? ? ? ? ? ? ? ? } else if (FileUtils.contains(oemAppDir, scanFile)) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? reparseFlags = PackageParser.PARSE_IS_SYSTEM
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | PackageParser.PARSE_IS_SYSTEM_DIR;
? ? ? ? ? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? ? ? ? ? Slog.e(TAG, "Ignoring unexpected fallback path " + scanFile);
? ? ? ? ? ? ? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? ? ? ? ? ? ? }

??????????????????????? mSettings.enableSystemPackageLPw(packageName);

??????????????????????? try {
? ? ? ? ? ? ? ? ? ? ? ? ? ? scanPackageLI(scanFile, reparseFlags, scanFlags, 0, null);
? ? ? ? ? ? ? ? ? ? ? ? } catch (PackageManagerException e) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? Slog.e(TAG, "Failed to parse original system package: "
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + e.getMessage());
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? ........
? ? ? ? ? ? updatePermissionsLPw(null, null, UPDATE_PERMISSIONS_ALL?//賦予package相應請求的權限
? ? ? ? ? ? ? ? ? ? | (regrantPermissions ? (UPDATE_PERMISSIONS_REPLACE_PKG|UPDATE_PERMISSIONS_REPLACE_ALL) : 0));
? ? ? ? ? ? ........
? ? ? ? ? ? mSettings.writeLPr();?// 最后將掃描到的信息保存到文件/data/system/packages.xml中?

??????????? EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_PMS_READY,
? ? ? ? ? ? ? ? ? ? SystemClock.uptimeMillis());

??????????? mRequiredVerifierPackage = getRequiredVerifierLPr();
? ? ? ? } // synchronized (mPackages)
? ? ? ? } // synchronized (mInstallLock)

??????? mInstallerService = new PackageInstallerService(context, this, mAppInstallDir);

??????? // Now after opening every single application zip, make sure they
? ? ? ? // are all flushed. ?Not really needed, but keeps things nice and
? ? ? ? // tidy.
? ? ? ? Runtime.getRuntime().gc();
? ? }
? ? ........
? ? private void scanDirLI(File dir, int parseFlags, int scanFlags, long currentTime) {
? ? ? ? final File[] files = dir.listFiles();
? ? ? ? ........
? ? ? ? for (File file : files) {
? ? ? ? ? ? final boolean isPackage = (isApkFile(file) || file.isDirectory())
? ? ? ? ? ? ? ? ? ? && !PackageInstallerService.isStageName(file.getName());
? ? ? ? ? ? if (!isPackage) {
? ? ? ? ? ? ? ? // Ignore entries which are not packages
? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? }
? ? ? ? ? ? try {?//調用scanPackageLI函數來對它進行解析和安裝
? ? ? ? ? ? ? ? scanPackageLI(file, parseFlags | PackageParser.PARSE_MUST_BE_APK,
? ? ? ? ? ? ? ? ? ? ? ? scanFlags, currentTime, null);
? ? ? ? ? ? } catch (PackageManagerException e) {
? ? ? ? ? ? ? ? ........
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? ........
? ? private PackageParser.Package scanPackageLI(File scanFile, int parseFlags, int scanFlags,
? ? ? ? ? ? long currentTime, UserHandle user) throws PackageManagerException {
? ? ? ? if (DEBUG_INSTALL) Slog.d(TAG, "Parsing: " + scanFile);
? ? ? ? parseFlags |= mDefParseFlags;
? ? ? ? PackageParser pp = new PackageParser();?// 創建一個PackageParser實例
? ? ? ? pp.setSeparateProcesses(mSeparateProcesses);
? ? ? ? pp.setOnlyCoreApps(mOnlyCore);
? ? ? ? pp.setDisplayMetrics(mMetrics);

??????? if ((scanFlags & SCAN_TRUSTED_OVERLAY) != 0) {
? ? ? ? ? ? parseFlags |= PackageParser.PARSE_TRUSTED_OVERLAY;
? ? ? ? }

??????? final PackageParser.Package pkg;
? ? ? ? try {
? ? ? ? ? ? pkg = pp.parsePackage(scanFile, parseFlags);?//調用PackageParser實例的parsePackage函數來對這個Apk文件進行解析
? ? ? ? } catch (PackageParserException e) {
? ? ? ? ? ? throw PackageManagerException.from(e);
? ? ? ? }
? ? ? ? ........
? ? ? ??// 調用另外一個版本的scanPackageLI函數把來解析后得到的應用程序信息保存在PackageManagerService中
? ? ? ? PackageParser.Package scannedPkg = scanPackageLI(pkg, parseFlags, scanFlags
? ? ? ? ? ? ? ? | SCAN_UPDATE_SIGNATURE, currentTime, user);
? ? ? ? ........
? ? ? ? return scannedPkg;
? ? }
? ? ........
? ? private PackageParser.Package scanPackageLI(PackageParser.Package pkg, int parseFlags,
? ? ? ? ? ? int scanFlags, long currentTime, UserHandle user) throws PackageManagerException {
? ? ? ? boolean success = false;
? ? ? ? try {
? ? ? ? ? ? final PackageParser.Package res = scanPackageDirtyLI(pkg, parseFlags, scanFlags,
? ? ? ? ? ? ? ? ? ? currentTime, user);
? ? ? ? ? ? success = true;
? ? ? ? ? ? return res;
? ? ? ? } finally {
? ? ? ? ? ? if (!success && (scanFlags & SCAN_DELETE_DATA_ON_FAILURES) != 0) {
? ? ? ? ? ? ? ? removeDataDirsLI(pkg.packageName);
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? ........
? ? private PackageParser.Package scanPackageDirtyLI(PackageParser.Package pkg, int parseFlags,
? ? ? ? ? ? int scanFlags, long currentTime, UserHandle user) throws PackageManagerException {
? ? ? ? ........
? ? ? ? // writer
? ? ? ? synchronized (mPackages) {
? ? ? ? ? ? ........
? ? ? ? ? ? int N = pkg.providers.size();
? ? ? ? ? ? StringBuilder r = null;
? ? ? ? ? ? int i;
? ? ? ? ? ? for (i=0; i<N; i++) {
? ? ? ? ? ? ? ? PackageParser.Provider p = pkg.providers.get(i);
? ? ? ? ? ? ? ? p.info.processName = fixProcessName(pkg.applicationInfo.processName,
? ? ? ? ? ? ? ? ? ? ? ? p.info.processName, pkg.applicationInfo.uid);
? ? ? ? ? ? ? ? mProviders.addProvider(p);?// 保存所有的Provider
??????????????? ........
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ........
? ? ? ? ? ? }
? ? ? ? ? ? if (r != null) {
? ? ? ? ? ? ? ? if (DEBUG_PACKAGE_SCANNING) Log.d(TAG, " ?Providers: " + r);
? ? ? ? ? ? }


? ? ? ? ? ? N = pkg.services.size();
? ? ? ? ? ? r = null;
? ? ? ? ? ? for (i=0; i<N; i++) {
? ? ? ? ? ? ? ? PackageParser.Service s = pkg.services.get(i);
? ? ? ? ? ? ? ? s.info.processName = fixProcessName(pkg.applicationInfo.processName,
? ? ? ? ? ? ? ? ? ? ? ? s.info.processName, pkg.applicationInfo.uid);
? ? ? ? ? ? ? ? mServices.addService(s);?// 保存所有的Service
? ? ? ? ? ? ? ? ........
? ? ? ? ? ? }
? ? ? ? ? ? if (r != null) {
? ? ? ? ? ? ? ? if (DEBUG_PACKAGE_SCANNING) Log.d(TAG, " ?Services: " + r);
? ? ? ? ? ? }


? ? ? ? ? ? N = pkg.receivers.size();
? ? ? ? ? ? r = null;
? ? ? ? ? ? for (i=0; i<N; i++) {
? ? ? ? ? ? ? ? PackageParser.Activity a = pkg.receivers.get(i);
? ? ? ? ? ? ? ? a.info.processName = fixProcessName(pkg.applicationInfo.processName,
? ? ? ? ? ? ? ? ? ? ? ? a.info.processName, pkg.applicationInfo.uid);
? ? ? ? ? ? ? ? mReceivers.addActivity(a, "receiver");?// 保存所有的Receiver
? ? ? ? ? ? ? ? ........
? ? ? ? ? ? }
? ? ? ? ? ? if (r != null) {
? ? ? ? ? ? ? ? if (DEBUG_PACKAGE_SCANNING) Log.d(TAG, " ?Receivers: " + r);
? ? ? ? ? ? }

??????????? N = pkg.activities.size();
? ? ? ? ? ? r = null;
? ? ? ? ? ? for (i=0; i<N; i++) {
? ? ? ? ? ? ? ? PackageParser.Activity a = pkg.activities.get(i);
? ? ? ? ? ? ? ? a.info.processName = fixProcessName(pkg.applicationInfo.processName,
? ? ? ? ? ? ? ? ? ? ? ? a.info.processName, pkg.applicationInfo.uid);
? ? ? ? ? ? ? ? mActivities.addActivity(a, "activity");?// 保存所有的Activitie
? ? ? ? ? ? ? ? ........
? ? ? ? ? ? }
? ? ? ? ? ? if (r != null) {
? ? ? ? ? ? ? ? if (DEBUG_PACKAGE_SCANNING) Log.d(TAG, " ?Activities: " + r);
? ? ? ? ? ? }

??????????? N = pkg.permissionGroups.size();
? ? ? ? ? ? r = null;
? ? ? ? ? ? for (i=0; i<N; i++) {
? ? ? ? ? ? ? ? PackageParser.PermissionGroup pg = pkg.permissionGroups.get(i);
? ? ? ? ? ? ? ? PackageParser.PermissionGroup cur = mPermissionGroups.get(pg.info.name);
? ? ? ? ? ? ? ? if (cur == null) {
? ? ? ? ? ? ? ? ? ? mPermissionGroups.put(pg.info.name, pg);?// 保存所有的PermissionGroup
? ? ? ? ? ? ? ? ? ? ........
? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? ........
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? ........
? ? ? ? ? ? N = pkg.instrumentation.size();
? ? ? ? ? ? r = null;
? ? ? ? ? ? for (i=0; i<N; i++) {
? ? ? ? ? ? ? ? PackageParser.Instrumentation a = pkg.instrumentation.get(i);
? ? ? ? ? ? ? ? a.info.packageName = pkg.applicationInfo.packageName;
? ? ? ? ? ? ? ? a.info.sourceDir = pkg.applicationInfo.sourceDir;
? ? ? ? ? ? ? ? a.info.publicSourceDir = pkg.applicationInfo.publicSourceDir;
? ? ? ? ? ? ? ? a.info.splitSourceDirs = pkg.applicationInfo.splitSourceDirs;
? ? ? ? ? ? ? ? a.info.splitPublicSourceDirs = pkg.applicationInfo.splitPublicSourceDirs;
? ? ? ? ? ? ? ? a.info.dataDir = pkg.applicationInfo.dataDir;

??????????????? // TODO: Update instrumentation.nativeLibraryDir as well ? Does it
? ? ? ? ? ? ? ? // need other information about the application, like the ABI and what not ?
? ? ? ? ? ? ? ? a.info.nativeLibraryDir = pkg.applicationInfo.nativeLibraryDir;
? ? ? ? ? ? ? ? mInstrumentation.put(a.getComponentName(), a);?// 保存所有的Instrumentation
? ? ? ? ? ? ? ? ........
? ? ? ? ? ? }
? ? ? ? ? ? if (r != null) {
? ? ? ? ? ? ? ? if (DEBUG_PACKAGE_SCANNING) Log.d(TAG, " ?Instrumentation: " + r);
? ? ? ? ? ? }

??????????? if (pkg.protectedBroadcasts != null) {
? ? ? ? ? ? ? ? N = pkg.protectedBroadcasts.size();
? ? ? ? ? ? ? ? for (i=0; i<N; i++) {
? ? ? ? ? ? ? ? ? ? mProtectedBroadcasts.add(pkg.protectedBroadcasts.get(i));// 保存所有的ProtectedBroadcast
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? ........
? ? ? ? }

??????? return pkg;
? ? }
? ? ........
}


4.Settings對象的構造
final class Settings {
  ........
? ? final HashMap<String, SharedUserSetting> mSharedUsers = new HashMap<String, SharedUserSetting>();
? ? private final ArrayList<Object> mUserIds = new ArrayList<Object>();// 非系統應用
? ? private final SparseArray<Object> mOtherUserIds = new SparseArray<Object>();// 系統應用
  ........
? ? private final File mSettingsFilename;?// packages.xml文件用于記錄系統中所安裝的Package信息
? ? private final File mBackupSettingsFilename;?// packages-backup.xml文件,是packages.xml文件的備份
??? private final File mPackageListFilename;?// packages.list保存系統中存在的所有非系統自帶的APK信息,即UID大于1000的apk
? ? private final File mStoppedPackagesFilename;?// packages-stopped.xml文件用于記錄系統中強制停止運行的Package信息
? ? private final File mBackupStoppedPackagesFilename;?// packages-stopped.xml文件的備份,在強制停止某個應用時,會記錄。
??? ......
? ? Settings(Context context) {
? ? ? ? this(context, Environment.getDataDirectory());
? ? }

??? Settings(Context context, File dataDir) {
? ? ??? //創建/data/system/目錄,并設置這個目錄的權限
? ? ? ? mSystemDir = new File(dataDir, "system");?
? ? ? ? mSystemDir.mkdirs();
? ? ? ? FileUtils.setPermissions(mSystemDir.toString(),
? ? ? ? ? ? ? ? FileUtils.S_IRWXU|FileUtils.S_IRWXG
? ? ? ? ? ? ? ? |FileUtils.S_IROTH|FileUtils.S_IXOTH,
? ? ? ? ? ? ? ? -1, -1);
? ? ? ??// 創建一些文件
? ? ? ? mSettingsFilename = new File(mSystemDir, "packages.xml");?// mSettingsFilename = /data/system/packages.xml
? ? ? ? mBackupSettingsFilename = new File(mSystemDir, "packages-backup.xml");

??????? mPackageListFilename = new File(mSystemDir, "packages.list");?// mPackageListFilename = /data/system/packages.list
? ? ? ? FileUtils.setPermissions(mPackageListFilename, 0660, SYSTEM_UID, PACKAGE_INFO_GID);?// 設置目錄的權限

??????? // Deprecated: Needed for migration
? ? ? ? mStoppedPackagesFilename = new File(mSystemDir, "packages-stopped.xml");?

??????? mBackupStoppedPackagesFilename = new File(mSystemDir, "packages-stopped-backup.xml");
??? }
? ? ........
? ? SharedUserSetting addSharedUserLPw(String name, int uid, int pkgFlags) {
? ? ? ? //根據進程UID對應的名稱從成員變量mSharedUsers中查找對應的SharedUserSetting對象并返回查詢結果
? ? ? ? SharedUserSetting s = mSharedUsers.get(name);
? ? ? ? if (s != null) {
? ? ? ? ? ? if (s.userId == uid) {
? ? ? ? ? ? ? ? return s;
? ? ? ? ? ? }
? ? ? ? ? ? PackageManagerService.reportSettingsProblem(Log.ERROR,
? ? ? ? ? ? ? ? ? ? "Adding duplicate shared user, keeping first: " + name);
? ? ? ? ? ? return null;
? ? ? ? }
? ? ? ? //沒有查找到對應的SharedUserSetting對象,則傳入的UID名稱與UID創建一個新的SharedUserSetting對象。
? ? ? ? s = new SharedUserSetting(name, pkgFlags);
? ? ? ? s.userId = uid;
? ? ? ??//添加到成員變量mUserIds,mOtherUserIds中,這兩個變量主要是加快查找速度
? ? ? ? if (addUserIdLPw(uid, s, name)) {
? ? ? ? ? ? mSharedUsers.put(name, s);//如果加入成功則加入到mSharedUsers中
? ? ? ? ? ? return s;
? ? ? ? }
? ? ? ? return null;
? ? }
? ? ........
? ? private boolean addUserIdLPw(int uid, Object obj, Object name) {
? ? ? ??//判斷添加的UID是否大于19999,系統應用與非系統應用的UID分別在0<=x<10000,10000<=y<19999
? ? ? ? if (uid > Process.LAST_APPLICATION_UID) {
? ? ? ? ? ? return false;
? ? ? ? }
? ? ??? //如果不是系統應用則將SharedUserSetting對象到mUserIds動態數組中
? ? ? ? if (uid >= Process.FIRST_APPLICATION_UID) {
? ? ? ? ? ??//計算在數組中的索引為uid-10000
? ? ? ? ? ? int N = mUserIds.size();
? ? ? ? ? ? final int index = uid - Process.FIRST_APPLICATION_UID;
? ? ? ? ? ? while (index >= N) {
? ? ? ? ? ? ? ? mUserIds.add(null);
? ? ? ? ? ? ? ? N++;
? ? ? ? ? ? }
? ? ? ? ? ? if (mUserIds.get(index) != null) {
? ? ? ? ? ? ? ? PackageManagerService.reportSettingsProblem(Log.ERROR,
? ? ? ? ? ? ? ? ? ? ? ? "Adding duplicate user id: " + uid
? ? ? ? ? ? ? ? ? ? ? ? + " name=" + name);
? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? }
? ? ? ? ? ? mUserIds.set(index, obj);
? ? ? ? } else {// 如果是系統應用則將SharedUserSetting對象到mOtherUserIds動態數組中
? ? ? ? ? ? if (mOtherUserIds.get(uid) != null) {
? ? ? ? ? ? ? ? PackageManagerService.reportSettingsProblem(Log.ERROR,
? ? ? ? ? ? ? ? ? ? ? ? "Adding duplicate shared id: " + uid
? ? ? ? ? ? ? ? ? ? ? ? + " name=" + name);
? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? }
? ? ? ? ? ? mOtherUserIds.put(uid, obj);
? ? ? ? }
? ? ? ? return true;
? ? }
? ? ......
? ? boolean readLPw(PackageManagerService service, List<UserInfo> users, int sdkVersion, boolean onlyCore) {
? ? ? ? FileInputStream str = null;
? ? ? ? if (mBackupSettingsFilename.exists()) {?//如果/data/system/packages-backup.xml文件存在
? ? ? ? ? ? try {
? ? ? ? ? ? ? ??//讀取/data/system/packages-backup.xml文件
? ? ? ? ? ? ? ? str = new FileInputStream(mBackupSettingsFilename);
? ? ? ? ? ? ? ? mReadMessages.append("Reading from backup settings file\n");
? ? ? ? ? ? ? ? PackageManagerService.reportSettingsProblem(Log.INFO, "Need to read from backup settings file");
? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ??//當/data/system/packages.xml文件的備份文件存在時,刪除packages.xml文件
? ? ? ? ? ? ? ? if (mSettingsFilename.exists()) {
? ? ? ? ? ? ? ? ? ? ........
? ? ? ? ? ? ? ? ? ? mSettingsFilename.delete();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? } catch (java.io.IOException e) {
? ? ? ? ? ? ? ? // We'll try for the normal settings file.
? ? ? ? ? ? }
? ? ? ? }

??????? mPendingPackages.clear();
? ? ? ? mPastSignatures.clear();

??????? try {
? ? ? ? ? ? if (str == null) {?//如果/data/system/packages-backup.xml文件為空
? ? ? ? ? ? ? ? if (!mSettingsFilename.exists()) {
? ? ? ? ? ? ? ? ? ??// 同時/data/system/packages.xml文件不存在,則返回
? ? ? ? ? ? ? ? ? ? mReadMessages.append("No settings file found\n");
? ? ? ? ? ? ? ? ? ? PackageManagerService.reportSettingsProblem(Log.INFO, "No settings file; creating initial state");
? ? ? ? ? ? ? ? ? ? mInternalSdkPlatform = mExternalSdkPlatform = sdkVersion;
? ? ? ? ? ? ? ? ? ? mFingerprint = Build.FINGERPRINT;
? ? ? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ??// 否則讀取/data/system/packages.xml文件
? ? ? ? ? ? ? ? str = new FileInputStream(mSettingsFilename);?
? ? ? ? ? ? }
? ? ? ? ? ??
? ? ? ? ? ??// 解析文件內容
? ? ? ? ? ? XmlPullParser parser = Xml.newPullParser();
? ? ? ? ? ? parser.setInput(str, null);

??????????? int type;
? ? ? ? ? ? while ((type = parser.next()) != XmlPullParser.START_TAG
? ? ? ? ? ? ? ? ? ? && type != XmlPullParser.END_DOCUMENT) {
? ? ? ? ? ? ? ? ;
? ? ? ? ? ? }
? ? ? ? ? ? ........
? ? ? ? }
? ? ? ? ........
? ? ? ? return true;
? ? }
? ? ........
}

5.UserManagerService對象的構建
public class UserManagerService extends IUserManager.Stub {
? ?........
? ?UserManagerService(Context context, PackageManagerService pm, Object installLock, Object packagesLock) {
? ? ? ? this(context, pm, installLock, packagesLock, Environment.getDataDirectory(), new File(Environment.getDataDirectory(), "user"));
? ?}

??? /**
? ? ?* Available for testing purposes.
? ? ?*/
? ? private UserManagerService(Context context, PackageManagerService pm, Object installLock, Object packagesLock,
? ? ? ? ? ? File dataDir, File baseUserPath) {
? ? ? ? mContext = context;
? ? ? ? mPm = pm;
? ? ? ? mInstallLock = installLock;
? ? ? ? mPackagesLock = packagesLock;
? ? ? ? mHandler = new Handler();
? ? ? ? synchronized (mInstallLock) {
? ? ? ? ? ? synchronized (mPackagesLock) {
? ? ? ? ? ? ? ??//創建用戶安裝目錄/data/user
? ? ? ? ? ? ? ? mUsersDir = new File(dataDir, USER_INFO_DIR);
? ? ? ? ? ? ? ? mUsersDir.mkdirs();
? ? ? ? ? ? ? ??//創建userZeroDir=/data/system/users/0目錄
? ? ? ? ? ? ? ? // Make zeroth user directory, for services to migrate their files to that location
? ? ? ? ? ? ? ? File userZeroDir = new File(mUsersDir, "0");
? ? ? ? ? ? ? ? userZeroDir.mkdirs();
? ? ? ? ? ? ? ??//創建mBaseUserPath=/data/user目錄并設置權限
? ? ? ? ? ? ? ? mBaseUserPath = baseUserPath;
? ? ? ? ? ? ? ? FileUtils.setPermissions(mUsersDir.toString(),
? ? ? ? ? ? ? ? ? ? ? ? FileUtils.S_IRWXU|FileUtils.S_IRWXG
? ? ? ? ? ? ? ? ? ? ? ? |FileUtils.S_IROTH|FileUtils.S_IXOTH,
? ? ? ? ? ? ? ? ? ? ? ? -1, -1);
? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ??// 創建mUserListFile=/data/system/users/userlist.xml文件
? ? ? ? ? ? ? ? mUserListFile = new File(mUsersDir, USER_LIST_FILENAME);
? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ??// 讀取用戶列表【從userlist.xml文件中讀取用戶信息,保存到UserManager的成員變量mUsers中】
? ? ? ? ? ? ? ? readUserListLocked();
? ? ? ? ? ? ? ? // Prune out any partially created/partially removed users.
? ? ? ? ? ? ? ? ArrayList<UserInfo> partials = new ArrayList<UserInfo>();
? ? ? ? ? ? ? ? for (int i = 0; i < mUsers.size(); i++) {
? ? ? ? ? ? ? ? ? ? UserInfo ui = mUsers.valueAt(i);
? ? ? ? ? ? ? ? ? ? if ((ui.partial || ui.guestToRemove) && i != 0) {
? ? ? ? ? ? ? ? ? ? ? ? partials.add(ui);
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? for (int i = 0; i < partials.size(); i++) {
? ? ? ? ? ? ? ? ? ? UserInfo ui = partials.get(i);
? ? ? ? ? ? ? ? ? ? Slog.w(LOG_TAG, "Removing partially created user #" + i
? ? ? ? ? ? ? ? ? ? ? ? ? ? + " (name=" + ui.name + ")");
? ? ? ? ? ? ? ? ? ? removeUserStateLocked(ui.id);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? sInstance = this;
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? ........
? }
? ?
6.SystemConfig對象的構建
public class SystemConfig {
? ? ........
? ? static SystemConfig sInstance;
? ? ........
? ? final SparseArray<HashSet<String>> mSystemPermissions = new SparseArray<>();
? ? final ArrayMap<String, String> mSharedLibraries ?= new ArrayMap<>();?// 保存系統庫,程序運行時需要加載一些必要的庫
? ? final HashMap<String, FeatureInfo> mAvailableFeatures = new HashMap<>();?// 保存硬件支持的特性
? ? ........ ??
? ? final ArrayMap<String, PermissionEntry> mPermissions = new ArrayMap<>();?// 保存PermissionEntry對象
? ? ........ ??
? ? public SparseArray<HashSet<String>> getSystemPermissions() {
? ? ? ? return mSystemPermissions;
? ? }

??? public ArrayMap<String, String> getSharedLibraries() {
? ? ? ? return mSharedLibraries;
? ? }

??? public HashMap<String, FeatureInfo> getAvailableFeatures() {
? ? ? ? return mAvailableFeatures;
? ? }
? ??
? ? public ArrayMap<String, PermissionEntry> getPermissions() {
? ? ? ? return mPermissions;
? ? }
? ? ........
? ? public static SystemConfig getInstance() {?// 采用單例模式構造一個SystemConfig對象
? ? ? ? synchronized (SystemConfig.class) {
? ? ? ? ? ? if (sInstance == null) {
? ? ? ? ? ? ? ? sInstance = new SystemConfig();
? ? ? ? ? ? }
? ? ? ? ? ? return sInstance;
? ? ? ? }
? ? }
? ? ........
? ? SystemConfig() {
? ? ? ? // Read configuration from system
? ? ? ? readPermissions(Environment.buildPath(Environment.getRootDirectory(), "etc", "sysconfig"), false);
? ? ? ? // Read configuration from the old permissions dir
? ? ? ? readPermissions(Environment.buildPath(Environment.getRootDirectory(), "etc", "permissions"), false);
? ? ? ? // Only read features from OEM config
? ? ? ? readPermissions(Environment.buildPath(Environment.getOemDirectory(), "etc", "sysconfig"), true);
? ? ? ? readPermissions(Environment.buildPath(Environment.getOemDirectory(), "etc", "permissions"), true);
? ? }

??? void readPermissions(File libraryDir, boolean onlyFeatures) {
? ? ? ? //如果給定目錄不存在則返回
? ? ? ? // Read permissions from given directory.
? ? ? ? if (!libraryDir.exists() || !libraryDir.isDirectory()) {
? ? ? ? ? ? if (!onlyFeatures) {
? ? ? ? ? ? ? ? Slog.w(TAG, "No directory " + libraryDir + ", skipping");
? ? ? ? ? ? }
? ? ? ? ? ? return;
? ? ? ? }
? ? ? ??//如果給定目錄不可讀則返回
? ? ? ? if (!libraryDir.canRead()) {
? ? ? ? ? ? Slog.w(TAG, "Directory " + libraryDir + " cannot be read");
? ? ? ? ? ? return;
? ? ? ? }
? ? ? ??// 循環讀取指定目錄下的XML文件
? ? ? ? // Iterate over the files in the directory and scan .xml files
? ? ? ? for (File f : libraryDir.listFiles()) {
? ? ? ? ? ??// 跳過platform.xml文件,最后讀取該文件
? ? ? ? ? ? // We'll read platform.xml last
? ? ? ? ? ? if (f.getPath().endsWith("etc/permissions/platform.xml")) {
? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? }
? ? ? ? ? ??// 過濾不是以.xml結尾的文件
? ? ? ? ? ? if (!f.getPath().endsWith(".xml")) {
? ? ? ? ? ? ? ? Slog.i(TAG, "Non-xml file " + f + " in " + libraryDir + " directory, ignoring");
? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? }
??? ? ? ? ? // 過濾不可讀的文件
? ? ? ? ? ? if (!f.canRead()) {
? ? ? ? ? ? ? ? Slog.w(TAG, "Permissions library file " + f + " cannot be read");
? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? }
? ? ? ? ? ??// 使用PULL方式解析這些XML文件
? ? ? ? ? ? readPermissionsFromXml(f, onlyFeatures);
? ? ? ? }
? ? ? ??
? ? ? ??// 讀取該文件.../etc/permissions/platform.xml文件
? ? ? ? // Read permissions from .../etc/permissions/platform.xml last so it will take precedence
? ? ? ? final File permFile = new File(Environment.getRootDirectory(), "etc/permissions/platform.xml");
? ? ? ??// 使用PULL方式解析這些XML文件
? ? ? ? readPermissionsFromXml(permFile, onlyFeatures);
? ? }
? ??
? ? private void readPermissionsFromXml(File permFile, boolean onlyFeatures) {
? ? ? ??// 使用出入的文件permFile構造FileReader對象
? ? ? ? FileReader permReader = null;
? ? ? ? try {
? ? ? ? ? ? permReader = new FileReader(permFile);
? ? ? ? } catch (FileNotFoundException e) {
? ? ? ? ? ? Slog.w(TAG, "Couldn't find or open permissions file " + permFile);
? ? ? ? ? ? return;
? ? ? ? }
? ? ? ??
? ? ? ??// 使用PULL方式解析傳入的XML文件
? ? ? ? try {
? ? ? ? ? ? XmlPullParser parser = Xml.newPullParser();
? ? ? ? ? ? parser.setInput(permReader);

??????????? int type;
? ? ? ? ? ? while ((type=parser.next()) != parser.START_TAG
? ? ? ? ? ? ? ? ? ? ? ?&& type != parser.END_DOCUMENT) {
? ? ? ? ? ? ? ? ;
? ? ? ? ? ? }

??????????? if (type != parser.START_TAG) {
? ? ? ? ? ? ? ? throw new XmlPullParserException("No start tag found");
? ? ? ? ? ? }

??????????? if (!parser.getName().equals("permissions") && !parser.getName().equals("config")) {
? ? ? ? ? ? ? ? throw new XmlPullParserException("Unexpected start tag: found " + parser.getName() +
? ? ? ? ? ? ? ? ? ? ? ? ", expected 'permissions' or 'config'");
? ? ? ? ? ? }

??????????? while (true) {
? ? ? ? ? ? ? ? XmlUtils.nextElement(parser);
? ? ? ? ? ? ? ? if (parser.getEventType() == XmlPullParser.END_DOCUMENT) {
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? }

??????????????? String name = parser.getName();
? ? ? ? ? ? ? ? if ("group".equals(name) && !onlyFeatures) {?// group標簽用于建立Android層與Linux層之間的權限映射關系
? ? ? ? ? ? ? ? ? ? String gidStr = parser.getAttributeValue(null, "gid");?// 讀取屬性gid的值
? ? ? ? ? ? ? ? ? ? if (gidStr != null) {
? ? ? ? ? ? ? ? ? ? ? ? int gid = android.os.Process.getGidForName(gidStr);
? ? ? ? ? ? ? ? ? ? ? ? mGlobalGids = appendInt(mGlobalGids, gid);
? ? ? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? ? ? Slog.w(TAG, "<group> without gid at "
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + parser.getPositionDescription());
? ? ? ? ? ? ? ? ? ? }

??????????????????? XmlUtils.skipCurrentTag(parser);
? ? ? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? ? ? } else if ("permission".equals(name) && !onlyFeatures) {
? ? ? ? ? ? ? ? ? ? String perm = parser.getAttributeValue(null, "name");?//?讀取屬性name的值
? ? ? ? ? ? ? ? ? ? if (perm == null) {
? ? ? ? ? ? ? ? ? ? ? ? Slog.w(TAG, "<permission> without name at "
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + parser.getPositionDescription());
? ? ? ? ? ? ? ? ? ? ? ? XmlUtils.skipCurrentTag(parser);
? ? ? ? ? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? perm = perm.intern();
? ? ? ? ? ? ? ? ? ? readPermission(parser, perm);?//【讀取權限】

??????????????? } else if ("assign-permission".equals(name) && !onlyFeatures) {?//將解析到的內容保存到mSystemPermissions中
? ? ? ? ? ? ? ? ? ? String perm = parser.getAttributeValue(null, "name");?// 獲取屬性name的值
? ? ? ? ? ? ? ? ? ? if (perm == null) {
? ? ? ? ? ? ? ? ? ? ? ? Slog.w(TAG, "<assign-permission> without name at "
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + parser.getPositionDescription());
? ? ? ? ? ? ? ? ? ? ? ? XmlUtils.skipCurrentTag(parser);
? ? ? ? ? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? String uidStr = parser.getAttributeValue(null, "uid");?// 獲取屬性uid的值
? ? ? ? ? ? ? ? ? ? if (uidStr == null) {
? ? ? ? ? ? ? ? ? ? ? ? Slog.w(TAG, "<assign-permission> without uid at "
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + parser.getPositionDescription());
? ? ? ? ? ? ? ? ? ? ? ? XmlUtils.skipCurrentTag(parser);
? ? ? ? ? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? int uid = Process.getUidForName(uidStr);?// 根據uidStr字符串獲取uid的值
? ? ? ? ? ? ? ? ? ? if (uid < 0) {
? ? ? ? ? ? ? ? ? ? ? ? Slog.w(TAG, "<assign-permission> with unknown uid \""
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + uidStr + "\" at "
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + parser.getPositionDescription());
? ? ? ? ? ? ? ? ? ? ? ? XmlUtils.skipCurrentTag(parser);
? ? ? ? ? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? perm = perm.intern();
? ? ? ? ? ? ? ? ? ? HashSet<String> perms = mSystemPermissions.get(uid);?// 根據uid獲取對應的值
? ? ? ? ? ? ? ? ? ? if (perms == null) {
? ? ? ? ? ? ? ? ? ? ? ? perms = new HashSet<String>();
? ? ? ? ? ? ? ? ? ? ? ? mSystemPermissions.put(uid, perms);?// 如果獲取失敗則新建一個并保存到mSystemPermissions中
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? perms.add(perm);
? ? ? ? ? ? ? ? ? ? XmlUtils.skipCurrentTag(parser);

??????????????? } else if ("library".equals(name) && !onlyFeatures) {?// library用于指定系統庫
? ? ? ? ? ? ? ? ? ? //讀取屬性name的值與屬性file的值
? ? ? ? ? ? ? ? ? ? String lname = parser.getAttributeValue(null, "name");
? ? ? ? ? ? ? ? ? ? String lfile = parser.getAttributeValue(null, "file");
? ? ? ? ? ? ? ? ? ? if (lname == null) {
? ? ? ? ? ? ? ? ? ? ? ? Slog.w(TAG, "<library> without name at "
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + parser.getPositionDescription());
? ? ? ? ? ? ? ? ? ? } else if (lfile == null) {
? ? ? ? ? ? ? ? ? ? ? ? Slog.w(TAG, "<library> without file at "
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + parser.getPositionDescription());
? ? ? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? ? ??// 保存進程運行庫
? ? ? ? ? ? ? ? ? ? ? ? mSharedLibraries.put(lname, lfile);
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? XmlUtils.skipCurrentTag(parser);
? ? ? ? ? ? ? ? ? ? continue;

??????????????? } else if ("feature".equals(name)) {?// feature標簽用來描述設備應該支持的硬件特性
? ? ? ? ? ? ? ? ? ? String fname = parser.getAttributeValue(null, "name");?//讀取屬性name的值
? ? ? ? ? ? ? ? ? ? if (fname == null) {
? ? ? ? ? ? ? ? ? ? ? ? Slog.w(TAG, "<feature> without name at "
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + parser.getPositionDescription());
? ? ? ? ? ? ? ? ? ? } else if (isLowRamDevice() && "android.software.managed_users".equals(fname)) {
? ? ? ? ? ? ? ? ? ? ? ? Slog.w(TAG, "Feature not supported on low memory device "+fname);
? ? ? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? ? ??//創建一個FeatureInfo對象,保存讀取到的屬性name值,并將這個FeatureInfo對象保存到mAvailableFeatures中
? ? ? ? ? ? ? ? ? ? ? ? //Log.i(TAG, "Got feature " + fname);
? ? ? ? ? ? ? ? ? ? ? ? FeatureInfo fi = new FeatureInfo();
? ? ? ? ? ? ? ? ? ? ? ? fi.name = fname;
? ? ? ? ? ? ? ? ? ? ??? //mAvailableFeatures是SystemConfig的成員變量,以HashMap的方式保存硬件支持的特性
? ? ? ? ? ? ? ? ? ? ? ? mAvailableFeatures.put(fname, fi);
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? XmlUtils.skipCurrentTag(parser);
? ? ? ? ? ? ? ? ? ? continue;

??????????????? } else if ("allow-in-power-save".equals(name)) {
? ? ? ? ? ? ? ? ? ? String pkgname = parser.getAttributeValue(null, "package");
? ? ? ? ? ? ? ? ? ? if (pkgname == null) {
? ? ? ? ? ? ? ? ? ? ? ? Slog.w(TAG, "<allow-in-power-save> without package at "
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + parser.getPositionDescription());
? ? ? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? ? ? mAllowInPowerSave.add(pkgname);
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? XmlUtils.skipCurrentTag(parser);
? ? ? ? ? ? ? ? ? ? continue;

??????????????? } else if ("fixed-ime-app".equals(name)) {
? ? ? ? ? ? ? ? ? ? String pkgname = parser.getAttributeValue(null, "package");
? ? ? ? ? ? ? ? ? ? if (pkgname == null) {
? ? ? ? ? ? ? ? ? ? ? ? Slog.w(TAG, "<fixed-ime-app> without package at "
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + parser.getPositionDescription());
? ? ? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? ? ? mFixedImeApps.add(pkgname);
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? XmlUtils.skipCurrentTag(parser);
? ? ? ? ? ? ? ? ? ? continue;

??????????????? } else {
? ? ? ? ? ? ? ? ? ? XmlUtils.skipCurrentTag(parser);
? ? ? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? ? ? }

??????????? }
? ? ? ? ? ? permReader.close();
? ? ? ? } catch (XmlPullParserException e) {
? ? ? ? ? ? Slog.w(TAG, "Got execption parsing permissions.", e);
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? Slog.w(TAG, "Got execption parsing permissions.", e);
? ? ? ? }
? ? }

??? void readPermission(XmlPullParser parser, String name) throws IOException, XmlPullParserException {
? ? ? ? name = name.intern();
? ? ? ? //根據name在mPermissions表中查找對應的PermissionEntry對象,如果不存在,則新建一個并加入到mPermissions表中
? ? ? ? PermissionEntry perm = mPermissions.get(name);
? ? ? ? if (perm == null) {
? ? ? ? ? ? perm = new PermissionEntry(name);
? ? ? ? ? ? mPermissions.put(name, perm);
? ? ? ? }
? ? ? ? int outerDepth = parser.getDepth();
? ? ? ? int type;
? ? ? ? while ((type=parser.next()) != XmlPullParser.END_DOCUMENT
? ? ? ? ? ? ? ?&& (type != XmlPullParser.END_TAG
? ? ? ? ? ? ? ? ? ? ? ?|| parser.getDepth() > outerDepth)) {
? ? ? ? ? ? if (type == XmlPullParser.END_TAG
? ? ? ? ? ? ? ? ? ? || type == XmlPullParser.TEXT) {
? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? }

??????????? String tagName = parser.getName();
? ? ? ? ? ? if ("group".equals(tagName)) {
? ? ? ? ? ? ? ? String gidStr = parser.getAttributeValue(null, "gid");?// 讀取group的gid屬性
? ? ? ? ? ? ? ? if (gidStr != null) {
? ? ? ? ? ? ? ? ? ? int gid = Process.getGidForName(gidStr);?//根據gid字符串,找到對應的gid值
? ? ? ? ? ? ? ? ? ? perm.gids = appendInt(perm.gids, gid);?//設置PermissionEntry對象的gid值
? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? Slog.w(TAG, "<group> without gid at "
? ? ? ? ? ? ? ? ? ? ? ? ? ? + parser.getPositionDescription());
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? XmlUtils.skipCurrentTag(parser);
? ? ? ? }
? ? }
? ? ........
}


原文地址:?http://blog.csdn.net/ctyjqcq/article/details/49230927

總結

以上是生活随笔為你收集整理的PackageManagerService启动过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产精品免费大片 | 麻豆精品国产精华精华液好用吗 | 麻豆人妻少妇精品无码专区 | 97人妻精品一区二区三区 | 中文字幕乱妇无码av在线 | 性啪啪chinese东北女人 | 久久精品中文字幕大胸 | 性色欲情网站iwww九文堂 | 亚洲精品美女久久久久久久 | 扒开双腿疯狂进出爽爽爽视频 | 成人无码精品一区二区三区 | 国产办公室秘书无码精品99 | 国产精品美女久久久久av爽李琼 | 国产在线aaa片一区二区99 | 国产成人久久精品流白浆 | 日本一卡二卡不卡视频查询 | 无码一区二区三区在线 | 国产精品国产自线拍免费软件 | 久9re热视频这里只有精品 | 蜜臀av无码人妻精品 | 久久久久国色av免费观看性色 | 亚洲色www成人永久网址 | 精品人人妻人人澡人人爽人人 | av无码久久久久不卡免费网站 | 夜夜躁日日躁狠狠久久av | 未满小14洗澡无码视频网站 | 亚洲中文字幕av在天堂 | 性欧美熟妇videofreesex | 色一情一乱一伦 | 亚洲综合无码久久精品综合 | 黑人粗大猛烈进出高潮视频 | 亚洲成色在线综合网站 | 波多野结衣一区二区三区av免费 | 久久久久久国产精品无码下载 | 亚洲日韩乱码中文无码蜜桃臀网站 | 国产人妖乱国产精品人妖 | 高中生自慰www网站 | 国产成人av免费观看 | 亚洲另类伦春色综合小说 | 久精品国产欧美亚洲色aⅴ大片 | 麻豆国产人妻欲求不满 | 狠狠色丁香久久婷婷综合五月 | 亚洲国产欧美日韩精品一区二区三区 | 国产偷国产偷精品高清尤物 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 国产精品视频免费播放 | 国产精华av午夜在线观看 | 国产国语老龄妇女a片 | 日本又色又爽又黄的a片18禁 | 欧美性色19p | 欧美兽交xxxx×视频 | 又大又紧又粉嫩18p少妇 | 麻豆蜜桃av蜜臀av色欲av | 麻豆精品国产精华精华液好用吗 | 天海翼激烈高潮到腰振不止 | 伊人久久大香线蕉av一区二区 | 东京无码熟妇人妻av在线网址 | 熟女少妇在线视频播放 | 亚洲日韩一区二区三区 | 18禁止看的免费污网站 | 亚洲 另类 在线 欧美 制服 | 少妇被粗大的猛进出69影院 | 国产成人综合色在线观看网站 | 亚洲国产精品无码久久久久高潮 | 日日麻批免费40分钟无码 | 理论片87福利理论电影 | 国产av一区二区三区最新精品 | 国产美女极度色诱视频www | 久久久久亚洲精品男人的天堂 | 精品 日韩 国产 欧美 视频 | 国产绳艺sm调教室论坛 | 国产在线精品一区二区高清不卡 | 国产精品久免费的黄网站 | 国产免费久久精品国产传媒 | 无码午夜成人1000部免费视频 | 日韩精品久久久肉伦网站 | 久久综合香蕉国产蜜臀av | 亚洲精品国产第一综合99久久 | 亚洲伊人久久精品影院 | 成 人 网 站国产免费观看 | 狠狠综合久久久久综合网 | 国产精品丝袜黑色高跟鞋 | 国产手机在线αⅴ片无码观看 | 欧美人与牲动交xxxx | 亚洲人亚洲人成电影网站色 | av无码久久久久不卡免费网站 | 久久精品人人做人人综合 | 亚洲熟妇自偷自拍另类 | 亚洲人成人无码网www国产 | 黑人玩弄人妻中文在线 | 亚洲日本va午夜在线电影 | 国产成人亚洲综合无码 | 一本久道久久综合狠狠爱 | 青青青爽视频在线观看 | 色狠狠av一区二区三区 | 乱码av麻豆丝袜熟女系列 | 丰满人妻翻云覆雨呻吟视频 | 欧美亚洲日韩国产人成在线播放 | 欧美35页视频在线观看 | 久久五月精品中文字幕 | 久久久久se色偷偷亚洲精品av | 中文字幕无线码免费人妻 | 精品一区二区三区波多野结衣 | 精品无码国产一区二区三区av | 丁香花在线影院观看在线播放 | 亚洲国产一区二区三区在线观看 | 久久人人爽人人人人片 | 日日天干夜夜狠狠爱 | 综合人妻久久一区二区精品 | 欧美日韩在线亚洲综合国产人 | 人人妻人人澡人人爽欧美精品 | 国产精品va在线播放 | 亚洲国产精华液网站w | 又湿又紧又大又爽a视频国产 | 麻豆国产丝袜白领秘书在线观看 | 国产电影无码午夜在线播放 | 丰满人妻翻云覆雨呻吟视频 | 美女扒开屁股让男人桶 | 久久zyz资源站无码中文动漫 | 中文字幕亚洲情99在线 | √天堂资源地址中文在线 | 久久久久成人精品免费播放动漫 | 人妻夜夜爽天天爽三区 | 波多野结衣 黑人 | av在线亚洲欧洲日产一区二区 | 亚洲色欲色欲欲www在线 | 国产精品亚洲lv粉色 | 亚洲午夜久久久影院 | 乱人伦人妻中文字幕无码久久网 | 中文字幕无码人妻少妇免费 | 欧洲vodafone精品性 | 久久人妻内射无码一区三区 | 2019nv天堂香蕉在线观看 | 久久久久成人片免费观看蜜芽 | 日韩少妇内射免费播放 | 国产内射老熟女aaaa | 思思久久99热只有频精品66 | 天天爽夜夜爽夜夜爽 | 久久久精品欧美一区二区免费 | 麻豆成人精品国产免费 | 欧美人与禽zoz0性伦交 | 亚洲精品综合五月久久小说 | 中文无码伦av中文字幕 | 偷窥村妇洗澡毛毛多 | 精品 日韩 国产 欧美 视频 | 黑森林福利视频导航 | 色欲久久久天天天综合网精品 | 日韩欧美中文字幕公布 | 亚洲成av人影院在线观看 | 亚洲爆乳大丰满无码专区 | 老熟女重囗味hdxx69 | 性史性农村dvd毛片 | 欧美日本日韩 | 日韩人妻系列无码专区 | 十八禁视频网站在线观看 | 亚洲色欲色欲欲www在线 | 色欲综合久久中文字幕网 | 一本大道久久东京热无码av | 激情内射亚州一区二区三区爱妻 | 精品久久久久久人妻无码中文字幕 | 久久久久久久人妻无码中文字幕爆 | 成人精品视频一区二区三区尤物 | 一本大道伊人av久久综合 | 国产午夜亚洲精品不卡 | 无码福利日韩神码福利片 | 大地资源中文第3页 | 亚洲理论电影在线观看 | av无码电影一区二区三区 | 初尝人妻少妇中文字幕 | 久久精品视频在线看15 | 色一情一乱一伦一区二区三欧美 | 丝袜 中出 制服 人妻 美腿 | 亚洲精品鲁一鲁一区二区三区 | 激情爆乳一区二区三区 | 一本久久a久久精品vr综合 | 波多野结衣av一区二区全免费观看 | 99国产精品白浆在线观看免费 | 永久免费观看国产裸体美女 | 亚洲性无码av中文字幕 | 亚洲人成人无码网www国产 | 精品厕所偷拍各类美女tp嘘嘘 | 中文无码伦av中文字幕 | 欧洲精品码一区二区三区免费看 | 狠狠色噜噜狠狠狠7777奇米 | 中文字幕中文有码在线 | 欧美日本精品一区二区三区 | 欧美精品国产综合久久 | 国产精品99爱免费视频 | 一区二区三区高清视频一 | 成年美女黄网站色大免费视频 | 又粗又大又硬毛片免费看 | 日本精品人妻无码免费大全 | 亚洲阿v天堂在线 | 日韩精品久久久肉伦网站 | 亚洲精品久久久久中文第一幕 | 亚洲精品国产精品乱码不卡 | 成人亚洲精品久久久久软件 | 全黄性性激高免费视频 | 99er热精品视频 | 精品无码一区二区三区的天堂 | 久9re热视频这里只有精品 | 久久久久久久人妻无码中文字幕爆 | 欧美色就是色 | 色 综合 欧美 亚洲 国产 | 无码精品国产va在线观看dvd | 久久国产精品偷任你爽任你 | 色欲人妻aaaaaaa无码 | 无码精品国产va在线观看dvd | 国产精品久久福利网站 | 精品国产福利一区二区 | 国内精品久久久久久中文字幕 | 骚片av蜜桃精品一区 | 日韩人妻无码一区二区三区久久99 | 欧美xxxxx精品 | 国产极品美女高潮无套在线观看 | 中文字幕乱码人妻二区三区 | 亚洲娇小与黑人巨大交 | 综合激情五月综合激情五月激情1 | 午夜精品一区二区三区在线观看 | 久久久久成人精品免费播放动漫 | 伊在人天堂亚洲香蕉精品区 | 夜夜躁日日躁狠狠久久av | 久久精品国产大片免费观看 | 国产又粗又硬又大爽黄老大爷视 | 国产激情一区二区三区 | 婷婷综合久久中文字幕蜜桃三电影 | 最新版天堂资源中文官网 | 日韩在线不卡免费视频一区 | 东京热一精品无码av | 人妻少妇精品无码专区二区 | 日本在线高清不卡免费播放 | 久久久国产一区二区三区 | 久久亚洲国产成人精品性色 | 精品水蜜桃久久久久久久 | 亚洲精品国产品国语在线观看 | 色欲久久久天天天综合网精品 | 蜜臀av无码人妻精品 | 国产综合色产在线精品 | 人人爽人人澡人人人妻 | 亚洲精品午夜无码电影网 | 2020久久香蕉国产线看观看 | 久久综合香蕉国产蜜臀av | 欧美一区二区三区 | 中文字幕av无码一区二区三区电影 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 久久久精品国产sm最大网站 | 人妻少妇精品久久 | 成人性做爰aaa片免费看不忠 | 四虎国产精品免费久久 | 久精品国产欧美亚洲色aⅴ大片 | 无码人妻少妇伦在线电影 | 77777熟女视频在线观看 а天堂中文在线官网 | 国产成人精品视频ⅴa片软件竹菊 | 欧美精品在线观看 | 宝宝好涨水快流出来免费视频 | 亚洲熟妇色xxxxx欧美老妇y | 东京无码熟妇人妻av在线网址 | 久久人人爽人人人人片 | 国产成人久久精品流白浆 | 亚洲一区二区三区含羞草 | 无人区乱码一区二区三区 | 亚洲一区二区三区国产精华液 | 中文字幕久久久久人妻 | 欧美三级不卡在线观看 | 国产亚洲精品久久久久久久久动漫 | 亚洲va欧美va天堂v国产综合 | 精品无码一区二区三区爱欲 | 欧美兽交xxxx×视频 | 日本一卡二卡不卡视频查询 | 99精品视频在线观看免费 | 国产艳妇av在线观看果冻传媒 | 日韩精品乱码av一区二区 | 天堂а√在线地址中文在线 | 风流少妇按摩来高潮 | 一本加勒比波多野结衣 | 国产精华av午夜在线观看 | 色诱久久久久综合网ywww | 国产综合在线观看 | 欧美日韩一区二区三区自拍 | 精品无码国产自产拍在线观看蜜 | 国产另类ts人妖一区二区 | 欧美阿v高清资源不卡在线播放 | 人妻有码中文字幕在线 | 99久久久无码国产精品免费 | 日本www一道久久久免费榴莲 | 在线观看免费人成视频 | 四虎国产精品一区二区 | 综合激情五月综合激情五月激情1 | 男女猛烈xx00免费视频试看 | 色综合久久久无码网中文 | 国产真人无遮挡作爱免费视频 | 色综合久久中文娱乐网 | 国产香蕉97碰碰久久人人 | 日韩人妻无码一区二区三区久久99 | 色 综合 欧美 亚洲 国产 | 18禁黄网站男男禁片免费观看 | 久久国产自偷自偷免费一区调 | 国产sm调教视频在线观看 | 大乳丰满人妻中文字幕日本 | 亚洲欧美日韩国产精品一区二区 | 成人亚洲精品久久久久软件 | 欧美性生交活xxxxxdddd | 精品国精品国产自在久国产87 | 色窝窝无码一区二区三区色欲 | 亚洲 a v无 码免 费 成 人 a v | 国产婷婷色一区二区三区在线 | 天堂一区人妻无码 | 九月婷婷人人澡人人添人人爽 | 中文久久乱码一区二区 | 精品久久久久久亚洲精品 | 中文字幕av无码一区二区三区电影 | 黑人粗大猛烈进出高潮视频 | 水蜜桃亚洲一二三四在线 | 欧美日韩视频无码一区二区三 | 无码一区二区三区在线 | 精品夜夜澡人妻无码av蜜桃 | 精品一区二区三区无码免费视频 | 国产精品高潮呻吟av久久4虎 | 国产精品第一区揄拍无码 | 丰满岳乱妇在线观看中字无码 | 国产香蕉尹人综合在线观看 | 一个人看的www免费视频在线观看 | 精品久久久中文字幕人妻 | 夜夜高潮次次欢爽av女 | 青青青手机频在线观看 | 久久亚洲a片com人成 | а√天堂www在线天堂小说 | 久久国产精品二国产精品 | 国产成人无码av片在线观看不卡 | 亚洲人成网站色7799 | 丰满人妻精品国产99aⅴ | 内射白嫩少妇超碰 | 午夜时刻免费入口 | а√资源新版在线天堂 | 精品一区二区三区无码免费视频 | 日本熟妇人妻xxxxx人hd | 青青久在线视频免费观看 | 少妇人妻大乳在线视频 | 亚洲综合久久一区二区 | 无码一区二区三区在线观看 | 亚洲一区二区三区无码久久 | 综合网日日天干夜夜久久 | 日日摸天天摸爽爽狠狠97 | 欧美 日韩 亚洲 在线 | 成人三级无码视频在线观看 | 亚洲精品国偷拍自产在线麻豆 | 国产人成高清在线视频99最全资源 | 婷婷五月综合激情中文字幕 | 学生妹亚洲一区二区 | 亚洲日本一区二区三区在线 | www国产精品内射老师 | 无码播放一区二区三区 | 国内精品一区二区三区不卡 | 国产一精品一av一免费 | 色 综合 欧美 亚洲 国产 | 国产成人无码av在线影院 | 樱花草在线播放免费中文 | 女人被男人爽到呻吟的视频 | 精品乱码久久久久久久 | 国产成人精品一区二区在线小狼 | 国产明星裸体无码xxxx视频 | 久久久精品成人免费观看 | 久久99精品久久久久久 | 久久精品国产99久久6动漫 | 国产在线一区二区三区四区五区 | 久久久精品人妻久久影视 | 国产成人午夜福利在线播放 | 日日天干夜夜狠狠爱 | 成人试看120秒体验区 | 无码毛片视频一区二区本码 | 黑森林福利视频导航 | 日本又色又爽又黄的a片18禁 | 特黄特色大片免费播放器图片 | 天天综合网天天综合色 | 国产三级精品三级男人的天堂 | 日本大香伊一区二区三区 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 人妻与老人中文字幕 | 又色又爽又黄的美女裸体网站 | 无码人妻黑人中文字幕 | 国产av一区二区三区最新精品 | 少妇的肉体aa片免费 | 欧美亚洲日韩国产人成在线播放 | 四虎影视成人永久免费观看视频 | 无码人中文字幕 | 久激情内射婷内射蜜桃人妖 | 亚洲乱码中文字幕在线 | 最近免费中文字幕中文高清百度 | 在线观看免费人成视频 | 国产 浪潮av性色四虎 | 黑人粗大猛烈进出高潮视频 | 国产97在线 | 亚洲 | 国内精品人妻无码久久久影院 | 国产人妻大战黑人第1集 | 少妇高潮喷潮久久久影院 | 中文字幕乱码亚洲无线三区 | 国产午夜无码视频在线观看 | 久久亚洲日韩精品一区二区三区 | 中文字幕色婷婷在线视频 | аⅴ资源天堂资源库在线 | 激情爆乳一区二区三区 | 鲁鲁鲁爽爽爽在线视频观看 | 精品欧洲av无码一区二区三区 | 国产精品多人p群无码 | 老头边吃奶边弄进去呻吟 | 亚洲综合在线一区二区三区 | 亚洲国产av美女网站 | 国产精品久久国产三级国 | 国产精品久久久久久久9999 | 国产sm调教视频在线观看 | 在线观看欧美一区二区三区 | 亚洲无人区午夜福利码高清完整版 | 无码人妻av免费一区二区三区 | 日本高清一区免费中文视频 | 麻豆国产97在线 | 欧洲 | 国产超级va在线观看视频 | 无码人妻丰满熟妇区毛片18 | a在线亚洲男人的天堂 | 97资源共享在线视频 | 2020久久香蕉国产线看观看 | 国语精品一区二区三区 | 国产熟女一区二区三区四区五区 | 色婷婷综合中文久久一本 | 天天燥日日燥 | 亚洲精品久久久久avwww潮水 | 亚洲成色www久久网站 | av香港经典三级级 在线 | 久久久久久亚洲精品a片成人 | 亚洲爆乳精品无码一区二区三区 | 又色又爽又黄的美女裸体网站 | 精品无人区无码乱码毛片国产 | 日韩人妻无码一区二区三区久久99 | 人妻尝试又大又粗久久 | 99麻豆久久久国产精品免费 | 福利一区二区三区视频在线观看 | 熟女少妇人妻中文字幕 | 麻豆国产人妻欲求不满谁演的 | 精品国产一区二区三区四区 | 日本一卡二卡不卡视频查询 | 无人区乱码一区二区三区 | 偷窥村妇洗澡毛毛多 | 日韩精品一区二区av在线 | 中文字幕精品av一区二区五区 | 2019nv天堂香蕉在线观看 | 中文字幕av无码一区二区三区电影 | 红桃av一区二区三区在线无码av | 男女性色大片免费网站 | 奇米影视7777久久精品人人爽 | 国产精品内射视频免费 | 丰满人妻翻云覆雨呻吟视频 | 永久免费观看国产裸体美女 | 久青草影院在线观看国产 | 国产办公室秘书无码精品99 | 无码人妻丰满熟妇区毛片18 | 日韩av无码中文无码电影 | 国产欧美熟妇另类久久久 | 丰满少妇女裸体bbw | 免费网站看v片在线18禁无码 | 亚洲熟悉妇女xxx妇女av | 动漫av一区二区在线观看 | 色欲综合久久中文字幕网 | 一本一道久久综合久久 | 国产一区二区不卡老阿姨 | aⅴ在线视频男人的天堂 | 久久亚洲日韩精品一区二区三区 | 少女韩国电视剧在线观看完整 | 曰本女人与公拘交酡免费视频 | 四虎4hu永久免费 | 国产美女精品一区二区三区 | 成人试看120秒体验区 | 亚洲欧美色中文字幕在线 | 性生交大片免费看l | 噜噜噜亚洲色成人网站 | 中文字幕乱码人妻二区三区 | 300部国产真实乱 | 国产午夜亚洲精品不卡下载 | 人妻少妇被猛烈进入中文字幕 | 日韩人妻系列无码专区 | 伊人久久大香线焦av综合影院 | 色综合久久久无码中文字幕 | 国产无遮挡又黄又爽免费视频 | 亚洲欧美精品aaaaaa片 | 无码帝国www无码专区色综合 | 少妇无码一区二区二三区 | 一本大道伊人av久久综合 | www一区二区www免费 | 国产婷婷色一区二区三区在线 | 国产亚洲人成a在线v网站 | 亚洲精品一区二区三区大桥未久 | 亚洲综合伊人久久大杳蕉 | 天海翼激烈高潮到腰振不止 | 男人和女人高潮免费网站 | 亚洲日本在线电影 | 99久久精品日本一区二区免费 | 精品欧美一区二区三区久久久 | 亚洲春色在线视频 | 正在播放东北夫妻内射 | 熟女少妇在线视频播放 | 国产成人无码av一区二区 | 在线欧美精品一区二区三区 | 乱人伦中文视频在线观看 | 亚洲国产精品无码一区二区三区 | 又黄又爽又色的视频 | 久久无码中文字幕免费影院蜜桃 | 色综合天天综合狠狠爱 | 国产成人综合美国十次 | 亚洲中文字幕在线无码一区二区 | 久久97精品久久久久久久不卡 | 樱花草在线社区www | 东京一本一道一二三区 | 高中生自慰www网站 | 日韩在线不卡免费视频一区 | 99久久精品无码一区二区毛片 | 成年女人永久免费看片 | 香蕉久久久久久av成人 | 夜夜影院未满十八勿进 | 亚洲成av人片在线观看无码不卡 | 日韩成人一区二区三区在线观看 | 超碰97人人射妻 | 高潮毛片无遮挡高清免费 | 欧美变态另类xxxx | 国产熟女一区二区三区四区五区 | 色妞www精品免费视频 | 成人无码视频在线观看网站 | 又黄又爽又色的视频 | 人人妻人人澡人人爽欧美一区 | 久久久精品欧美一区二区免费 | 大胆欧美熟妇xx | 国内精品久久久久久中文字幕 | 国产亚洲精品久久久久久 | 奇米影视7777久久精品人人爽 | 久久久久久久女国产乱让韩 | 图片区 小说区 区 亚洲五月 | 欧美黑人性暴力猛交喷水 | 真人与拘做受免费视频一 | 国产成人精品三级麻豆 | 午夜福利电影 | 亚洲精品国产a久久久久久 | 水蜜桃色314在线观看 | 国产特级毛片aaaaaaa高清 | 人妻aⅴ无码一区二区三区 | 丰满人妻翻云覆雨呻吟视频 | 暴力强奷在线播放无码 | 老熟妇乱子伦牲交视频 | 久久久久免费看成人影片 | 黄网在线观看免费网站 | 久久综合网欧美色妞网 | 精品无码国产自产拍在线观看蜜 | 给我免费的视频在线观看 | 成年美女黄网站色大免费视频 | 精品国精品国产自在久国产87 | 中文字幕+乱码+中文字幕一区 | 人妻熟女一区 | 亚洲最大成人网站 | 特黄特色大片免费播放器图片 | 高潮喷水的毛片 | 在线a亚洲视频播放在线观看 | 精品国产一区av天美传媒 | 亚洲春色在线视频 | 九九在线中文字幕无码 | 欧美国产亚洲日韩在线二区 | 国产香蕉尹人综合在线观看 | 夜夜夜高潮夜夜爽夜夜爰爰 | 国内精品人妻无码久久久影院 | 国产精品视频免费播放 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 中文精品无码中文字幕无码专区 | 无码福利日韩神码福利片 | 噜噜噜亚洲色成人网站 | 久久久国产精品无码免费专区 | 波多野结衣乳巨码无在线观看 | 18黄暴禁片在线观看 | 伊人久久大香线焦av综合影院 | 亚洲色大成网站www国产 | 亚洲gv猛男gv无码男同 | 日日躁夜夜躁狠狠躁 | 国产亚洲精品久久久闺蜜 | 国产人妻精品午夜福利免费 | 午夜嘿嘿嘿影院 | 欧美国产日产一区二区 | 51国偷自产一区二区三区 | 国产在线精品一区二区三区直播 | 性做久久久久久久免费看 | 一区二区三区高清视频一 | 99riav国产精品视频 | 国产精品久久国产精品99 | 国产亚洲精品久久久闺蜜 | 久久人人爽人人爽人人片av高清 | 在线看片无码永久免费视频 | 色综合久久久无码网中文 | 2020久久香蕉国产线看观看 | 国产一区二区三区四区五区加勒比 | 人妻天天爽夜夜爽一区二区 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 日日夜夜撸啊撸 | a在线亚洲男人的天堂 | 国精品人妻无码一区二区三区蜜柚 | 超碰97人人做人人爱少妇 | 中文字幕无线码 | 在线精品亚洲一区二区 | 丰满人妻精品国产99aⅴ | 强伦人妻一区二区三区视频18 | aⅴ亚洲 日韩 色 图网站 播放 | 一本久久伊人热热精品中文字幕 | 亚洲国产精品无码一区二区三区 | 国产一区二区三区日韩精品 | 欧美成人高清在线播放 | 欧美 丝袜 自拍 制服 另类 | 久热国产vs视频在线观看 | 丁香花在线影院观看在线播放 | 麻豆国产人妻欲求不满谁演的 | 精品人妻人人做人人爽夜夜爽 | 国产日产欧产精品精品app | 99久久精品午夜一区二区 | 国产精品无码一区二区桃花视频 | 永久免费观看国产裸体美女 | 国产精品久免费的黄网站 | 乱码午夜-极国产极内射 | 日本www一道久久久免费榴莲 | 九月婷婷人人澡人人添人人爽 | 人妻中文无码久热丝袜 | 少女韩国电视剧在线观看完整 | 婷婷丁香五月天综合东京热 | 人人妻人人澡人人爽欧美一区 | 国产免费观看黄av片 | 免费男性肉肉影院 | 一本久道久久综合狠狠爱 | 欧美丰满熟妇xxxx性ppx人交 | 成人欧美一区二区三区 | 无码国产激情在线观看 | 亚洲国产高清在线观看视频 | 国产suv精品一区二区五 | 蜜桃臀无码内射一区二区三区 | 久久天天躁夜夜躁狠狠 | 奇米影视7777久久精品人人爽 | 老子影院午夜精品无码 | 免费无码午夜福利片69 | 人妻尝试又大又粗久久 | 5858s亚洲色大成网站www | 久精品国产欧美亚洲色aⅴ大片 | 欧美人与禽猛交狂配 | 日欧一片内射va在线影院 | 久久久久se色偷偷亚洲精品av | 亚洲色欲久久久综合网东京热 | 亚洲成色www久久网站 | 久久国内精品自在自线 | 成人亚洲精品久久久久软件 | 无码任你躁久久久久久久 | 在线精品亚洲一区二区 | 国产午夜亚洲精品不卡 | 国产精品无套呻吟在线 | 午夜精品久久久久久久久 | 狂野欧美性猛xxxx乱大交 | 国产精品无码成人午夜电影 | 亚洲精品国偷拍自产在线麻豆 | 欧美日韩一区二区三区自拍 | 初尝人妻少妇中文字幕 | 午夜熟女插插xx免费视频 | 色婷婷综合中文久久一本 | 亚洲欧美精品aaaaaa片 | 丝袜人妻一区二区三区 | 精品国产青草久久久久福利 | 成年女人永久免费看片 | 国产午夜无码视频在线观看 | 久热国产vs视频在线观看 | 久久久久成人精品免费播放动漫 | 国产精品福利视频导航 | 国产suv精品一区二区五 | 成人免费无码大片a毛片 | 亚洲伊人久久精品影院 | 国产乱人无码伦av在线a | 蜜桃视频插满18在线观看 | 波多野结衣一区二区三区av免费 | 国内精品久久毛片一区二区 | 成熟女人特级毛片www免费 | a在线观看免费网站大全 | 性色欲情网站iwww九文堂 | 乱码av麻豆丝袜熟女系列 | 在线观看国产一区二区三区 | 亚洲一区二区三区无码久久 | 无码人妻精品一区二区三区不卡 | 澳门永久av免费网站 | 捆绑白丝粉色jk震动捧喷白浆 | 国产在线无码精品电影网 | 欧美成人午夜精品久久久 | 亚洲gv猛男gv无码男同 | 国产真人无遮挡作爱免费视频 | 亚洲成在人网站无码天堂 | 久久国产精品_国产精品 | 伊人久久大香线蕉亚洲 | 无码成人精品区在线观看 | 玩弄少妇高潮ⅹxxxyw | 国产乱子伦视频在线播放 | 亚洲精品一区二区三区四区五区 | ass日本丰满熟妇pics | 少妇性l交大片 | av无码不卡在线观看免费 | 曰本女人与公拘交酡免费视频 | 精品人妻人人做人人爽夜夜爽 | 国产办公室秘书无码精品99 | 国产精品久久福利网站 | 精品人妻人人做人人爽夜夜爽 | 国产精品久久久久久亚洲毛片 | 国产成人午夜福利在线播放 | 黑人粗大猛烈进出高潮视频 | 狠狠cao日日穞夜夜穞av | 日日鲁鲁鲁夜夜爽爽狠狠 | 精品国产麻豆免费人成网站 | 人人妻人人澡人人爽欧美精品 | 亚洲精品成人av在线 | 久久国内精品自在自线 | 亚洲成a人片在线观看无码 | 国产熟女一区二区三区四区五区 | 欧洲vodafone精品性 | 高清无码午夜福利视频 | 国产午夜视频在线观看 | 国产成人一区二区三区在线观看 | 国产午夜福利100集发布 | 久久久亚洲欧洲日产国码αv | 亚洲中文无码av永久不收费 | 无遮挡国产高潮视频免费观看 | 人妻人人添人妻人人爱 | 伊人久久大香线焦av综合影院 | 99久久人妻精品免费二区 | 亚洲区欧美区综合区自拍区 | 国产激情一区二区三区 | 国内揄拍国内精品少妇国语 | 亚洲中文字幕无码中文字在线 | 乌克兰少妇性做爰 | 国产av剧情md精品麻豆 | 老司机亚洲精品影院无码 | 九月婷婷人人澡人人添人人爽 | 伊人久久大香线焦av综合影院 | 双乳奶水饱满少妇呻吟 | 亚洲成a人片在线观看日本 | 国产精品人妻一区二区三区四 | 天堂亚洲2017在线观看 | 久青草影院在线观看国产 | 高清无码午夜福利视频 | 国产精品美女久久久久av爽李琼 | 欧美 亚洲 国产 另类 | 强奷人妻日本中文字幕 | 久久 国产 尿 小便 嘘嘘 | 国产在线无码精品电影网 | 精品人妻av区 | 国产97色在线 | 免 | 少妇激情av一区二区 | 欧美亚洲国产一区二区三区 | 动漫av一区二区在线观看 | 久久久中文字幕日本无吗 | 亚洲精品国产第一综合99久久 | 一本久道久久综合婷婷五月 | 亚洲精品久久久久中文第一幕 | 精品乱码久久久久久久 | 欧美人与禽zoz0性伦交 | 女人高潮内射99精品 | 亚洲日韩中文字幕在线播放 | 亚洲区小说区激情区图片区 | 欧美日韩综合一区二区三区 | аⅴ资源天堂资源库在线 | 女人被爽到呻吟gif动态图视看 | 久久精品丝袜高跟鞋 | 欧美第一黄网免费网站 | 丝袜人妻一区二区三区 | aa片在线观看视频在线播放 | 老司机亚洲精品影院 | 狂野欧美性猛交免费视频 | 无码精品国产va在线观看dvd | 国产精品久久久午夜夜伦鲁鲁 | 无码毛片视频一区二区本码 | 高潮喷水的毛片 | 性欧美疯狂xxxxbbbb | 日本护士xxxxhd少妇 | 精品乱码久久久久久久 | 97se亚洲精品一区 | 日本乱人伦片中文三区 | 国产精品美女久久久网av | 大色综合色综合网站 | 欧美日本精品一区二区三区 | 少妇被黑人到高潮喷出白浆 | 天堂无码人妻精品一区二区三区 | av无码电影一区二区三区 | 久久天天躁狠狠躁夜夜免费观看 | 日欧一片内射va在线影院 | 日韩人妻无码一区二区三区久久99 | 久久综合给合久久狠狠狠97色 | 中文亚洲成a人片在线观看 | 色一情一乱一伦一视频免费看 | 国产成人精品视频ⅴa片软件竹菊 | 日日摸天天摸爽爽狠狠97 | 少妇人妻偷人精品无码视频 | 动漫av网站免费观看 | 日韩人妻无码中文字幕视频 | 图片区 小说区 区 亚洲五月 | 日本精品高清一区二区 | 色综合天天综合狠狠爱 | 日韩av无码中文无码电影 | 狠狠色丁香久久婷婷综合五月 | 久久国产自偷自偷免费一区调 | 小sao货水好多真紧h无码视频 | 久久综合香蕉国产蜜臀av | 四虎永久在线精品免费网址 | 久精品国产欧美亚洲色aⅴ大片 | 精品久久久中文字幕人妻 | 欧美丰满少妇xxxx性 | 国产两女互慰高潮视频在线观看 | 精品亚洲成av人在线观看 | 玩弄人妻少妇500系列视频 | 色综合视频一区二区三区 | 精品国精品国产自在久国产87 | 欧美性黑人极品hd | 亚洲精品成人av在线 | 宝宝好涨水快流出来免费视频 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 中文字幕无码免费久久99 | а√资源新版在线天堂 | 狠狠色欧美亚洲狠狠色www | 中文字幕乱码亚洲无线三区 | 131美女爱做视频 | 少妇愉情理伦片bd | 成年美女黄网站色大免费视频 | 中文字幕精品av一区二区五区 | 亚洲精品成人av在线 | 久久久无码中文字幕久... | 亚洲精品中文字幕久久久久 | 国产精品久久久久7777 | aⅴ亚洲 日韩 色 图网站 播放 | 久久亚洲精品成人无码 | 精品久久久无码中文字幕 | 中文毛片无遮挡高清免费 | 日日噜噜噜噜夜夜爽亚洲精品 | 日日摸天天摸爽爽狠狠97 | 狠狠躁日日躁夜夜躁2020 | 在线а√天堂中文官网 | 国产网红无码精品视频 | 国产真实乱对白精彩久久 | 国产无套内射久久久国产 | 亚洲中文字幕va福利 | 久久人人97超碰a片精品 | 亚洲精品午夜无码电影网 | 欧美丰满熟妇xxxx性ppx人交 | 亚洲熟女一区二区三区 | 性做久久久久久久免费看 | 人妻少妇被猛烈进入中文字幕 | 性欧美videos高清精品 | 亚洲日本在线电影 | 中文字幕无码乱人伦 | 国产免费观看黄av片 | 亚洲色在线无码国产精品不卡 | 无码任你躁久久久久久久 | 欧美性猛交内射兽交老熟妇 | 亚洲自偷精品视频自拍 | 国产精品免费大片 | 国产精品人妻一区二区三区四 | 九月婷婷人人澡人人添人人爽 | 丰满肥臀大屁股熟妇激情视频 | 婷婷五月综合激情中文字幕 | 日日摸天天摸爽爽狠狠97 | 国产亚av手机在线观看 | 国产偷国产偷精品高清尤物 | 国产av剧情md精品麻豆 | 亚洲一区二区三区含羞草 | 性欧美大战久久久久久久 | 人人妻人人澡人人爽欧美一区 | 天堂无码人妻精品一区二区三区 | 久久久av男人的天堂 | 亚洲第一网站男人都懂 | 国产在线无码精品电影网 | 国产免费久久精品国产传媒 | 乌克兰少妇xxxx做受 | 成人一在线视频日韩国产 | 秋霞成人午夜鲁丝一区二区三区 | 无码纯肉视频在线观看 | 久在线观看福利视频 | 中文毛片无遮挡高清免费 | av无码不卡在线观看免费 | 国产特级毛片aaaaaaa高清 | 狠狠色噜噜狠狠狠7777奇米 | 欧美亚洲日韩国产人成在线播放 | 夫妻免费无码v看片 | 300部国产真实乱 | 久久久久国色av免费观看性色 | 国语自产偷拍精品视频偷 | 亚洲国产欧美在线成人 | 成 人 网 站国产免费观看 | 性生交片免费无码看人 | 成熟人妻av无码专区 | 欧洲熟妇精品视频 | 国产无套内射久久久国产 | 国产精品久久久久久无码 | 免费中文字幕日韩欧美 | 在线a亚洲视频播放在线观看 | 精品国产一区二区三区四区在线看 | 人人妻人人澡人人爽欧美一区九九 | 亚洲一区二区三区国产精华液 | 日韩av无码一区二区三区不卡 | 色婷婷综合激情综在线播放 | 成 人 免费观看网站 | 国内老熟妇对白xxxxhd | 噜噜噜亚洲色成人网站 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 疯狂三人交性欧美 | 免费观看又污又黄的网站 | 无遮挡国产高潮视频免费观看 | 亚洲国产精品无码久久久久高潮 | 人妻少妇精品久久 | 婷婷五月综合激情中文字幕 | 久久久久久国产精品无码下载 | 粉嫩少妇内射浓精videos | 亚洲熟悉妇女xxx妇女av | 日日摸日日碰夜夜爽av | 特级做a爰片毛片免费69 | 精品久久久久香蕉网 | 亚洲经典千人经典日产 | 国产精品a成v人在线播放 | 九九热爱视频精品 | 久久久久久a亚洲欧洲av冫 | 美女黄网站人色视频免费国产 | 熟女俱乐部五十路六十路av | 精品亚洲成av人在线观看 | 丁香啪啪综合成人亚洲 | 女高中生第一次破苞av | 野狼第一精品社区 | 小鲜肉自慰网站xnxx | 亚洲一区二区三区四区 | 亚洲国产欧美国产综合一区 | 一本大道伊人av久久综合 | 成年美女黄网站色大免费全看 | 99精品无人区乱码1区2区3区 | 九九在线中文字幕无码 | 日本欧美一区二区三区乱码 | 精品偷自拍另类在线观看 | 在线观看国产一区二区三区 | 国产精品久久久久久无码 | 爆乳一区二区三区无码 | 性欧美熟妇videofreesex | 亚洲色在线无码国产精品不卡 | 国产av一区二区三区最新精品 | 一二三四社区在线中文视频 | 国产精品va在线播放 | 国产乱子伦视频在线播放 | 亚洲精品国产精品乱码视色 | 亚洲综合无码一区二区三区 | 国产精品久久久 | 女人被爽到呻吟gif动态图视看 | 亚洲一区二区三区在线观看网站 | 男人的天堂av网站 | 中文字幕人妻无码一夲道 | 图片小说视频一区二区 | 天天躁日日躁狠狠躁免费麻豆 | 人妻少妇精品视频专区 | 无遮挡啪啪摇乳动态图 | 一本大道伊人av久久综合 | 麻豆精品国产精华精华液好用吗 | 亚洲一区二区观看播放 | 国内揄拍国内精品人妻 | 久久精品女人天堂av免费观看 | 国产激情艳情在线看视频 | 国产成人无码av一区二区 | 亚洲精品无码人妻无码 | 国产成人午夜福利在线播放 | 亚洲日韩一区二区三区 | 色一情一乱一伦 | 亚洲狠狠婷婷综合久久 | 亚洲国产av精品一区二区蜜芽 | 激情亚洲一区国产精品 | 丰满少妇人妻久久久久久 | 色狠狠av一区二区三区 | 国产无套粉嫩白浆在线 | 国产精品久久久久无码av色戒 | 玩弄中年熟妇正在播放 | 97精品人妻一区二区三区香蕉 | 在线成人www免费观看视频 | 亚洲乱码日产精品bd | 国产精品办公室沙发 | 成人精品天堂一区二区三区 | 国产人妻精品一区二区三区 | 国产suv精品一区二区五 | 在线观看免费人成视频 | 无码国产色欲xxxxx视频 | 在教室伦流澡到高潮hnp视频 | √8天堂资源地址中文在线 | 国产精品无码一区二区桃花视频 | 国产va免费精品观看 | 中文字幕色婷婷在线视频 | 亚洲乱亚洲乱妇50p | 人妻少妇被猛烈进入中文字幕 | 对白脏话肉麻粗话av | 少妇人妻偷人精品无码视频 | 国产熟女一区二区三区四区五区 | 中文字幕+乱码+中文字幕一区 | 日本一区二区更新不卡 | 久久精品成人欧美大片 | 真人与拘做受免费视频 | 久久人人爽人人人人片 | 性生交大片免费看l | 午夜福利电影 | 久久国产36精品色熟妇 | 精品人人妻人人澡人人爽人人 | 国产av人人夜夜澡人人爽麻豆 | 国产高潮视频在线观看 | 色窝窝无码一区二区三区色欲 | 老司机亚洲精品影院无码 | 人人超人人超碰超国产 | 亚洲国产一区二区三区在线观看 | 欧美自拍另类欧美综合图片区 | 激情人妻另类人妻伦 | 黑人巨大精品欧美黑寡妇 | 精品亚洲成av人在线观看 | 久久综合色之久久综合 | 国产精品国产三级国产专播 | 性欧美牲交在线视频 | 国产在线精品一区二区三区直播 | 欧美丰满熟妇xxxx | 国产精品久久久久久久影院 | 18禁止看的免费污网站 | 亚洲经典千人经典日产 | 国产成人亚洲综合无码 | 久久99精品国产麻豆蜜芽 | 无码午夜成人1000部免费视频 | 亚洲天堂2017无码 | 国产精品沙发午睡系列 | 牲交欧美兽交欧美 | 亚洲成a人一区二区三区 | 国产另类ts人妖一区二区 | 国产精品va在线播放 | 波多野结衣高清一区二区三区 | 丝袜足控一区二区三区 | 夜先锋av资源网站 | 人妻人人添人妻人人爱 | 一个人免费观看的www视频 | 日韩欧美中文字幕公布 | 鲁鲁鲁爽爽爽在线视频观看 | 天堂а√在线中文在线 | 欧洲精品码一区二区三区免费看 | 高潮毛片无遮挡高清免费视频 | ass日本丰满熟妇pics | 亚洲无人区午夜福利码高清完整版 | 久久久久成人精品免费播放动漫 | 色诱久久久久综合网ywww | 蜜臀aⅴ国产精品久久久国产老师 | 高中生自慰www网站 | 国产情侣作爱视频免费观看 | 日韩av激情在线观看 | 中国女人内谢69xxxxxa片 | 久久久久成人片免费观看蜜芽 | 亚洲一区二区三区含羞草 | 97人妻精品一区二区三区 | 国产极品视觉盛宴 | 麻豆国产人妻欲求不满谁演的 | 中文字幕精品av一区二区五区 | 国产精品第一区揄拍无码 | 成人无码视频免费播放 | 国产xxx69麻豆国语对白 | 久久精品女人天堂av免费观看 | 丰满少妇女裸体bbw | 久久国产36精品色熟妇 | 亚洲国产精品久久久久久 | 亚洲春色在线视频 | 无码国产色欲xxxxx视频 | 国产精品无码一区二区三区不卡 | 亚洲一区二区三区偷拍女厕 | 色诱久久久久综合网ywww | 国产激情艳情在线看视频 | 一本久道久久综合婷婷五月 | 无码国产色欲xxxxx视频 | 黑森林福利视频导航 | 日本护士xxxxhd少妇 | 久在线观看福利视频 | 国精品人妻无码一区二区三区蜜柚 | 国产三级久久久精品麻豆三级 | 国产精品va在线播放 | 国产尤物精品视频 | 国产精品久久福利网站 | 99久久精品日本一区二区免费 | 亚洲精品国产品国语在线观看 | 久久久精品欧美一区二区免费 | 日韩欧美中文字幕在线三区 | 亚洲爆乳大丰满无码专区 | 亚洲の无码国产の无码步美 | 国产成人无码午夜视频在线观看 | 国产人妻久久精品二区三区老狼 | 国产熟妇高潮叫床视频播放 | 麻豆蜜桃av蜜臀av色欲av | 久久综合给久久狠狠97色 | 欧美精品无码一区二区三区 | 久久精品国产大片免费观看 | 鲁鲁鲁爽爽爽在线视频观看 | 伊人久久大香线焦av综合影院 | 人人澡人人透人人爽 | 欧美大屁股xxxxhd黑色 | 久激情内射婷内射蜜桃人妖 | 377p欧洲日本亚洲大胆 | 久久综合给久久狠狠97色 | 国产内射老熟女aaaa | 男女超爽视频免费播放 | 99riav国产精品视频 | 国产免费久久精品国产传媒 | 国产精品久久久久久亚洲影视内衣 | 欧美丰满老熟妇xxxxx性 | 久久久久免费精品国产 | 成人片黄网站色大片免费观看 | 永久黄网站色视频免费直播 | 国产精品理论片在线观看 | √天堂中文官网8在线 | 性欧美疯狂xxxxbbbb | 一本大道久久东京热无码av | 国产精品美女久久久 | 亚洲欧美精品aaaaaa片 | 国产 精品 自在自线 | 99麻豆久久久国产精品免费 | 一本色道久久综合亚洲精品不卡 | 麻豆国产人妻欲求不满谁演的 | 亚洲综合色区中文字幕 | 夜夜躁日日躁狠狠久久av | 中文无码成人免费视频在线观看 | 少妇性l交大片欧洲热妇乱xxx | 中文无码精品a∨在线观看不卡 | 国产精品毛片一区二区 | 人人妻人人澡人人爽欧美精品 | 在线播放亚洲第一字幕 | 少妇无码吹潮 | 国产超级va在线观看视频 | 学生妹亚洲一区二区 | 亚洲欧美精品伊人久久 | 波多野结衣av一区二区全免费观看 | 丝袜美腿亚洲一区二区 | 欧美野外疯狂做受xxxx高潮 | 久久精品国产精品国产精品污 | 国产凸凹视频一区二区 | 国内少妇偷人精品视频免费 | 无遮挡啪啪摇乳动态图 | 性色av无码免费一区二区三区 | 在线欧美精品一区二区三区 | 国产成人综合在线女婷五月99播放 | 国产精品久久久久影院嫩草 | 亚洲中文字幕在线无码一区二区 | 乱人伦中文视频在线观看 | 无码帝国www无码专区色综合 | 99视频精品全部免费免费观看 | 亚洲国产一区二区三区在线观看 | 狠狠色色综合网站 | 国产亚洲美女精品久久久2020 | 国产69精品久久久久app下载 | 国产欧美亚洲精品a | 男人扒开女人内裤强吻桶进去 | 人人妻人人澡人人爽欧美一区九九 | 久久久久久久女国产乱让韩 | 国产精品自产拍在线观看 | 欧美一区二区三区 | 午夜精品久久久久久久久 | 欧美日韩一区二区免费视频 | 精品成在人线av无码免费看 | 久久zyz资源站无码中文动漫 | 中文字幕精品av一区二区五区 | 欧美日韩一区二区三区自拍 | 女人和拘做爰正片视频 | 国产无遮挡吃胸膜奶免费看 | 一本大道久久东京热无码av | 高清国产亚洲精品自在久久 | 又湿又紧又大又爽a视频国产 | 少妇人妻av毛片在线看 | 欧美日韩亚洲国产精品 | 又粗又大又硬毛片免费看 | 人人妻人人藻人人爽欧美一区 | 久久天天躁狠狠躁夜夜免费观看 | 老子影院午夜精品无码 | 日日碰狠狠躁久久躁蜜桃 | 未满成年国产在线观看 | 波多野结衣乳巨码无在线观看 | 帮老师解开蕾丝奶罩吸乳网站 | 亲嘴扒胸摸屁股激烈网站 | 亚洲色在线无码国产精品不卡 | 欧美第一黄网免费网站 | 熟女少妇人妻中文字幕 | 在线欧美精品一区二区三区 | 无码国产乱人伦偷精品视频 | 国产情侣作爱视频免费观看 | 色婷婷av一区二区三区之红樱桃 | www成人国产高清内射 | 国产av无码专区亚洲a∨毛片 | 熟妇人妻激情偷爽文 | 99国产精品白浆在线观看免费 | 乌克兰少妇xxxx做受 | 国产精品久久国产三级国 | 国产精品办公室沙发 | 欧美日韩一区二区综合 | 东京热无码av男人的天堂 | 亚洲中文无码av永久不收费 | 在教室伦流澡到高潮hnp视频 | 亚洲最大成人网站 | 国产综合色产在线精品 | 亚洲成a人片在线观看日本 | 色综合视频一区二区三区 | 久久久久免费精品国产 | 天天躁日日躁狠狠躁免费麻豆 | 夜先锋av资源网站 | аⅴ资源天堂资源库在线 | 大肉大捧一进一出视频出来呀 | 老子影院午夜精品无码 | 国产成人无码av一区二区 | 清纯唯美经典一区二区 | 人妻无码αv中文字幕久久琪琪布 | 午夜不卡av免费 一本久久a久久精品vr综合 | 无码国内精品人妻少妇 | 亚洲欧洲无卡二区视頻 | 亚洲精品鲁一鲁一区二区三区 | 亚洲 a v无 码免 费 成 人 a v | 大色综合色综合网站 | 无码人妻黑人中文字幕 | 乱码av麻豆丝袜熟女系列 | 99久久久无码国产aaa精品 | 欧美xxxxx精品 | 中文字幕乱码亚洲无线三区 | 亚洲精品一区二区三区在线 | 一本久道久久综合婷婷五月 | 最近的中文字幕在线看视频 | 久久久精品人妻久久影视 | аⅴ资源天堂资源库在线 | 精品水蜜桃久久久久久久 | а√天堂www在线天堂小说 | 精品午夜福利在线观看 | 日欧一片内射va在线影院 | 波多野42部无码喷潮在线 | 无码一区二区三区在线观看 | 纯爱无遮挡h肉动漫在线播放 | 人人爽人人爽人人片av亚洲 | 3d动漫精品啪啪一区二区中 | 国产精品美女久久久网av | 1000部夫妻午夜免费 | 亚洲人成影院在线无码按摩店 | 麻豆国产人妻欲求不满 | 色一情一乱一伦一区二区三欧美 | 人妻少妇被猛烈进入中文字幕 | 天堂亚洲2017在线观看 | 欧美日韩精品 | 综合网日日天干夜夜久久 | 国产情侣作爱视频免费观看 | 白嫩日本少妇做爰 | 国产精品va在线观看无码 | 激情内射日本一区二区三区 | 免费人成在线视频无码 | 久久国产36精品色熟妇 | 亚洲精品成人av在线 | 国产亚洲精品久久久久久国模美 | 人妻少妇精品久久 | 久久精品国产99精品亚洲 | 国产疯狂伦交大片 | 鲁一鲁av2019在线 | 男人的天堂av网站 | 国产明星裸体无码xxxx视频 | 曰韩少妇内射免费播放 | 亚洲一区二区三区在线观看网站 | 国产精品无套呻吟在线 | 狠狠色欧美亚洲狠狠色www | 久久zyz资源站无码中文动漫 | 玩弄少妇高潮ⅹxxxyw | 无码任你躁久久久久久久 | 少妇愉情理伦片bd | 夜先锋av资源网站 | 欧美性色19p | 狠狠色噜噜狠狠狠狠7777米奇 | 狂野欧美性猛交免费视频 | 国产亚洲人成在线播放 | 内射老妇bbwx0c0ck | 漂亮人妻洗澡被公强 日日躁 | 久久人人爽人人爽人人片av高清 | 人妻aⅴ无码一区二区三区 | 亚洲va欧美va天堂v国产综合 | 人妻熟女一区 | 日本熟妇乱子伦xxxx | 国产亚洲精品久久久ai换 | 成人影院yy111111在线观看 | 国产一区二区不卡老阿姨 | 中文字幕乱码中文乱码51精品 | 女人被男人躁得好爽免费视频 | 人妻互换免费中文字幕 | 国产国语老龄妇女a片 | 99在线 | 亚洲 | 久久国产精品萌白酱免费 | 男人的天堂2018无码 | 精品人妻人人做人人爽夜夜爽 | 激情爆乳一区二区三区 | 3d动漫精品啪啪一区二区中 | 亚洲天堂2017无码中文 | 大色综合色综合网站 | 久久久久国色av免费观看性色 | 欧美自拍另类欧美综合图片区 | 色窝窝无码一区二区三区色欲 | 国产亚洲欧美在线专区 | 日日天日日夜日日摸 | 国产人妻大战黑人第1集 | 日本一卡二卡不卡视频查询 | 日韩无码专区 | 中文字幕 人妻熟女 | 1000部夫妻午夜免费 | 骚片av蜜桃精品一区 | 欧美性生交活xxxxxdddd | ass日本丰满熟妇pics | 97夜夜澡人人双人人人喊 | aⅴ亚洲 日韩 色 图网站 播放 | 国产女主播喷水视频在线观看 | 国产亚洲精品久久久久久久久动漫 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 精品欧美一区二区三区久久久 | 亚洲精品www久久久 | 巨爆乳无码视频在线观看 | www一区二区www免费 | 激情五月综合色婷婷一区二区 | 性欧美疯狂xxxxbbbb | 国产明星裸体无码xxxx视频 | 亚洲欧美日韩综合久久久 | 97资源共享在线视频 | 国产乱人无码伦av在线a | 亚洲 高清 成人 动漫 | 男女作爱免费网站 | 免费国产成人高清在线观看网站 | 欧美性猛交内射兽交老熟妇 | 久久综合激激的五月天 | 我要看www免费看插插视频 | 狠狠亚洲超碰狼人久久 | 日日摸天天摸爽爽狠狠97 | 性色欲情网站iwww九文堂 | 久久国语露脸国产精品电影 | 精品成在人线av无码免费看 | 亚洲欧洲日本无在线码 | 日韩精品成人一区二区三区 | 久久国产精品萌白酱免费 | 亚洲天堂2017无码 | 国产精品99久久精品爆乳 | 久久精品人人做人人综合试看 | 在线a亚洲视频播放在线观看 | 无码午夜成人1000部免费视频 | 无码一区二区三区在线 | 亚洲熟妇色xxxxx欧美老妇y | 水蜜桃亚洲一二三四在线 | 99国产精品白浆在线观看免费 | 久久久无码中文字幕久... | 亚洲精品无码人妻无码 | 国产午夜无码精品免费看 | 亚洲人成网站免费播放 | 亚洲熟妇色xxxxx亚洲 | 日产精品99久久久久久 | 又黄又爽又色的视频 | 亚洲中文字幕无码一久久区 | 国产av无码专区亚洲awww | 亚洲成a人片在线观看日本 | 国产成人一区二区三区别 | 帮老师解开蕾丝奶罩吸乳网站 | 少妇高潮一区二区三区99 | 欧美老妇与禽交 | 亚洲欧美国产精品久久 | 99视频精品全部免费免费观看 | 国产成人无码av在线影院 | 国产一精品一av一免费 | 国产高潮视频在线观看 | 大地资源中文第3页 | 亚洲精品国产a久久久久久 | 女人被男人躁得好爽免费视频 | 小泽玛莉亚一区二区视频在线 | 久久精品丝袜高跟鞋 | 成人无码影片精品久久久 | 伊人色综合久久天天小片 | 亚洲精品中文字幕久久久久 | 偷窥日本少妇撒尿chinese | 欧美阿v高清资源不卡在线播放 | 国产成人精品久久亚洲高清不卡 | 娇妻被黑人粗大高潮白浆 | 又色又爽又黄的美女裸体网站 | 性欧美大战久久久久久久 | 99re在线播放 | 国产亚洲精品久久久久久国模美 | 精品成人av一区二区三区 | 少妇性荡欲午夜性开放视频剧场 | 在线亚洲高清揄拍自拍一品区 | 亚洲日韩av一区二区三区四区 | 日日摸天天摸爽爽狠狠97 | 波多野结衣乳巨码无在线观看 | 国产农村乱对白刺激视频 | 国产区女主播在线观看 | 天天摸天天透天天添 | 草草网站影院白丝内射 | 中文无码成人免费视频在线观看 | 色婷婷av一区二区三区之红樱桃 | 男女猛烈xx00免费视频试看 | 久久伊人色av天堂九九小黄鸭 | 欧美高清在线精品一区 | 搡女人真爽免费视频大全 | 国产凸凹视频一区二区 | 天堂久久天堂av色综合 | 亚洲国产av精品一区二区蜜芽 | ass日本丰满熟妇pics | 亚洲成a人一区二区三区 | 中文字幕无码日韩欧毛 | 特级做a爰片毛片免费69 | 欧美日韩在线亚洲综合国产人 | 久久人人爽人人爽人人片ⅴ | 黑人巨大精品欧美黑寡妇 | 亚洲国产精品一区二区第一页 | 国产成人无码一二三区视频 | 亚洲中文字幕无码中文字在线 | 亚洲精品一区二区三区在线观看 | 国产日产欧产精品精品app | 亚洲大尺度无码无码专区 | 夜夜高潮次次欢爽av女 | 18无码粉嫩小泬无套在线观看 | 国产精品无码一区二区三区不卡 | 久久精品99久久香蕉国产色戒 | 亚洲性无码av中文字幕 | 中国大陆精品视频xxxx | 人人澡人人妻人人爽人人蜜桃 | 国产乱人偷精品人妻a片 | 最新国产乱人伦偷精品免费网站 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 欧美人与禽zoz0性伦交 | 久久亚洲国产成人精品性色 | 亚洲精品成a人在线观看 | 国内精品人妻无码久久久影院蜜桃 | 日本欧美一区二区三区乱码 | 无码吃奶揉捏奶头高潮视频 | 色 综合 欧美 亚洲 国产 | 亚洲最大成人网站 | 76少妇精品导航 | 欧美成人家庭影院 | 国模大胆一区二区三区 | 亚洲精品美女久久久久久久 | 久久伊人色av天堂九九小黄鸭 | 1000部啪啪未满十八勿入下载 | 成人精品视频一区二区三区尤物 | 性史性农村dvd毛片 | 男女作爱免费网站 | 亚洲va中文字幕无码久久不卡 | 久久99精品国产.久久久久 | 乱码午夜-极国产极内射 | 国产精品久久久久久亚洲影视内衣 | 18禁止看的免费污网站 | 99精品无人区乱码1区2区3区 | 扒开双腿吃奶呻吟做受视频 | 中文字幕日产无线码一区 | 中文字幕人成乱码熟女app | 国产尤物精品视频 | 国产精品99爱免费视频 | 精品乱子伦一区二区三区 | 免费看男女做好爽好硬视频 | 国产熟女一区二区三区四区五区 | 十八禁视频网站在线观看 | 偷窥日本少妇撒尿chinese | 中文字幕精品av一区二区五区 | 水蜜桃亚洲一二三四在线 | 久久久久99精品国产片 | 久久无码人妻影院 | 色综合视频一区二区三区 | 日本xxxx色视频在线观看免费 | 国产午夜福利亚洲第一 | 亚洲热妇无码av在线播放 | 男人扒开女人内裤强吻桶进去 | 色 综合 欧美 亚洲 国产 | 色诱久久久久综合网ywww | 久久久久成人片免费观看蜜芽 | 久久综合色之久久综合 | 人妻少妇被猛烈进入中文字幕 | 国产一区二区三区精品视频 | 人妻少妇被猛烈进入中文字幕 | 国产精品高潮呻吟av久久4虎 | 蜜桃av抽搐高潮一区二区 | 2019午夜福利不卡片在线 | 国产va免费精品观看 | 无码av最新清无码专区吞精 | 久青草影院在线观看国产 | 久久综合色之久久综合 | 台湾无码一区二区 | 国产精品无码一区二区三区不卡 | 国产猛烈高潮尖叫视频免费 | 免费无码一区二区三区蜜桃大 | 99久久精品国产一区二区蜜芽 | 曰本女人与公拘交酡免费视频 | 国产在线一区二区三区四区五区 | 在线观看欧美一区二区三区 | 99re在线播放 | 亚洲成a人一区二区三区 | √天堂资源地址中文在线 | 亚洲人成影院在线观看 | 国产精品怡红院永久免费 | 四虎影视成人永久免费观看视频 | 精品欧洲av无码一区二区三区 | 国产一区二区三区日韩精品 | 成人欧美一区二区三区 | 一本久道久久综合狠狠爱 | 爽爽影院免费观看 | 精品夜夜澡人妻无码av蜜桃 | 在线天堂新版最新版在线8 | 免费观看的无遮挡av | 欧美日韩人成综合在线播放 | 久久无码中文字幕免费影院蜜桃 | 国精品人妻无码一区二区三区蜜柚 | 国产免费无码一区二区视频 | 少妇无码av无码专区在线观看 | 精品无码国产一区二区三区av | 无码毛片视频一区二区本码 | 女高中生第一次破苞av | 中文字幕+乱码+中文字幕一区 | 色欲人妻aaaaaaa无码 | 麻豆国产丝袜白领秘书在线观看 | 日韩精品a片一区二区三区妖精 | 国产高清av在线播放 | 国产成人精品无码播放 | 真人与拘做受免费视频 | 又粗又大又硬毛片免费看 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 午夜福利不卡在线视频 | 在线а√天堂中文官网 | 狂野欧美性猛交免费视频 | aa片在线观看视频在线播放 | 欧美精品在线观看 | 久久无码中文字幕免费影院蜜桃 | 亚洲精品美女久久久久久久 | 亚拍精品一区二区三区探花 | 精品 日韩 国产 欧美 视频 | 无码国产色欲xxxxx视频 | 国产成人午夜福利在线播放 | 99精品久久毛片a片 | 精品人妻中文字幕有码在线 | 久9re热视频这里只有精品 | 人人爽人人爽人人片av亚洲 | 亚洲中文字幕无码中文字在线 | 亚洲欧美国产精品专区久久 | 99久久无码一区人妻 | 精品国产精品久久一区免费式 | 波多野结衣 黑人 | 国内精品九九久久久精品 | 亚洲精品欧美二区三区中文字幕 | 露脸叫床粗话东北少妇 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 老熟女乱子伦 | 国产精品久久久久久亚洲影视内衣 | 国产成人无码区免费内射一片色欲 | 国产精品亚洲专区无码不卡 | 亚洲熟妇自偷自拍另类 | 无码人妻精品一区二区三区下载 | 亚洲国产综合无码一区 | 伊人久久大香线蕉午夜 | 国产精品内射视频免费 | 中文字幕无码免费久久9一区9 | 性欧美大战久久久久久久 | 色综合视频一区二区三区 | 日韩在线不卡免费视频一区 | 亚洲成a人一区二区三区 | 精品久久久久久亚洲精品 | 人人妻人人澡人人爽欧美一区九九 | 丰满岳乱妇在线观看中字无码 | 成年美女黄网站色大免费全看 | 久久久久免费看成人影片 | 久久亚洲中文字幕精品一区 | 少妇的肉体aa片免费 | 国产性生交xxxxx无码 | av小次郎收藏 | 欧美zoozzooz性欧美 | 一区二区三区高清视频一 | 1000部啪啪未满十八勿入下载 | 欧美喷潮久久久xxxxx | 无码人妻精品一区二区三区不卡 | 色婷婷欧美在线播放内射 | 亚洲一区二区三区在线观看网站 | 乱人伦人妻中文字幕无码久久网 | 欧美高清在线精品一区 | 亚洲国产精品久久久天堂 | 国产无遮挡又黄又爽又色 | 国产免费无码一区二区视频 | 成熟女人特级毛片www免费 | 色诱久久久久综合网ywww | 丰满人妻一区二区三区免费视频 | 亚洲熟妇色xxxxx欧美老妇 | 免费人成在线观看网站 | 男女爱爱好爽视频免费看 | 澳门永久av免费网站 | 狠狠色丁香久久婷婷综合五月 | 日本大乳高潮视频在线观看 | 国产农村妇女高潮大叫 | 久久久久久国产精品无码下载 | 国产特级毛片aaaaaa高潮流水 | 国产美女极度色诱视频www | 亚洲综合另类小说色区 | 国产麻豆精品精东影业av网站 | 红桃av一区二区三区在线无码av | 久久亚洲精品中文字幕无男同 | 露脸叫床粗话东北少妇 | 一区二区三区乱码在线 | 欧洲 | 欧洲极品少妇 | 精品国产一区二区三区四区在线看 | 午夜精品一区二区三区在线观看 | 在线亚洲高清揄拍自拍一品区 | 久久人人爽人人爽人人片av高清 | 精品国产一区二区三区四区 | 亚洲精品一区二区三区四区五区 | 日本欧美一区二区三区乱码 | 131美女爱做视频 | 亚洲人成影院在线无码按摩店 | 九月婷婷人人澡人人添人人爽 | 人人妻人人澡人人爽精品欧美 | 成人性做爰aaa片免费看不忠 | 黑人粗大猛烈进出高潮视频 | 久久精品无码一区二区三区 | а天堂中文在线官网 | 色老头在线一区二区三区 | 国产莉萝无码av在线播放 | 波多野结衣aⅴ在线 | 国产网红无码精品视频 | 国产人妖乱国产精品人妖 | 无码人妻少妇伦在线电影 | 综合网日日天干夜夜久久 | 一个人看的www免费视频在线观看 | 国产无遮挡又黄又爽又色 | 午夜精品久久久久久久久 | 亚洲最大成人网站 | 午夜福利一区二区三区在线观看 | 人人澡人摸人人添 | 麻豆人妻少妇精品无码专区 | 粗大的内捧猛烈进出视频 | 暴力强奷在线播放无码 | 99久久久国产精品无码免费 | 久久久久免费精品国产 | 在线观看欧美一区二区三区 | 4hu四虎永久在线观看 | 少妇太爽了在线观看 | 国产麻豆精品精东影业av网站 | 色欲久久久天天天综合网精品 | 妺妺窝人体色www在线小说 | 亚洲日韩中文字幕在线播放 | 久久久久久a亚洲欧洲av冫 | 午夜福利不卡在线视频 | 国产麻豆精品一区二区三区v视界 | 免费人成在线观看网站 | 色五月丁香五月综合五月 | 免费无码肉片在线观看 | 日本又色又爽又黄的a片18禁 | 少妇激情av一区二区 | 男女猛烈xx00免费视频试看 | 久久久中文字幕日本无吗 | 中文字幕乱妇无码av在线 | 欧美野外疯狂做受xxxx高潮 | 亚洲娇小与黑人巨大交 | 未满小14洗澡无码视频网站 | 樱花草在线社区www | 精品国产一区二区三区四区在线看 | 欧美国产日韩久久mv | 中文字幕人妻无码一区二区三区 | 无码毛片视频一区二区本码 | 亚洲综合精品香蕉久久网 | 亚洲区小说区激情区图片区 | 国产高清不卡无码视频 | 窝窝午夜理论片影院 | 国产精品资源一区二区 | 1000部夫妻午夜免费 | 在线 国产 欧美 亚洲 天堂 | 精品一区二区三区无码免费视频 | 在线观看欧美一区二区三区 | 亚洲欧美精品伊人久久 | 18黄暴禁片在线观看 | 男女爱爱好爽视频免费看 | 久久伊人色av天堂九九小黄鸭 | 精品无码国产一区二区三区av | 少妇性荡欲午夜性开放视频剧场 | 18无码粉嫩小泬无套在线观看 | 在线a亚洲视频播放在线观看 | 色综合视频一区二区三区 | 人人妻人人澡人人爽欧美一区九九 | av在线亚洲欧洲日产一区二区 | 少妇人妻大乳在线视频 | 性欧美熟妇videofreesex | 99久久99久久免费精品蜜桃 | 国产在热线精品视频 | 日日橹狠狠爱欧美视频 | 99久久无码一区人妻 | 国产精品理论片在线观看 | 亚洲日韩精品欧美一区二区 | 国产精品第一区揄拍无码 |