C++[android]android下apk的安过程

/********************2016年4月23日更新********************************/

知乎:有什么apk分析工具?

将到了一个apk文件,怀疑不安全,在安装到手机之前,想分析下此apk有无产生黑心行为,或者,反汇编这个文件,求指教应该据此啊分析工具?如果可以,最好得依附可靠的下载链接。

 

李洋:

android-apktool
可以把你apk里面的classes.dex转换为jar格式,然后可以动用Java Decompiler
打开这jar文件,直接可以见到其中class文件相反编译的情节。

而若是前的jar被模糊过得话,反编译之后的情节可能拘留起会较窝火。

另外,apk里面也可能带有有NDK开发的.so文件,这个就是只能用一个支持arm格式的反汇编器来拘禁反汇编之后的汇编代码了。

 

知乎:android项目因此eclipse生成apk包,eclipse完成了啦七独步骤?

眼前片龙失去面试,面试官问的,小菜表示未清楚。当时外唤醒了一个签名。

 

谢榭:

自问自答吧 呵呵

首先步:打包资源文件,生成R.java文件

【输入】Resource文件(就是工程被res中之公文)、Assets文件(相当给另外一栽资源,这种资源Android系统并无像对res中之公文那样优化其)、AndroidManifest.xml文件(包名就是由这边读取的,因为生成R.java文件需要包名)、Android基础类库(Android.jar文件)

【输出】打包好的资源(一般以Android工程的bin目录可以看看一个叫resources.ap_的文本就是其了)、R.java文件(在gen目录中,大家应该十分熟稔了)

【工具】aapt工具,它的门道在${ANDROID_SDK_HOME}/platform-tools/aapt(如果你用的凡Windows系统,按老规矩路径应该这么描写:%ANDROID_SDK_HOME%\platform-tools\aapt.exe,下同)。

第二步:处理AIDL文件,生成对应之.java文件(当然,有不少工没有动用AIDL,那这进程即得看看了)

【输入】源码文件、aidl文件、framework.aidl文件

【输出】对应的.java文件

【工具】aidl工具

老三步:编译Java文件,生成对应的.class文件

【输入】源码文件(包括R.java和AIDL生成的.java文件)、库文件(.jar文件)

【输出】.class文件

【工具】javac工具

季步:把.class文件转发成Davik VM支持的.dex文件

【输入】源码文件(包括R.java和AIDL生成的.java文件)、库文件(.jar文件)

【输出】.class文件

【工具】javac工具

第五步:打包生成不署的.apk文件

【输入】打包后的资源文件、打包后类文件(.dex文件)、libs文件(包括.so文件,当然多工都未曾如此的文件,如果你免采用C/C++开发之语句)

【输出】未签约的.apk文件

【工具】apkbuilder工具

第六步:对莫签名.apk文件进行签字

【输入】未签约的.apk文件

【输出】签名的.apk文件

【工具】jarsigner

第七步:对签名后底.apk文件进行针对共同处理(不开展对一起处理是未可知公布暨Google
Market的)

【输入】签名后底.apk文件

【输出】对齐后的.apk文件

【工具】zipalign工具

/***************************************************/

  1. 先把java源文件自动编译成classes文件

 

  1. 将classes文件编译和包装成classes.dex文件

 

resources.ap_ : 资源文件生成的照耀引用

运sdk中的此家伙

 

 

  1. 拿dex文件,资源映射文件,未减的资源,清单文件打包成apk

 

  1. 被应用程序进行签约

 

debug.keystore : 右键运行时利用这来进行签字

 

签信保存及此地

 

  1. 运用adb(android debug briage)工具上传并安装apk

E:\adt-bundle-windows\sdk\platform-tools>adb install E:\adt-bundle-windows\works

pace\HelloWorld\bin\HelloWorld.apk

 

 

  1. apk于手机上的装置过程

拷贝xxx.apk 到 /data/app/xxx-1.apk(系统利用在/system/app/目录下)

 

在 /data/data 目录下创造文件夹,名称即使是包名

 

以会当/data/system/packages.xmlC++注册表文件之中加加纪录

 

<package name="com.example.helloworld" codePath="/data/app/com.example.helloworld-1.apk" nativeLibraryPath="/data/app-lib/com.example.helloworld-1" flags="572998" ft="15302011250" it="15302011475" ut="15302011475" version="1" userId="10048">

<sigs count="1">

<cert index="4" key="1000位的签名" />

</sigs>

<perms />

</package>