frameworks/base/core/java/android/view/LayoutInflater.java
/*Inflate a new view hierarchy from the specified xml resource*/
private static final boolean DEBUG = false;
View inflate(){
Resources res = getContext().getResources();
res.getResourceName(resource);
res.getResourcePackageName(resource);
res.getResourceEntryName(resource);
final XmlResourceParser parser = res.getLayout(resource);
inflate(parser, root, attachToRoot);
}
AttributeSet attrs = Xml.asAttributeSet(parser);
D LayoutInflater: packageName=:android,resName=input_method
D LayoutInflater: packageName=:com.microsoft.office.powerpoint,resName=disclaimer_check_box
frameworks/base/core/java/android/content/res/Resources.java
loadXmlResourceParser(id, "layout");
openXmlBlockAsset//value.string.toString()=res/layout/disclaimer_check_box.xml
frameworks/base/core/java/android/content/res/AssetManager.java
native final int getResourceIdentifier(String type,String name,String defPackage);
native final String getResourceName(int resid);
native final String getResourcePackageName(int resid);
native final String getResourceTypeName(int resid);
native final String getResourceEntryName(int resid);
private native final long openXmlAssetNative(int cookie, String fileName);
openXmlAssetNative
frameworks/base/core/jni/android_util_AssetManager.cpp
openNonAsset
frameworks/base/libs/androidfw/AssetManager.cpp
android_content_AssetManager_getResourceIdentifier
identifierForName()//name.package+name.type+name.name-->ident
android_content_AssetManager_getResourceName
getResourceName()//name.package+name.type+name.name
android_content_AssetManager_getResourcePackageName
getResourceName()//name.package
android_content_AssetManager_getResourceTypeName
getResourceName()//name.type
android_content_AssetManager_getResourceEntryName
getResourceName()//name.name
openNonAsset
openAssetFromFileLocked
Asset::createFromFile
frameworks/base/libs/androidfw/ResourceTypes.cpp
getResourceName
PackageGroup* const grp = mPackageGroups[p];
outName->package = grp->name.string();
ResTable::parsePackage
mPackageGroups.add(group);
AssetManager::openAssetFromZipLocked
Asset::createFromCompressedMap
frameworks/base/libs/androidfw/Asset.cpp
pAsset->openChunk(dataMap, uncompressedLen);
new StreamingZipInflater(dataMap, uncompressedLen);
frameworks/base/libs/androidfw/StreamingZipInflater.cpp
01-01 20:01:00.019 1714 2456 V asset : In 0x5562c5b5b0 Asset zip path: /data/app/com.microsoft.office.powerpoint-1/base.apk
01-01 20:01:00.019 1714 2456 V asset : +++ opening zip '/data/app/com.microsoft.office.powerpoint-1/base.apk'
01-01 20:01:00.020 1714 2456 V asset : Opened compressed entry AndroidManifest.xml in zip /data/app/com.microsoft.office.powerpoint-1/base.apk mode 3: 0x55629a74e0
01-01 20:01:00.020 1714 2456 V asset : Looking for resource asset in '/data/app/com.microsoft.office.powerpoint-1/base.apk'
01-01 20:01:00.020 1714 2456 V asset : loading resource table /data/app/com.microsoft.office.powerpoint-1/base.apk
01-01 20:01:00.020 1714 2456 V asset : Opened uncompressed entry resources.arsc in zip /data/app/com.microsoft.office.powerpoint-1/base.apk mode 3: 0x55629a74e0
01-01 20:01:00.020 1714 2456 V asset : Parsing resources for /data/app/com.microsoft.office.powerpoint-1/base.apk
01-01 20:01:00.064 1714 1764 V asset : Looking for non-asset 'res/drawable/ppt_splashscreen.xml' in '/data/app/com.microsoft.office.powerpoint-1/base.apk'
01-01 20:01:00.065 1714 1764 V asset : Opened compressed entry res/drawable/ppt_splashscreen.xml in zip /data/app/com.microsoft.office.powerpoint-1/base.apk mode 3: 0x5562ca0fd0
01-01 20:01:00.066 1714 1764 V asset : Looking for non-asset 'res/drawable-xhdpi-v4/powerpoint_splash.png' in '/data/app/com.microsoft.office.powerpoint-1/base.apk'
01-01 20:01:00.067 1714 1764 V asset : Opened uncompressed entry res/drawable-xhdpi-v4/powerpoint_splash.png in zip /data/app/com.microsoft.office.powerpoint-1/base.apk mode 2: 0x5562ca0fd0
/data/app/com.microsoft.office.powerpoint:layout/disclaimer_check_box.xml
try {
InputStreamReader inputReader = new InputStreamReader( getResources().getAssets().open(fileName) );
BufferedReader bufReader = new BufferedReader(inputReader);
String line="";
String Result="";
while((line = bufReader.readLine()) != null)
Result += line;
return Result;
} catch (Exception e) {
e.printStackTrace();
}
AssetManager::SharedZip::SharedZip
AssetManager::openAssetFromZipLocked
apktool d app.apk
apktool b ppt -c –o app1.apk
apk裏的AndroidManifest.xml 爲二進制文件,可通過AXMLPrinter2.jar包反編譯出來
cmd命令行運行一下命令:
java -jar AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest2.xml