-
android安卓app反编译apk反编译教程.zip_android反编译smali
2021-01-12 18:49:30android安卓app反编译apk反编译教程.zip -
安卓反编译系列教程合集
2019-03-13 16:20:18安卓反编译系列教程合集讲得超级详细,教程用到的工具都打包在压缩包里了(我是搬运工) -
安卓系统源码编译系列(2)——安卓系统源码编译教程
2015-02-15 10:34:51安卓系统源码编译系列(二)——安卓系统源码编译教程 折腾了两天终于完成了安卓系统源码的下载,虽然说中间遇到了不少波折,但总算顺利完成,有兴趣的朋友可以参考我的上一篇博文《安卓系统源码编译系列(一)...安卓系统源码编译系列(二)——安卓系统源码编译教程
折腾了两天终于完成了安卓系统源码的下载,虽然说中间遇到了不少波折,但总算顺利完成,有兴趣的朋友可以参考我的上一篇博文《安卓系统源码编译系列(一)——下载安卓系统源码教程》。完成了源码下载之后,本人又马不停蹄的开始了源码编译的旅途,抱着与上篇文章同样的目的,写下这篇博文,那就是希望大家可以通过本人的教程一次性完成安卓系统源码的编译!
同时,也欢迎大家将编译过程中遇到的问题及解决方案告诉我,一起完善本教程。
编译前的准备
由于在上一篇博文中我们已经对编译环境做了一些配置,如安装jdk、git、python等,所以这里就不再重复。
首先,如果是按照我上一篇博文配置jdk环境的朋友,可以再执行以下命令增加几个映射,避免出现找不到命令的情况:
cd /usr/bin ln -s -f /usr/local/java/jdk1.6.0_31/bin/javah ln -s -f /usr/local/java/jdk1.6.0_31/bin/jar ln -s -f /usr/local/java/jdk1.6.0_31/bin/javadoc
其次,因为Ubuntu12.04自带的gcc和g++是4.6版本的,我们需要安装4.4版本的gcc和g++,避免出现版本兼容性问题,在终端依次输入以下命令:
sudo apt-get install gcc-4.4 sudo apt-get install g++-4.4 cd /usr/bin sudo mv gcc gcc.bak sudo ln -s gcc-4.4 gcc sudo mv g++ g++.bak sudo ln -s g++-4.4 g++
执行完成可以在终端输入以下命令来检查版本是否正确:gcc -v g++ -v
然后,我们可以进行USB访问的权限配置。个人感觉这是在将编译好的系统放到真机上时使用的,如果仅仅是在模拟器上运行自己编译的系统可以跳过。以下内容是对官方教程的翻译:
在GNU/Linux系统下(特别是Ubuntu系统),默认一般用户是不能直接访问USB设备的。我们需要对系统进行一些配置来允许USB访问。
推荐的做法是以root的身份创建一个文件(路径是/etc/udev/rules.d/51-android.rules),并将以下内容拷贝到里面。其中<username>应该被替换为需要授权通过USB访问手机的用户名称。
# adb protocol on passion (Nexus One) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="<username$amp;>amp;$quot; # fastboot protocol on passion (Nexus One) SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="<username$amp;>amp;$quot; # adb protocol on crespo/crespo4g (Nexus S) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="<username$amp;>amp;$quot; # fastboot protocol on crespo/crespo4g (Nexus S) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="<username$amp;>amp;$quot; # adb protocol on stingray/wingray (Xoom) SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", MODE="0600", OWNER="<username$amp;>amp;$quot; # fastboot protocol on stingray/wingray (Xoom) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="708c", MODE="0600", OWNER="<username$amp;>amp;$quot; # adb protocol on maguro/toro (Galaxy Nexus) SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="<username$amp;>amp;$quot; # fastboot protocol on maguro/toro (Galaxy Nexus) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e30", MODE="0600", OWNER="<username$amp;>amp;$quot; # adb protocol on panda (PandaBoard) SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER="<username$amp;>amp;$quot; # adb protocol on panda (PandaBoard ES) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="d002", MODE="0600", OWNER="<username$amp;>amp;$quot; # fastboot protocol on panda (PandaBoard) SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER="<username$amp;>amp;$quot; # usbboot protocol on panda (PandaBoard) SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d00f", MODE="0600", OWNER="<username$amp;>amp;$quot; # usbboot protocol on panda (PandaBoard ES) SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d010", MODE="0600", OWNER="<username$amp;>amp;$quot; # adb protocol on grouper/tilapia (Nexus 7) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e42", MODE="0600", OWNER="<username$amp;>amp;$quot; # fastboot protocol on grouper/tilapia (Nexus 7) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e40", MODE="0600", OWNER="<username$amp;>amp;$quot; # adb protocol on manta (Nexus 10) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee2", MODE="0600", OWNER="<username$amp;>amp;$quot; # fastboot protocol on manta (Nexus 10) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee0", MODE="0600", OWNER="<username$amp;>amp;$quot;
这些规则将在设备下一次连接到系统的时候生效,因此需要将设备拔掉重新连接。这个方法在Ubuntu Hardy Heron(8.04 x LTS)和Lucid Lynx(10.04 x LTS)系统上有效。其他版本的Ubuntu或者其他的Linux系统可能需要不同的配置。
接下来,我们需要配置编译使用的缓存。以下内容是对官方教程的翻译:
在编译的过程中我们可以让编译器使用编译缓存池Ccache。编译缓存池可以加快二次编译的速度。当你经常使用“make clean”操作或者经常在不同版本之间切换来编译,编译缓存池会给你带来很大的效率提升。
将以下内容放到你的.bashrc(路径:~/.bashrc)或者相同作用的文件中:
export USE_CCACHE=1
缓存默认存储在~/.ccache路径下。如果你的源码存储在网络服务器上,或者其他非本地的文件系统中,你可以在.bashrc文件中设置缓存的目录:export CCACHE_DIR=<path-to-your-cache-directory>
推荐的缓存大小是50-100G,你可以在下载完源码后在源码目录下运行以下命令:prebuilts/misc/linux-x86/ccache/ccache -M 50G
当你需要编译Ice Cream Sandwich(4.0.x)或者更老的安卓系统时,Ccache文件的路径在另一个位置,可以运行以下命令:prebuilt/linux-x86/ccache/ccache -M 50G
这个设置会保存在CCACHE_DIR路径下,并且是永久的。最后,我们可以设置一下swap文件,避免出现“其他问题”中的第四个:
mkdir /opt/other sudo dd if=/dev/zero of=/opt/other/swapfile bs=1024 count=512K mkswap /opt/other/swapfile swapon /opt/other/swapfile swapon -s
除此之外,官网教程中还提到了“使用单独的输出目录”(Using a separate output directory),个人感觉意义不是很大,如果有需要的话可以到官网上查看。
开始编译
在完成了以上配置后,我们就可以开始进行源码编译了。请大家在编译之前再次确认虚拟机的配置,内存最好是2个G以上(本人是用的4个G),硬盘空间100G以上(本人用的是200G,反正VMware硬盘空间是动态增长的,设多点没坏处)。
首先,我们需要在源码根目录运行一个脚本进行初始化:
$ source build/envsetup.sh
然后是选择需要编译的目标,如:$ lunch full-eng
该命令主要由两个参数组成,第一个参数可选的值有full、full_maguro、full_panda,分别代表模拟器、手机和开发板PandaBoard(开发板是一个单片机或者称为开发板,如果不好理解的话你可以将它想象成一个没安外壳的设备,这是专门提供给开发者的开发工具)。第二个参数可选的值有user、userdebug和eng。user版本没有root权限,类似于手机上的操作系统;userdebug版本类似于user版本,但是有root权限,可以用于调试;eng版本主要用于调试,同时带有很多调试工具。在这里,我们选择在模拟器上运行的调试版本,所以使用参数full-eng。
最后,我们需要运行一个命令来开始编译:
make -j4
make之后的参数jN代表编译使用的线程数,与CPU的内核总数有关,正好是CPU内核总数的两倍。如果你的CPU是单核的就应该运行make -j2,当然线程数越多编译的速度越快,所以如果是用虚拟机的话,可以在电脑配置允许的情况下使用尽量多的核数。注意,线程数越高的话需要的内存也越高,如果内存不足编译到一半会出错,所以如果内存比较小的话,虽然时间长一些,但是建议直接使用make。
最后编译成功的截图如下:
运行编译结果
走到这里,我们历尽千难万苦成功下载并编译完成了安卓系统,终于到了最激动人心的时刻了,让我们把编译完成的系统运行起来。
这时只要在源码目录下输入emulator即可,但是直接输入会报错,所以我们先运行两个命令:
source build/envsetup.sh lunch full-eng
最后运行:emulator
就可以看到模拟器运行起来的效果了
总结
从开始编译到编译成功,中间两次出错重新编译,最后一次编译成功花了3个半小时。编译完成源码目录共35G,虚拟机物理文件大小为74G(包括两次快照)。
个人感觉整个下载编译过程还是比较顺利的,如果按照本教程的话,应该一天就可以走完整个流程。
其他问题
1.jar、javadoc或者javah命令找不到
/bin/bash: jar: command not found
make: *** [out/host/common/obj/JAVA_LIBRARIES/antlr-runtime_intermediates/javalib.jar] Error 127/bin/bash: javah: command not found
可以执行以下命令:cd /usr/bin ln -s -f /usr/local/java/jdk1.6.0_31/bin/javah ln -s -f /usr/local/java/jdk1.6.0_31/bin/jar ln -s -f /usr/local/java/jdk1.6.0_31/bin/javadoc
2.
collect2: ld terminated with signal 9 [Killed] make: *** [out/host/linux-x86/obj/EXECUTABLES/clang_intermediates/clang] Error 1 make: *** Waiting for unfinished jobs....
内存不足,建议增加虚拟机内存或者改用“make”进行编译。3.
mon/docs/api-stubs-timestamp] Error 45
执行以下命令:make clean make
4.
target SharedLib: libwebcore (out/target/product/generic/obj/SHARED_LIBRARIES/libwebcore_intermediates/LINKED/libwebcore.so) collect2: error: ld terminated with signal 9 [Killed] make: *** [out/target/product/generic/obj/SHARED_LIBRARIES/libwebcore_intermediates/LINKED/libwebcore.so] Error 1
这是由于没有创建swap文件引起的,可以执行以下命令创建一个:mkdir /opt/other sudo dd if=/dev/zero of=/opt/other/swapfile bs=1024 count=512K mkswap /opt/other/swapfile swapon /opt/other/swapfile swapon -s
如果还是不行的话,可以考虑增加虚拟机内存之后重新编译
之后遇到问题会持续补充。
-
反编译安卓软件教程
2020-10-27 09:36:39反编译安卓软件 虽然把软件的扩展名改为zip就能读取,但是那里面的代码是加密过的,只有安卓手机能读取 如果要读取或是修改就需要反编译了 反编译apk前,你需要安装Java,安装完成后就可以开始反编译了 这里使用...反编译安卓软件
虽然把软件的扩展名改为zip就能读取,但是那里面的代码是加密过的,只有安卓手机能读取
如果要读取或是修改就需要反编译了
反编译apk前,你需要安装Java,安装完成后就可以开始反编译了
这里使用apktool反编译
第一步:安装、配置apktool
下载反编译程序 apktool
然后创建一个txt文档,打开并在里面输入:@echo off setlocal set BASENAME=apktool_ chcp 65001 2>nul >nul set java_exe=java.exe if defined JAVA_HOME ( set java_exe="%JAVA_HOME%\bin\java.exe" ) rem Find the highest version .jar available in the same directory as the script setlocal EnableDelayedExpansion pushd "%~dp0" if exist apktool.jar ( set BASENAME=apktool goto skipversioned ) set max=0 for /f "tokens=1* delims=-_.0" %%A in ('dir /b /a-d %BASENAME%*.jar') do if %%~B gtr !max! set max=%%~nB :skipversioned popd setlocal DisableDelayedExpansion rem Find out if the commandline is a parameterless .jar or directory, for fast unpack/repack if "%~1"=="" goto load if not "%~2"=="" goto load set ATTR=%~a1 if "%ATTR:~0,1%"=="d" ( rem Directory, rebuild set fastCommand=b ) if "%ATTR:~0,1%"=="-" if "%~x1"==".apk" ( rem APK file, unpack set fastCommand=d ) :load %java_exe% -jar -Duser.language=en -Dfile.encoding=UTF8 "%~dp0%BASENAME%%max%.jar" %fastCommand% %* rem Pause when ran non interactively for /f "tokens=2" %%# in ("%cmdcmdline%") do if /i "%%#" equ "/c" pause
(如图)
然后保存退出,退出后再把扩展名改为
apktool.bat
;最后把apktool.bat和apktool_2.4.1.jar给移动至C:\Windows配置就完成了。
第二步:反编译
按下Win+R打开“运行”窗口,输入cmd打开命令提示符,在里面输入代码:apktool d -f <需要反编译的软件目录><目录里的软件名称> -o <编译后放入的目录>
开始发编译
实践:
需要编译的软件名:动态壁纸.apk
输入命令:apktool d -f c:\1\动态壁纸.apk -o c:\2
那么编译好的文件就会出现在c:\2里,而c:\1里的还是源文件
编译成功后的代码:
反编译完成后可以得到这些文件夹
(每个软件反编译后的文件夹基本都不一样,但是一定会有res文件夹和AndroidManifes.xml文件)
反编译后的文件也可以查看了第三步:打包
输入apktool b <编译后的文件夹>
,按下enter后自动开始打包
实践:
打包:动态壁纸(文件夹)
apktool b c:\2
“c:\2”指的是反编译后得到的文件夹
打包完成时出现的代码
打包后的文件在c:\2\build\apk
如图:
但是由于程序的Bugs,像assets之类的文件夹不会出现在c:\2\build\apk里,需要手动移至进文件夹;然后把这些给压缩为zip(先不要急着把扩展名改成apk)
第四步:签名
1、首先下载Auto-Sign,然后解压至任意文件夹即可(解压后的样子如图);2、把打包好的文件夹放入目录里(如图)
3、输入
java -jar signapk.jar testkey.x509.pem testkey.pk8 <需要签名的文件> <签名好的文件名>
开始编译
实践:
还是以动态壁纸为例,把刚刚打包好的zip放入文件夹里
然后输入java -jar signapk.jar testkey.x509.pem testkey.pk8 动态壁纸 动态壁纸_已签名
开始编译
最后只需要把扩展名改为apk就可以正常安装至你的手机了如果你任然不会反编译,那么你可以尝试一下这个
安卓逆向助手
下载后使用也简单,自带反编译、打包、签名 -
安卓Android反编译教程
2019-08-21 09:37:181、自行下载反编译并解压得到以下文件并解压 apktool——可以反编译软件的布局文件、图片等资源,方便大家学习一些很好的布局; https://bitbucket.org/iBotPeaches/apktool/downloads/ dex2jar——将apk反编译成...1、自行下载反编译并解压得到以下文件并解压
apktool——可以反编译软件的布局文件、图片等资源,方便大家学习一些很好的布局;
https://bitbucket.org/iBotPeaches/apktool/downloads/
dex2jar——将apk反编译成java源码(classes.dex转化成jar文件);
http://sourceforge.net/projects/dex2jar/files/
jd-gui——查看APK中classes.dex转化成出的jar文件,即源码文件。http://jd.benow.ca/
2、使用apktool
进入cmd命令,进入反编译文件夹下
输入 java -jar apktool_2.3.4.jar d -f D:\最新版反编译\mobile43.apk -o XML
生成文件
所需查看文件位置
想查看哪个xml文件就使用文本编辑器打开看看吧,反正全部都可以看到了。以上就是使用apktool这个工具将一个apk反编译得到图片、XML配置、语言资源等文件的过程。2、使用dex2jar反编译apk得到Java源代码
将要反编译的APK后缀名改为.rar或者 .zip,并解压,得到其中的classes.dex文件(它就是java文件编译再通过dx工具打包而成的)
进入D:\最新版反编译\dex2jar-2.0目录,命令行输入"d2j-dex2jar classes.dex"
打开jd-gui
JD-GUI虽然可以将class反编译成java源代码,但是对于一些被混淆过的class,反编译的效果就不是那么理想了,被混淆过的class类文件名称以及里面的方法名称都会以a,b,c…之类的样式命名
注意:APK文件不能包含特殊符号,如:jishuanji(1).apk 反编译过程中()会报错。 -
安卓系统源码编译系列(二)——安卓系统源码编译教程
2013-10-13 22:39:00折腾了两天终于完成了安卓系统源码的下载,虽然说中间遇到了不少波折,但总算顺利完成,有兴趣的朋友可以参考我的上一篇博文《安卓系统源码编译系列(一)——下载安卓系统源码教程》。完成了源码下载之后,本人又...折腾了两天终于完成了安卓系统源码的下载,虽然说中间遇到了不少波折,但总算顺利完成,有兴趣的朋友可以参考我的上一篇博文《安卓系统源码编译系列(一)——下载安卓系统源码教程》。完成了源码下载之后,本人又马不停蹄的开始了源码编译的旅途,抱着与上篇文章同样的目的,写下这篇博文,那就是希望大家可以通过本人的教程一次性完成安卓系统源码的编译!
同时,也欢迎大家将编译过程中遇到的问题及解决方案告诉我,一起完善本教程。
编译前的准备
由于在上一篇博文中我们已经对编译环境做了一些配置,如安装jdk、git、python等,所以这里就不再重复。首先,如果是按照我上一篇博文配置jdk环境的朋友,可以再执行以下命令增加几个映射,避免出现找不到命令的情况:cd /usr/bin ln -s -f /usr/local/java/jdk1.6.0_31/bin/javah ln -s -f /usr/local/java/jdk1.6.0_31/bin/jar ln -s -f /usr/local/java/jdk1.6.0_31/bin/javadoc
其次,因为Ubuntu12.04自带的gcc和g++是4.6版本的,我们需要安装4.4版本的gcc和g++,避免出现版本兼容性问题,在终端依次输入以下命令:
执行完成可以在终端输入以下命令来检查版本是否正确:sudo apt-get install gcc-4.4 sudo apt-get install g++-4.4 cd /usr/bin sudo mv gcc gcc.bak sudo ln -s gcc-4.4 gcc sudo mv g++ g++.bak sudo ln -s g++-4.4 g++
gcc -v g++ -v
然后,我们可以进行USB访问的权限配置。个人感觉这是在将编译好的系统放到真机上时使用的,如果仅仅是在模拟器上运行自己编译的系统可以跳过。以下内容是对官方教程的翻译:在GNU/Linux系统下(特别是Ubuntu系统),默认一般用户是不能直接访问USB设备的。我们需要对系统进行一些配置来允许USB访问。推荐的做法是以root的身份创建一个文件(路径是/etc/udev/rules.d/51-android.rules),并将以下内容拷贝到里面。其中<username>应该被替换为需要授权通过USB访问手机的用户名称。
这些规则将在设备下一次连接到系统的时候生效,因此需要将设备拔掉重新连接。# adb protocol on passion (Nexus One) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="<username>" # fastboot protocol on passion (Nexus One) SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="<username>" # adb protocol on crespo/crespo4g (Nexus S) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="<username>" # fastboot protocol on crespo/crespo4g (Nexus S) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="<username>" # adb protocol on stingray/wingray (Xoom) SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", MODE="0600", OWNER="<username>" # fastboot protocol on stingray/wingray (Xoom) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="708c", MODE="0600", OWNER="<username>" # adb protocol on maguro/toro (Galaxy Nexus) SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="<username>" # fastboot protocol on maguro/toro (Galaxy Nexus) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e30", MODE="0600", OWNER="<username>" # adb protocol on panda (PandaBoard) SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER="<username>" # adb protocol on panda (PandaBoard ES) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="d002", MODE="0600", OWNER="<username>" # fastboot protocol on panda (PandaBoard) SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER="<username>" # usbboot protocol on panda (PandaBoard) SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d00f", MODE="0600", OWNER="<username>" # usbboot protocol on panda (PandaBoard ES) SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d010", MODE="0600", OWNER="<username>" # adb protocol on grouper/tilapia (Nexus 7) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e42", MODE="0600", OWNER="<username>" # fastboot protocol on grouper/tilapia (Nexus 7) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e40", MODE="0600", OWNER="<username>" # adb protocol on manta (Nexus 10) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee2", MODE="0600", OWNER="<username>" # fastboot protocol on manta (Nexus 10) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee0", MODE="0600", OWNER="<username>"
这个方法在Ubuntu Hardy Heron(8.04 x LTS)和Lucid Lynx(10.04 x LTS)系统上有效。其他版本的Ubuntu或者其他的Linux系统可能需要不同的配置。接下来,我们需要配置编译使用的缓存。以下内容是对官方教程的翻译:在编译的过程中我们可以让编译器使用编译缓存池Ccache。编译缓存池可以加快二次编译的速度。当你经常使用“make clean”操作或者经常在不同版本之间切换来编译,编译缓存池会给你带来很大的效率提升。将以下内容放到你的.bashrc(路径:~/.bashrc)或者相同作用的文件中:
缓存默认存储在~/.ccache路径下。如果你的源码存储在网络服务器上,或者其他非本地的文件系统中,你可以在.bashrc文件中设置缓存的目录:export USE_CCACHE=1
推荐的缓存大小是50-100G,你可以在下载完源码后在源码目录下运行以下命令:export CCACHE_DIR=<path-to-your-cache-directory>
当你需要编译Ice Cream Sandwich(4.0.x)或者更老的安卓系统时,Ccache文件的路径在另一个位置,可以运行以下命令:prebuilts/misc/linux-x86/ccache/ccache -M 50G
这个设置会保存在CCACHE_DIR路径下,并且是永久的。prebuilt/linux-x86/ccache/ccache -M 50G
最后,我们可以设置一下swap文件,避免出现“其他问题”中的第四个:mkdir /opt/other sudo dd if=/dev/zero of=/opt/other/swapfile bs=1024 count=512K mkswap /opt/other/swapfile swapon /opt/other/swapfile swapon -s
除此之外,官网教程中还提到了“使用单独的输出目录”(Using a separate output directory),个人感觉意义不是很大,如果有需要的话可以到官网上查看。开始编译
在完成了以上配置后,我们就可以开始进行源码编译了。请大家在编译之前再次确认虚拟机的配置,内存最好是2个G以上(本人是用的4个G),硬盘空间100G以上(本人用的是200G,反正VMware硬盘空间是动态增长的,设多点没坏处)。首先,我们需要在源码根目录运行一个脚本进行初始化:
然后是选择需要编译的目标,如:$ source build/envsetup.sh
该命令主要由两个参数组成,第一个参数可选的值有full、full_maguro、full_panda,分别代表模拟器、手机和开发板PandaBoard(开发板是一个单片机或者称为开发板,如果不好理解的话你可以将它想象成一个没安外壳的设备,这是专门提供给开发者的开发工具)。第二个参数可选的值有user、userdebug和eng。user版本没有root权限,类似于手机上的操作系统;userdebug版本类似于user版本,但是有root权限,可以用于调试;eng版本主要用于调试,同时带有很多调试工具。$ lunch full-eng
在这里,我们选择在模拟器上运行的调试版本,所以使用参数full-eng。最后,我们需要运行一个命令来开始编译:
make之后的参数jN代表编译使用的线程数,与CPU的内核总数有关,正好是CPU内核总数的两倍。如果你的CPU是单核的就应该运行make -j2,当然线程数越多编译的速度越快,所以如果是用虚拟机的话,可以在电脑配置允许的情况下使用尽量多的核数。make -j4
注意,线程数越高的话需要的内存也越高,如果内存不足编译到一半会出错,所以如果内存比较小的话,虽然时间长一些,但是建议直接使用make。最后编译成功的截图如下:运行编译结果
走到这里,我们历尽千难万苦成功下载并编译完成了安卓系统,终于到了最激动人心的时刻了,让我们把编译完成的系统运行起来。这时只要在源码目录下输入emulator即可,但是直接输入会报错,所以我们先运行两个命令:
最后运行:source build/envsetup.sh lunch full-eng
emulator
就可以看到模拟器运行起来的效果了
总结
从开始编译到编译成功,中间两次出错重新编译,最后一次编译成功花了3个半小时。编译完成源码目录共35G,虚拟机物理文件大小为74G(包括两次快照)。个人感觉整个下载编译过程还是比较顺利的,如果按照本教程的话,应该一天就可以走完整个流程。其他问题
1.jar、javadoc或者javah命令找不到/bin/bash: jar: command not found
make: *** [out/host/common/obj/JAVA_LIBRARIES/antlr-runtime_intermediates/javalib.jar] Error 127 或者
可以执行以下命令:/bin/bash: javah: command not found
cd /usr/bin ln -s -f /usr/local/java/jdk1.6.0_31/bin/javah ln -s -f /usr/local/java/jdk1.6.0_31/bin/jar ln -s -f /usr/local/java/jdk1.6.0_31/bin/javadoc
2.
内存不足,建议增加虚拟机内存或者改用“make”进行编译。collect2: ld terminated with signal 9 [Killed] make: *** [out/host/linux-x86/obj/EXECUTABLES/clang_intermediates/clang] Error 1 make: *** Waiting for unfinished jobs....
3.
执行以下命令:mon/docs/api-stubs-timestamp] Error 45
make clean make
4.
这是由于没有创建swap文件引起的,可以执行以下命令创建一个:target SharedLib: libwebcore (out/target/product/generic/obj/SHARED_LIBRARIES/libwebcore_intermediates/LINKED/libwebcore.so) collect2: error: ld terminated with signal 9 [Killed] make: *** [out/target/product/generic/obj/SHARED_LIBRARIES/libwebcore_intermediates/LINKED/libwebcore.so] Error 1
mkdir /opt/other sudo dd if=/dev/zero of=/opt/other/swapfile bs=1024 count=512K mkswap /opt/other/swapfile swapon /opt/other/swapfile swapon -s
如果还是不行的话,可以考虑增加虚拟机内存之后重新编译
之后遇到问题会持续补充。
如果大家觉得对自己有帮助的话,还希望能帮顶一下,谢谢:)转载请注明出处,谢谢! -
安卓 apk反编译教程
2015-09-14 14:40:23发扬 开源精神,废话不多说,下面为大家带来详细教程。 一,首先准备工具: 我已经为大家收集了工具,上传在我的github上 下载地址:https://github.com/modulemax/apk-decompile-tools/ 另附一个我自己写的app... -
抖音反编译:android反编译之最新版本抖音(v7.7.0)安卓版反编译教程
2019-08-22 12:01:44安卓反编译,我们用到的工具有两个 dex2jar 将dex文件转为jar文件 jd-gui 用于查看jar文件源代码,支持引用之间的跳转 2.获取抖音dex文件 2.1.获取最新版本抖音apk 下载到了抖音apk文件 aweme_aweGW_v7.7.0_c2b0c... -
安卓反编译工具及教程(linux版)apktool
2018-11-11 21:06:01安卓反编译工具及教程(linux版)apktool for apk to get data -
安卓反编译全套工具+教程
2018-01-09 11:08:33Android反编译查看资源文件及源码 在Android学习与开发的路上,我们总会遇到一些好看的界面与设计,就像旅途中遇到美丽的风景想拍下来,而作为开发者你想看看别人的界面是怎么做的,这时候反编译就排上用场了。 ... -
安卓编译与开发、Linux内核及驱动
2015-08-17 17:42:48安卓编译与开发、Linux内核及驱动视频教程,该课程内容包括一、源码编译:1、常见的ROM种类、谷歌的ROM、第三方的ROM2、区别3、RockChip的ROM、4、编译环境配置、源码下载、编译命令;二、源码开发:源码结构分析、... -
edtext 从右边开始输入 安卓_教程2:在安卓设备上开发安卓应用——编译与安装...
2021-01-03 18:06:00安卓开发系列教程创建工程上篇教程介绍了能让我们在安卓设备上进行安卓开发的app:AIDE,相信大家已经顺利安装完成,打开之后,界面如下:首次启动AIDE后的界面点击最下面一栏:For Experts,进入项目类型选择界面。... -
android安卓app教程之反编译App,修改资源文件后,重新打包生成新的APK.zip
2021-01-12 22:05:46android安卓app教程之反编译App,修改资源文件后,重新打包生成新的APK.zip -
安卓系统源码编译系列(1)——下载安卓系统源码教程
2015-02-15 10:33:50安卓系统源码编译系列(一)——下载安卓系统源码教程 最近需要编译安卓系统,咨询了一个编译过安卓系统的朋友,说是下载源码就得下载两天,于是做好了长期抗战的准备,开始了下载安卓源码的旅程。在刚开始下载... -
安卓系统源码编译系列(一)——下载安卓系统源码教程
2013-10-12 23:36:28最近需要编译安卓系统,咨询了一个编译过安卓系统的朋友,说是下载源码就得下载两天,于是做好了长期抗战的准备,开始了下载安卓源码的旅程。在刚开始下载时,可以参照的内容只有官方教程,于是跟着官方教程一步一步... -
Android安卓逆向教程
2019-05-08 10:28:04Android安卓逆向教程 1.java逆向基础 2.arm native逆向 3.系统编译 4.应用脱壳 5.初步编程保护 6.HOOK插件开发 -
《暗黑世界》安卓APK 编译流程详细说明教程
2019-10-03 13:41:49关于开发环境的搭建,之前的相关文档已经很详细的说明,对环境的搭建请参考以前的相关文档,如有问题,及时在论坛(http://www.9miao.comm)里提问,会有管理人员快速解答,此文档主要针对eclipse下安卓编译. 首先肯定是... -
永利红色版棋牌系统安卓端苹果端服务器端等编译教程
2019-01-17 22:29:32但是,全源码的情况下搭建就不那么简单了,要进行环境的搭建,服务器端的编译,手机安卓端的编译,手机苹果端的编译,管理后台、网站前台、代理后台、api接口的编译。这些中间也会有很多坑。 先看图一,大概的目录.... -
安卓逆向教程
2018-10-12 17:57:151、负责安卓程序的加解密和数据传输分析、拆解、逆向等工作; 2 、逆向APK,了解运行过程; 3 、Andorid本地提权获得root权限; 4 、熟练掌握软件逆向静态分析、动态调试、代码跟踪等; 5 、熟悉Android开发,了解打包... -
最新最全网络首发安卓4.0源码及内核下载编译教程(图文详解)
2011-12-20 09:45:14最新最全网络首发安卓4.0源码及内核下载编译教程(图文详解) {本教程由TD屋(WWW.TDWU.NET )提供} QQ群:183940436日期:2011-12-19 作者:TD-龙王 □未测试 ■已测试 简介:安卓4.0×××及编译,内核下载及... -
安卓反编译揭秘-爱加密系列教程二)
2013-11-01 10:15:10本文转自博客园:爱加密——安卓反编译揭秘(爱加密系列教程二) 【仅供参考】 apk反编译生成程序的源代码和图片、XML配置、语言资源等文件 Android应用的UI越来越漂亮,遇到喜欢的我们可以通过反编译,得到... -
APK 安卓反编译
2017-12-27 18:22:52在学习Android开发的过程你...下面是我参考了一些文章后简单的教程详解。(注:反编译不是让各位开发者去对一个应用破解搞重装什么的,主要目的是为了促进开发者学习,借鉴好的代码,提升自我开发水平。)测试环境: -
安卓系统源码编译系列(六)——单独编译内置浏览器WebView教程
2014-01-30 15:06:44本文主要对从安卓系统源码中抽取出WebView相关源码进行单独编译的流程进行说明。 -
zhu的工作日记:安卓反编译工具使用教程(android)
2016-06-19 09:00:08(android反编译工具使用教程) Android的反编译文章已经多到不要不要的,这里我就不再多说了,我这里要介绍一个更简单方便的工具:Android逆向助手,超愉快的使用过程,两步搞定,给你飞一般的感觉.........省略... -
安卓apk 反编译为 Java源码图文教程
2018-08-02 17:33:19近来在模仿写一个app,可惜只有apk,没找到源码,只好进行反编译,特记录于此,供人参考。 测试环境:win10 64位 工具: apktool(链接:https://pan.baidu.com/s/1AChm3bl6yyBJfHp4qEow6A 密码:tyol) 作用:... -
CyanogenMod12编译教程
2015-04-15 15:02:00同时提供基于安卓5.0的MKL魔趣猪扒饭编译教程~ 【玩机组出品】魔趣猪扒饭MKL50.1编译教程 http://www.oneplusbbs.com/forum.php?mod=viewthread&tid=578692 (出处: 一加社区, 一加论坛, 一加手机, 一加手机... -
android学习教程 第二期:安卓的编译方式
2015-11-03 16:33:35这一期呢主要讲的就是安卓开发前的一些环境搭建,首先是有一台Ubuntu的pc机,然后是相关命令的安装,及源码的下载编译,和源码目录的介绍 [size=10.5000pt]一、Ubuntu的安装 Ubuntu的安装其实就是一个系统的...
-
linux c 进程间通信 共享内存的操作 源代码
-
Flink常用算子总结
-
FPGA抖动简介
-
华为1+X——网络系统建设与运维(中级)
-
LeetCode刷题(21. 合并两个有序链表)
-
C++模板函数和lambda表达式的使用
-
店铺无忧管理系统.V5版本的案例数据库
-
Linux 串口源代码(纯C++)
-
基于对偶四元数的姿轨耦合动力学模型1.md
-
linux c 通过http 协议 ,上传文件到服务器 源码
-
基于FPGA的verilog语言的四位全加器
-
简历十大撒打算.docx
-
Elastic命令实战
-
Mycat 实现 MySQL的分库分表、读写分离、主从切换
-
PPT大神之路高清教程
-
linux c can总线通信 源代码
-
MySQL 多实例安装 及配置主从复制实验环境
-
vue3从0到1-超详细
-
《C Primer Plus》第十一章 - 字符串和字符串函数(字符串与指针,字符串函数,命令行参数,字符串转数字)
-
数据库面试题【十四、主键使用自增ID还是UUID】