版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
LPMSTraining
(PackageManagerService)Outline2OverviewPMS啟動(dòng)過程Apk安裝/卸載SDSWAP對(duì)APK管理的影響Apk安裝位置的決定規(guī)則L多指令集支持LDexopt原則MTKFeaturesystem/vendor/operator/appLMulti-UserPMS問題分析方法及常見問題PMSOverview3ContextImpl.ApplicationPackageManager/system/etc/permissions/platform.xml&xxx,xml
加載系統(tǒng)feature,并為核心系統(tǒng)進(jìn)程分配默認(rèn)權(quán)限/data/system/packages.list和packages.xml
系統(tǒng)中所有應(yīng)用程序的安裝信息PackageManagerServiceDefaultContainerServiceInstaller/system/framework/system/app/data/dalvik-cachedex文件存放路徑/data/data普通程序數(shù)據(jù)應(yīng)用程序?qū)覲MS服務(wù)層程序文件層/data/system/users/userId/package-restrictions.xml
Multi-User中記錄各自enable和disable的component/system/priv-app/system/vendor/operator/app/data/appPMSOverview4提供安裝、卸載應(yīng)用程序的接口,負(fù)責(zé)系統(tǒng)中package的管理相關(guān)文件/data/systemPackages.list記錄已安裝的程序包列表Packages.xml
記錄了系統(tǒng)中所有應(yīng)用程序的包管理信息,包括permission,package,shared-user等/system/etc/permissions/xxx.xml包含很多feature,用來(lái)描述手機(jī)應(yīng)該支持的硬件特性,如支持camera,藍(lán)牙等。Platform.xml建立上層permission同底層uid/gid的關(guān)系/data/system/users/userId/Package-restrictions.xmlMulti-User中記錄各自enable和disable的component信息。PMS啟動(dòng)過程5在SystemServer中啟動(dòng)PackageManagerService.mainnewPackageManagerService()并添加到ServiceManager中newinstaller(建立installer和installd的socket連接,最終在底層實(shí)現(xiàn)install,remove,dexopt等功能)創(chuàng)建PackageHandlerMessageLooper(安裝/卸載請(qǐng)求)通過systemConfig獲取到xml文件中信息readPLW()(讀取data/system/packages.xml)檢查/system/etc/permissions/platform.xml中定制的library及/system/framework下的jar檔案是否需要dex提取進(jìn)行優(yōu)化。若需要優(yōu)化,會(huì)調(diào)用installer.dexopt提取dex到/data/dalvik-cache中調(diào)用scanDirLI掃描存放apk的各個(gè)目錄系統(tǒng)應(yīng)用安裝—通過scanPackageLI逐一解析AndroidManifest.xml文件,建立每個(gè)apk的配置結(jié)構(gòu),并將apk配置信息添加到全局列表進(jìn)行管理。調(diào)用writeLPr()從全局列表中將apk信息寫到packages.xml和packages.list中。APK安裝6安裝apk(data/app):通過phoneUI安裝adb命令adbinstallxxx.apkL版本不能使用adbpush命令安裝apkPMS安裝apk的過程復(fù)制apk安裝包到data/app目錄下copyApk()解壓并掃描安裝包,把dex編譯為oat文件(User版本)且保存到data/dalvik-cache目錄,并在data/data目錄下創(chuàng)建對(duì)應(yīng)的應(yīng)用數(shù)據(jù)目錄scanPackageLI()APK卸載7卸載apk(data/app):通過phoneUI卸載設(shè)置->應(yīng)用->點(diǎn)擊具體的apk->卸載adb命令adbuninstallxxx.apkPMS卸載apk的過程apk卸載是安裝的逆過程,刪除安裝過程中三個(gè)目錄下創(chuàng)建的文件及目錄。停止應(yīng)用、刪除各種文件、更新系統(tǒng)設(shè)置、權(quán)限等手機(jī)內(nèi)存Sdcarddata/data下的數(shù)據(jù)目錄data/data下的數(shù)據(jù)目錄data/dalvik-cache下的dex文件data/dalvik-cache下的dex文件data/app/目錄下對(duì)應(yīng)的apkstorage/sdcard/目錄下對(duì)應(yīng)的包信息Forsystemapp,卸載的是updatedsystemapp,還原回原始systemapp.SDSWAP對(duì)APK管理的影響8SDSWAPMTK_2SDCARD_SWAP打開SDSWAP后,apk可以安裝在手機(jī)內(nèi)存和外置sd卡中Apk安裝在sdcard上的目錄/mnt/asec/Apk安裝在sdcard可能遇到的問題卸載sdcard時(shí),安裝在sdcard上的apk會(huì)消失安裝卸載sdcard時(shí),pms的updateExternalMediaStatus會(huì)被調(diào)用。即會(huì)更新sdcard上的應(yīng)用。若卸載了sdcard,則安裝在sdcard的apk會(huì)消失。apk安裝位置的決定(1/2)9ID:FAQ08778
應(yīng)用可以安裝在什么地方ID:FAQ04297
如何確認(rèn)一個(gè)應(yīng)用程序的安裝位置Apk安裝位置決定的codePackageHelper.javaresolveInstallLocationapk安裝位置的決定(2/2)10是否有Installflag?Installflag的值是什么?是“INSTALL_INTERNAL”:只能安裝在手機(jī)內(nèi)存上“INSTALL_EXTERNAL”:只能安裝在外部存儲(chǔ)上AndroidManifest.xmlinstallLocation?否無(wú)定義,安裝在手機(jī)內(nèi)存Auto若手機(jī)內(nèi)存空間足夠,則apk安裝在手機(jī)內(nèi)存;若手機(jī)內(nèi)存空間不夠則安裝在外部存儲(chǔ)上“perferExternal”:表明安裝到外部存儲(chǔ)上“internalOnly”:只能安裝到手機(jī)內(nèi)存上L多指令集的支持(1/3)11applib的存放位置Systemappsystem/app/[appname]/lib/arm或arm64Thereallibisundersystem/liborsystem/lib64Non-systemappdata/app/[packagename]/lib/arm或arm64為了兼容舊的android版本,舊的libpath(data/app-lib)會(huì)保留L多指令集的支持(2/3)12ABI(ApplicationBinaryInterface)theCPUduct.cpu.abilist32:armeabi-v7a,duct.cpu,abilist64:duct.cpu.abilist:armeabi-v8a,armeabi-v7a,armeabiABI:arm64-v8a,armeabi-v7a,armeabiThesequenceisimportantFirstappearABImeansthesystempreferinstructionsetFor64bit,arm64-v8acomestothefirstplaceFor32bit,pApplicationInfo(PMS)StringprimaryCpuAbiStringsecondaryCpuAbiL多指令集的支持(3/3)13PrimaryCpuAbi的決定規(guī)則ABItype(32bitor64bit)is
determinedbyitslibrarytypelib/arm,lib/arm64SystemwillfindtheproperABI
fromsystemproperty(abilist)Ifpackagehasonlyonelibfolder,
theprimaryABIisthelibraryIfpackagesupportsboth32and64bit
theprimaryABIfollowsdevicearchTheprimaryABIisforcedto32bitABI
whenpackagelibhasrenderscript
codesLDexopt的原則(1/2)14PMS會(huì)對(duì)apk做dexopt首次開機(jī),會(huì)對(duì)每個(gè)apk都做dexopt的動(dòng)作非首次開機(jī),若art在dalvik-cache對(duì)應(yīng)指令集目錄下找不到dex文件,則會(huì)重新做dexopt且提示“android正在升級(jí)”Dexopt后的文件存儲(chǔ)路徑/data/dalvik-cache/arm/……/data/dalvik-cache/arm64/……存儲(chǔ)路徑是由applicationInfo.primaryCpuAbi決定LDexopt的原則(2/2)15為了加速開機(jī)時(shí)間,dexopt會(huì)對(duì)package做排序CoreApps(Applicationdeclaredinitsmanifest,systemapponly)keyguard,settingsprovider,shell…ReceivingACTION_PRE_BOOT_COMPLETEbroadcastAbroadcastbeforeBOOT_COMPLETESystemappsnotbeenupdatedSystemappsbeenupdatedReceivingACTION_BOOT_COMPLETEbroadcastRecentlyusedpackageEng:within30minsUsr:within7daysFirstbootwilladdallpackage按照排序把a(bǔ)pk放入到list中,然后按照l(shuí)ist的順序做dexoptMTKFeaturesystem/vendor/operator/app16目的預(yù)置的apk可以卸載,但是恢復(fù)出廠設(shè)置后可恢復(fù)L預(yù)置apk到system/vendor/operator/app的方法ID:FAQ13232L預(yù)置apk此目錄下apk的特性可以卸載,但是apk本身不會(huì)被刪除不支持移動(dòng)到外置sdcard可更新版本即升級(jí)卸載后,容許安裝低版本的apkLMulti-User目前支持版本L0.MP6MT6795Howtoenablemulti-user在alps\device\mediatek\xxx\ProjectConfig.mk中加入:MTK_SHARED_SDCARD=yesMTK_OWNER_SDCARD_ONLY_SUPPORT=yes在alps\device\mediatek\xxx\overlay\generic\frameworks\base\core\res\res\valuses\config.xml中加入:<integername=”config_multiuserMaximumUsers”>8</integer><integername=”config_enableMultiUserUI”>true</integer>DisableSDSwap非MP6不建議開PMS問題分析方法及常見問題18如何打開PMS的log開關(guān)19方法一adbshelldumpsyspackagelogaon只對(duì)當(dāng)次開機(jī)有效方法二PackageManagerService.java中修改DEBUG_XXX為true長(zhǎng)久有效adbshelldumpsyspackagepackages>p.txtdumppackage信息遇到APK安裝卸載等問題,請(qǐng)打開PMS的log開關(guān)抓取mtklog給mtk分析,也請(qǐng)一并提供p.txt文件L版本如何預(yù)置apk(1/4)20ID:FAQ13232L預(yù)置apk如何將帶源碼的APK預(yù)置進(jìn)系統(tǒng)?1)在
packages/apps下面以需要預(yù)置的APK的名字創(chuàng)建一個(gè)新文件夾,以預(yù)置一個(gè)名為Test的APK為例2)將TestAPK的Sourcecode拷貝到Test文件夾下,刪除/bin和/gen目錄3)在Test目錄下創(chuàng)建一個(gè)名為Android.mk的文件,內(nèi)容如下:LOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)
LOCAL_MODULE_TAGS:=optionalLOCAL_SRC_FILES:=$(callall-subdir-java-files)
LOCAL_PACKAGE_NAME:=Testinclude$(BUILD_PACKAGE)4)打開文件device\mediatek\common\device.mk將Test添加到PRODUCT_PACKAGES里面。PRODUCT_PACKAGES+=Test5)重新build整個(gè)工程L版本如何預(yù)置apk(2/4)21如何將無(wú)源碼的APK預(yù)置進(jìn)系統(tǒng)?1)在
packages/apps
下面以需要預(yù)置的APK名字創(chuàng)建文件夾,以預(yù)置一個(gè)名為Test的APK為例2)將Test.apk放到packages/apps/Test下面3)在packages/apps/Test下面創(chuàng)建文件Android.mk,文件內(nèi)容如下:LOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)#ModulenameshouldmatchapknametobeinstalledLOCAL_MODULE:=TestLOCAL_MODULE_TAGS:=optionalLOCAL_SRC_FILES:=$(LOCAL_MODULE).apkLOCAL_MODULE_CLASS:=APPSLOCAL_MODULE_SUFFIX:=$(COMMON_ANDROID_PACKAGE_SUFFIX)LOCAL_PREBUILT_JNI_LIBS:=\@lib/armeabi/libtest.so\@lib/armeabi/libtest2.so@lib/armeabi-v8aLOCAL_CERTIFICATE:=PRESIGNEDinclude$(BUILD_PREBUILT)若無(wú)so,刪除LOCAL_PREBUILT_JNI_LIBS若有so,使用LOCAL_PREBUILT_JNI_LIBS列出所有so的路徑,不要忘記使用@。@標(biāo)識(shí)符會(huì)將apk中的so抽離出來(lái)build進(jìn)system/lib或者system/lib64中4)打開文件device\mediatek\common\device.mk將Test添加到PRODUCT_PACKAGES里面。PRODUCT_PACKAGES+=Test5)重新build整個(gè)工程注:如果App使用SystemLevel的permission,需要預(yù)置到/system/priv-app底下(原在/system/app)。修改Android.mk,增加LOCAL_PRIVILEGED_MODULE:=true,以聲明app需要放在/system/priv-app下。L版本如何預(yù)置apk(3/4)22如何預(yù)置APK使得用戶可以卸載,恢復(fù)出廠設(shè)置時(shí)不能恢復(fù)?1)在packages/apps下面以需要預(yù)置的APK名字創(chuàng)建文件夾,以預(yù)置一個(gè)名為Test的APK為例2)將Test.apk放到packages/apps/Test下面3)在packages/apps/Test下面創(chuàng)建文件Android.mk,文件內(nèi)容如下:LOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)#ModulenameshouldmatchapknametobeinstalledLOCAL_MODULE:=TestLOCAL_MODULE_TAGS:=optionalLOCAL_SRC_FILES:=$(LOCAL_MODULE).apkLOCAL_MODULE_CLASS:=APPSLOCAL_MODULE_SUFFIX:=$(COMMON_ANDROID_PACKAGE_SUFFIX)#LOCAL_PRIVILEGED_MODULE:=trueLOCAL_MODULE_PATH:=$(TARGET_OUT_DATA_APPS)LOCAL_CERTIFICATE:=PRESIGNEDinclude$(BUILD_PREBUILT)4)打開文件device\mediatek\common\device.mk
將Test添加到PRODUCT_PACKAGES里面。PRODUCT_PACKAGES+=Test5)重新build整個(gè)工程注意:這個(gè)比不能卸載的多了一句LOCAL_MODULE_PATH:=$(TARGET_OUT_DATA_APPS)L版本如何預(yù)置apk(4/4)23如何預(yù)置APK使得用戶可以卸載,并且恢復(fù)出廠設(shè)置時(shí)能夠恢復(fù)?1在
vendor\mediatek\proprietary\binary\3rd-party\free下面以需要預(yù)置的APK名字創(chuàng)建文件夾,以預(yù)置一個(gè)名為Test的APK為例2將Test.apk放入vendor\mediatek\proprietary\binary\3rd-party\free\Test下面3在vendor\mediatek\proprietary\binary\3rd-party\free\Test下面創(chuàng)建文件Android.mk,文件內(nèi)容如下LOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)#ModulenameshouldmatchapknametobeinstalledLOCAL_MODULE:=TestLOCAL_MODULE_TAGS:=optionalLOCAL_SRC_FILES:=$(LOCAL_MODULE).apkLOCAL_MODULE_CLASS:=APPSLOCAL_MODULE_SUFFIX:=$(COMMON_ANDROID_PACKAGE_SUFFIX)LOCAL_CERTIFICATE:=PRESIGNEDLOCAL_MODULE_PATH:=$(TARGET_OUT)/vendor/operator/appinclude$(BUILD_PREBUILT)2打開文件device\mediatek\common\device.mk將Test添加到PRODUCT_PACKAGES里面。PRODUCT_PACKAGES+=Test3然后重新build整個(gè)工程如何分析“開機(jī)提示android正在升級(jí)”(1/2)24開機(jī)提示android正在升級(jí)的原因?非首次開機(jī),Art有對(duì)一些apk做dexopt做dexopt的原因?Art在dalvik目錄下找不到apk對(duì)應(yīng)的odex文件L和KK的不同L多指令集支持(arm/arm64)/data/dalvik-cache/arm/……/data/dalvik-cache/arm64/……Odex存儲(chǔ)位置由applicationInfo.primaryCpuAbi決定art:DexFile_isDexOptNeededfailedtoopenoatfile'/data/dalvik-cache/arm/system@priv-app@xxx@xxx.apk@classes.dex'forfilelocation'/system/priv-app/xxx/xxx.apk':Failedtoopenoatfilenameforreading:Nosuchfileordirectory如何分析“開機(jī)提示android正在升級(jí)”(3/3)25L可能會(huì)遇到未知問題分析打開PMS的log開關(guān)使用方法二設(shè)置DEBUG_XXX為true在mainlog里搜索關(guān)鍵字dex2oat:oat-location表示odex文件存儲(chǔ)位置Instruction-set表示此apk的primaryCpuAbi對(duì)應(yīng)的指令集這條log打印出就代表這個(gè)apk有在做dexopt且是32還是64的指令集1查看重啟手機(jī)之前上一次開機(jī)log,這個(gè)apk是否有做dex2oat且oat-location的值2在/data/dalvik-cache/arm64/xxx下查找是否已經(jīng)有這個(gè)apk的odex3檢查做dexopt的apk中包含的lib文件是armeabi-v7a還是armeabi-v8a?Armeabi-v7a對(duì)應(yīng)arm,Armeabi-v8a對(duì)應(yīng)arm64(arm64優(yōu)先)將這些信息整理好提交eservice到mtk分析首次開機(jī)到復(fù)現(xiàn)問題開機(jī)的所以開機(jī)過程的log做了dex2oat的apk文件adbshelldumpsyspackagepackages>p.txtp.txt一起提交dex2oat:/system/bin/dex2oat--zip-fd=11--zip-location=/system/app/xxx/xxx.apk--oat-fd=12--oat-location=/data/dalvik-cache/arm/system@app@xxx@xxx.apk@classes.dex--instruction-set=arm--instruction-set-features=default--runtime-arg-Xms64m--runtime-arg-Xmx512m首次開機(jī)慢26第一次開機(jī)慢是否可以優(yōu)化?原因:首次開機(jī),需要對(duì)每個(gè)apk提取odex文件,花費(fèi)較多時(shí)間方案KK版本宏WITH_DEXPREOPTUser版本會(huì)在預(yù)編譯時(shí)提取有sourcecode的APK的odex文件(首次開機(jī)節(jié)省提取odex文件時(shí)間,開機(jī)時(shí)間會(huì)優(yōu)化)[FAQ12138]PrebuiltAPK提取odex在預(yù)編譯時(shí)提取通過prebuilt方式預(yù)置的APK(無(wú)sourcecode)的odex文件L版本宏WITH_DEXPREOPT可直接打開。
若有遇到問題請(qǐng)?zhí)峤唤omtk處理。如何檢查apk安裝失敗的原因27打開PMS的log開關(guān)抓取安裝失敗的mtklog搜索TAG:PackageManager安裝失敗的原因有很多,只能具體case具體看安裝apk正常logPackageManager:init_copyidx=0:InstallParams{1339f952file=/data/local/tmp/skpye.apkcid=null}PackageManager:mcs_boundPackageManager:startCopyUserHandle{-1}:InstallParams{1339f952file=/data/local/tmp/skpye.apkcid=null}PackageManager:ApkcopydonePackageManager:mcs_checkackageManager:installPackageLI:path=/data/app/vmdl536406847.tmpPackageManager:Startparsingapk:nullPackageManager:Parsingdoneforapk:nullPackageManager:Renaming/data/app/vmdl536406847.tmpto/data/app/com.skype.rover-1PackageManager:Startinstallationforpackage:nullPackageManager:installNewPackageLI:Package{39add66fcom.skype.rover}PackageManager:Scanningpackagecom.skype.roverPackageManager:Wantthisdatadir:/data/data/com.skype.roverinstalld:do_install:com.skype.rover1010010100defaultPackageManager:Linkingnativelibrarydirfor/data/app/com.skype.rover-1installd:do_linklib:com.skype.rover/data/app/com.skype.rover-1/lib/arm0如何檢查apk安裝失敗的原因28PackageManager:ResolvednativeLibraryRootforcom.skype.rovertoroot=/data/app/com.skype.rover-1/lib,isa=truePackageManager:Abisforpackage[com.skype.rover]areprimary=armeabisecondary=nullPackageManager:Performpre-dexoptforpackage:com.skype.roverPackageManager:Runningdexopton:/data/app/com.skype.rover-1/base.apkpkg=com.skype.roverisa=armvmSafeMode=falseinstalld:do_dexopt:/data/app/com.skype.rover-1/base.apk501001com.skype.roverarm0dex2oat:/system/bin/dex2oat--zip-fd=15--zip-location=/data/app/com.skype.rover-1/base.apk--oat-fd=16--oat-location=/data/dalvik-cache/arm/data@app@com.skype.rover-1@base.apk@classes.dex--instruction-set=arm--instruction-set-features=default--runtime-arg-Xms64m--runtime-arg-Xmx512m--compiler-filter=interpret-onlyPackageManager:Dexoptdoneon:com.skype.roverPackageManager:Newpackageinstalledin/data/app/com.skype.rover-1PackageManager:Installationdoneforpackage:nullPackageManager:BMfinishingpackageinstallfor1PackageManager:mcs_unbindPackageManager:callingdisconnectService()PackageManager:Sendingtouser0:act=ent.action.PACKAGE_ADDEDdat=package:com.skype.roverflg=0x4000000Bundle[{ent.extra.UID=10100,ent.extra.user_handle=0}]ActivityManager:Broadast:Intent{act=ent.action.PACKAGE_ADDEDdat=package:com.skype.roverflg=0x4000010(hasextras)}ordered=falseuserid=0callerApp=null其他常見問題29安裝apk提示存儲(chǔ)空間不足[FAQ09276]存儲(chǔ)空間不足的提示門檻優(yōu)先安裝位置KK版本以及之前版本可以打開(不建議打開)L版本google徹底拿掉了相關(guān)code,無(wú)法再打開Packages.xml(1/4)31記錄系統(tǒng)的permissions,所有應(yīng)用程序的包管理相關(guān)信息,包括name、codePath、flags、userid等,PMS將根據(jù)這些信息進(jìn)行包管理的各種操作。Permissions標(biāo)簽<permissions>包含了系統(tǒng)中所有的權(quán)限列表,包括framework定義和應(yīng)用程序自己定義的權(quán)限<permissions><itemname="com.aspire.mm.permission.ReceiveTokenChanged"package="com.aspire.mm"/><itemname="android.permission.CONTROL_INCALL_EXPERIENCE"package="android"protection="18"/><itemname="android.permission.RESTART_PACKAGES"package="android"/>Packages.xml(2/4)32Package標(biāo)簽一個(gè)package標(biāo)簽包含了一個(gè)應(yīng)用程序包的相關(guān)信息。包括包名、codepath、程序類型、簽名等等。<packagename="com.cyber.wallet"codePath="/system/vendor/operator/app/MobileWallet"
nativeLibraryPath="/data/app-lib/MobileWallet"primaryCpuAbi="armeabi"flags="572996"pkgFlagsEx="1"ft="14a09bcbde0"it="14a09bcbde0"ut="14a09bcbde0"version="140300063"userId="10090"><sigscount="1"><certindex="4"key=“xxx"/></sigs><perms><itemname="android.permission.SYSTEM_ALERT_WINDOW"/></perms></package>Packages.xml(3/4)33Package標(biāo)簽Name:程序包名稱codePath:程序包所在路徑nativeLibraryPath:該程序所使用的native庫(kù)文件路徑。primaryCpuAbi:apk支持的abi類型(優(yōu)先)userId:應(yīng)用程序?qū)?yīng)的Linux用戶IdsharedUserId:若在androidManifest.xml中定義了sharedUserId,則此處使用它而非userId。Sigs:簽名信息。一個(gè)應(yīng)用程序只能有一個(gè)簽名。Count表示該簽名包含多少個(gè)證書。Cert:證書。一個(gè)應(yīng)用程序可以包含一個(gè)或多個(gè)證書。不同應(yīng)用程序可以使用相同證書。Index證書索引Key若index首次出現(xiàn),則key必須指定(來(lái)源于對(duì)apk進(jìn)行簽名的證書文件)Perms:一個(gè)應(yīng)用程序所申請(qǐng)的權(quán)限列表。androidManifest.xml中每使用一個(gè)<uses-permission>,則packages.xml中<perms>標(biāo)簽就會(huì)增加一項(xiàng)。Packages.xml(4/4)34Shared-user標(biāo)簽定義了共享用戶id對(duì)應(yīng)的簽名和權(quán)限Preferred-
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年全球及中國(guó)自動(dòng)式雙面研磨床行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 土地廠房買賣合同
- 空心磚采購(gòu)合同
- 石材采購(gòu)合同范本
- 涂料勞務(wù)承包合同協(xié)議書
- 醫(yī)療器械配送合同
- 汽車貨物運(yùn)輸合同樣本
- 2025農(nóng)村簡(jiǎn)易買賣合同
- 2025如何確定勞動(dòng)合同的成立商業(yè)保理資格
- 最高額抵押擔(dān)保合同
- 2025財(cái)年美國(guó)國(guó)防預(yù)算概覽-美國(guó)國(guó)防部(英)
- 2024年江西省南昌市中考一模數(shù)學(xué)試題(含答案)
- 48貴州省貴陽(yáng)市2023-2024學(xué)年五年級(jí)上學(xué)期期末數(shù)學(xué)試卷
- 《采暖空調(diào)節(jié)能技術(shù)》課件
- 游戲綜合YY頻道設(shè)計(jì)模板
- arcgis軟件操作解析課件
- 中興ZCTP 5GC高級(jí)工程師認(rèn)證考試題庫(kù)匯總(含答案)
- 大學(xué)生創(chuàng)新創(chuàng)業(yè)教程PPT全套完整教學(xué)課件
- 小學(xué)科學(xué)項(xiàng)目化作業(yè)的設(shè)計(jì)與實(shí)施研究
- 2020年中考生物試卷及答案
- MCNP-5A程序使用說明書
評(píng)論
0/150
提交評(píng)論