当前位置:首页 » 编程软件 » 安卓源码编译apk

安卓源码编译apk

发布时间: 2023-05-01 17:01:19

⑴ 怎么进行android源码编译

eclipse下编译android代码的流程亏携如下:
1.点击袭空慧拍答android工程,点击run

2.弹出窗口,选择运行设备,如下图,点击run就可以编译,运行

⑵ 安卓studio解包修改重编译一个apk

1.查看APKTool的版本: 控制台输入apktool和apktool -version进行验证

2.反编缺渗译apk并修改代码:

在apk所在目录控制台输入下面指令,即可将文件名为source的apk反编译到outDir目录中

apktool d -o outDir source.apk

3.修改编译出的代码,可以更改res资弯扮备源,manifests等。如果修改版本号:打开输入目录outDir找到apktool.yml文件,编辑修改versionCode

4.重新打包 :

通过以下命令就可以将目录outDir中的文件重新打包为no_sign_result.apk

apktool b -o no_sign_result.apk outDir

5.重新签名:

使用如下命令进行签名

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore demostore.jks -signedjar result-signed.apk no_sign_result.apk yourkey

注:demostore.jks为签名文件、yourkey为签名的key、no_sign_result.apk为要埋毁签名的源文件、result-signed.apk为签名后的目标文件

⑶ Android源码环境编译出来的apk 怎么安装到手机上去

如果手机上已经有包名一样的apk是安装不上去的吧,如果可以用adb remount 再push到system/app替换原来的launcher试试

⑷ 如何用Android 源码生成APK签名文件

我们很多应用需要用到系统签名,可以通过生成系统签名文件,在生成apk时使用这个签名,然后可以安装到机器中,不需要放在源码里编译,重新刷系统。

先附上 50和 20机器人通用的debugkey(图已经省略)

linux环境中,以Android源码目录为根目录。

其中的platform.pk8是制作系统签名需要的文件。

1、在这个目录下,执行

生成临时文件platform.pem

2、接着执行以下命令,将在目录下生成platform.p12文件,它本质上应该就是一个数字证书

3、然后再执行以下命令出现以下信息,表示成功生成platform.jks

这个名字可以改成debug.keystore. 它的后缀本身是没有关系,eclipse和AS都识别 platform.jks

4、然后在打包 apk 的时候选择platform.jks文件,就可以直接用adb命令安装apk到机器中了。

xxxx表示需要安装的apk路径
5、签名的 Key store password和Key password都是android

⑸ 自己可以编译安卓源码吗

用最新的Ubuntu 16.04,请首先确保自己已经安装了Git.没安装的同学可以通过以下命令进行安装:

sudo apt-get install git git config –global user.email “[email protected]” git config –global user.name “test”

其中[email protected]为你自己的邮箱.

简要说明

android源码编译的四个流程:1.源码下载;2.构建编译环境;3.编译源码;4运行.下文也将按照该流程讲述.

源码下载

由于某墙的原因,这里我们采用国内的镜像源进行下载.
目前,可用的镜像源一般是科大和清华的,具体使用差不多,这里我选择清华大学镜像进行说明.(参考:科大源,清华源)

repo工具下载及安装

通过执行以下命令实现repo工具的下载和安装

mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo

补充说明
这里,我来简单的介绍下repo工具,我们知道AOSP项目由不同的子项目组成,为了方便进行管理,Google采用Git对AOSP项目进行多仓库管理.在聊repo工具之前,我先带你来聊聊多仓库项目:

我们有个非常庞大的项目Pre,该项目由很多个子项目R1,R2,...Rn等组成,为了方便管理和协同开发,我们为每个子项目创立自己的仓库,整个项目的结构如下:


这里写图片描述

执行完该命令后,再使用make命令继续编译.某些情况下,当你执行jack-admin kill-server时可能提示你命令不存在,此时去你去out/host/linux-x86/bin/目录下会发现不存在jack-admin文件.如果我是你,我就会重新repo sync下,然后从头来过.

错误三:使用emulator时,虚拟机停在黑屏界面,点击无任何响应.此时,可能是kerner内核问题,解决方法如下:
执行如下命令:

  • ./out/host/linux-x86/bin/emulator -partition-size 1024 -kernel ./prebuilts/qemu-kernel/arm/kernel-qemu-armv7

  • 通过使用kernel-qemu-armv7内核 解决模拟器等待黑屏问题.而-partition-size 1024 则是解决警告: system partion siez adjusted to match image file (163 MB >66 MB)

    如果你一开始编译的版本是aosp_arm-eng,使用上述命令仍然不能解决等待黑屏问题时,不妨编译aosp_arm64-eng试试.

    结束吧

    到现在为止,你已经了解了整个android编译的流程.除此之外,我也简单的说明android源码的多仓库管理机制.下面,不妨自己动手尝试一下.

    ⑹ Android 将 apk 反编译为源码

    将 apk 解压,在解压后的文件夹中可以找到 classes.dex 文件。(除了 classes.dex 文件,可能还会有 classes2.dex , classes3.dex 等等,本文以 classes.dex 为例,对其他几个 dex 文件的操作是类似的)

    使用 dex2jar 工具,将 dex 文件转换为 jar 文件

    使用方式:

    执行命令后,生成的 classes-dex2jar.jar 就是我们需要的 jar 文件。

    使用 Luyten 工具查看 jar 文件,就能看到反编译后的源码了。

    本例中, classes.dex 文件中存储的是 android 的一些基础库,实际编写的源码在 classes3.dex 中,对 classes3.dex 执行第二步,查看生成的 classes3-dex2jar.jar 文件,可以看到如下内容:

    这就是反编译 apk 的基本操作了。

    Cmder 是一个非常好用的命令行工具。

    效果如下:

    只需要执行 apk2jar 命令,就可以实现把 apk 解压到 apk_ 文件夹中,并将 apk_ 文件夹中的 classes.dex 文件转换为 jar 。原理就是通过 Cmder 添加别名,把上述的第一步和第二步中执行的命令行组合起来了。

    为 Cmder 添加别名很简单,编辑 Cmder安装目录\config\user_aliases.cmd 文件,将别名添加到里面即可。本例添加的别名如下:

    其中:

    ⑺ Android APK编译流程

    apk 是Android Package的简写, 在平时的开发过程中,通过点击 Run app 按钮 或者 在命令行中输入

    这样Android Studio就会启动构建流程,最终输出一个我们想要的APK。

    直达官网介绍

    对于小白来说,上面一张图已经可以解释apk的构建过程了,不过对于Andoid开发者而言还需要了解一些更详细的构建过程。

    详细的对应步骤 和 使用工具如下:

    资源文件(res文件夹下的文件)通过 AAPT(Android Asset Packaging Tool)打包生成R.java类(资源索引表)、.arsc资源文件 和res文件。

    resources.arsc 是一个App的资源索引表,通过R.java 文件 和 resources.arsc 可以定位到资源的内存地址,resources.arsc文件的作用是通过一样的ID,根据不同的配置索引到最佳的资源显示在UI中。

    AIDL (Android Interface Definition Language), 是Android接口定义语言,是Android提供的IPC (Inter Process Communication,进程间通信)的一种独特实现。
    如果有aidl文件,这个阶段会生成对应的Java接口文件。

    R.java文件、工程源码文件、aidl.java文件, 在这一步通过javac生成.class文件。

    源码.class文件和第三方jar或者library通过dx工具打包成dex文件

    Android系统的Dalvik虚拟机的可执行文件为DEX格式,所以这里会将上一步中生成的.class文件 和 引用的第三方jar等过程中的.class 一起通过dx工具打包成dex文件

    apkbuilder工具会将所有没有编译的资源、.arsc资源、.dex文件打包到一个完成apk文件中

    tips:

    apksigner工具会对未签名的apk验证签名。得到一个签名后的apk(signed.apk)

    apksigner 是google 退出的V2签名方式
    Jarsigner 是之前一直使用的V1签名方式

    可以通过在命令行中输入apksigner --help来获取详情信息,如果没有特殊需求,使用下面命令即可完成签名

    release mode 下使用 aipalign进行align,即对签名后的apk进行对齐处理

    所谓对齐,主要过程是将APK包中所有的资源文件距离文件起始偏移为4字节整数倍,这样通过内存映射访问apk文件时的速度会更快。对齐的作用主要是为了减少运行时内存的使用。

    zipalign是一个android平台上整理APK文件的工具,它对apk中未压缩的数据进行4字节对齐,对齐后就可以使用mmap函数读取文件,可以像读取内存一样对普通文件进行操作。如果没有4字节对齐,就必须显式的读取,这样比较缓慢并且会耗费额外的内存。

    参考文章:
    Android-Studio配置构建
    浅谈Android打包流程
    apk打包流程

    END!

    ⑻ 网上下的APP源码,问问大佬怎么变成APK格式

    到网上搜索下安卓开发环境搭建,用eclipse打开这个文件夹运行编译就可以了。

    ⑼ 如何给安卓应用编译

    把常用的应用程序编译到img文件中,就成了系统的一部分,用户不必自己安装,当然也卸载不了;
    同时也可以删减系统自带的应用程序,精简系统;

    1.\build\target\proct 目录下generic.mk文件:
    Java代码 收藏代码
    PRODUCT_PACKAGES := \
    AccountAndSyncSettings \
    DeskClock \
    AlarmProvider \
    Bluetooth \
    Calculator \
    Calendar \
    Camera \
    testMid \
    CertInstaller \
    DrmProvider \
    Email \
    Gallery3D \
    LatinIME \
    Launcher2 \
    Mms \
    Music \

    我们添加一个testMid \ 应用名称。
    2.把testMid包放入
    \packages\apps 目录下,修改android.mk文件。

    Java代码 收藏代码
    LOCAL_PATH:= $(call my-dir)
    include $(CLEAR_VARS)
    LOCAL_MODULE_TAGS := optional
    LOCAL_SRC_FILES := $(call all-subdir-java-files)
    LOCAL_PACKAGE_NAME := testMid
    LOCAL_CERTIFICATE := platform

    include $(BUILD_PACKAGE)

    注:LOCAL_PACKAGE_NAME := testMid (包名必须和generic.mk中添加的相同)
    编译源码,可以看到在
    \out\target\proct\smdkv210\system\app
    目录下生存了testMid.apk了。这时system.img也包含了此应用。
    -------------------------------------------------------------------
    特殊情况:有时,应用需要包含jar包,这时的app导入源码时会出现问题:
    MODULE.TARGET.JAVA_LIBRARIES.libarity already defined by ... stop

    由于 LOCAL_STATIC_JAVA_LIBRARIES := libarity 会引发错误信息。
    目前解决方法是:
    \build\core 目录下修改base_rules.mk
    注释掉错误信息:

    ifdef $(mole_id)
    #$(error $(LOCAL_PATH): $(mole_id) already defined by $($(mole_id)))
    endif
    $(mole_id) := $(LOCAL_PATH)

    --重新编译,这时可以通过了。

    (2)、删除原厂(Telchips)带源码的应用程序,如DTV_DVBT
    在/device/telechips/m801/device.mk
    注释掉相应语句:
    # PRODUCT_PACKAGES += \
    # SampleDVBTPlayer \
    同时,在/out/target/proct/m801/system/app 找到相应的.APK包,并删除

    ⑽ 如何实现APK的反编译得到APK的源码

    最新的反编译不用此方法, 有最新的一键自动反编译工具:

    这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程。

    在此郑重声明,贴出来的目的不是为了去破解人家的软件,完全是一种学习的态度,不过好像通过这种方式也可以去汉化一些外国软件。

    注:本Android反编译教程,在Windows7-Ultimate-64bit操作系统上,测试通过!

    下述所需的反编译工具包 下载

    一、反编译Apk得到Java源代码
    首先要下载两个工具:dex2jar和JD-GUI

    前者dex2jar是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码。以下是下载地址:

    dex2jar:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip

    JD-GUI:http://laichao.googlecode.com/files/jdgui.zip

    具体步骤:

    首先将apk文件,将后缀改为zip,解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的;

    解压下载的dex2jar,将classes.dex复制到dex2jar.bat所在目录。在命令行下定位到dex2jar.bat所在目录(在DOS命令下CD 目录)

    运行

    dex2jar.bat classes.dex

    生成

    classes.dex.dex2jar.jar

    生成jar文件的截图如下:

    运行JD-GUI(jd-gui.exe),打开上面生成的jar包,即可看到源代码了

    HelloAndroid源码(编译前的apk源码对照)如下:

    二、反编译apk生成程序的源代码和图片、XML配置、语言资源等文件

    如果是汉化软件,这将特别有用。首先还是下载工具,这次用到的是apktool

    下载地址:http://code.google.com/p/android-apktool/downloads/list

    下载:apktool1.4.1.tar.bz2 和 apktool-install-windows-r04-brut1.tar.bz2(两个包都下载)

    具体步骤:

    将下载的两个包解压到同一个文件夹下,应该会有三个文件:aapt.exe,apktool.bat,apktool.jar

    在命令行下定位到apktool.bat文件夹,输入以下命令:apktool d C:\*.apk C:\*文件夹,如下图:

    命令行解释:apktool d [apk文件 ] [输出文件夹]

    反编译的文件如下(AndroidManifest.xml为例):

    特别注意:你要反编译的文件一定要放在C盘的根目录里(其实不用放在C盘根目录也行)

    例如:在D盘目录D:\apktool1.4.1

    cd /d D:\apktool1.4.1 //切换到D盘目录,包含HelloAndroid.apk以及aapt.exe,apktool.bat,apktool.jar三个文件

    apktool.bat d -f HelloAndroid.apk HelloAndroid // apktool反编译命令,注意 d和
    -f 的写法

    将反编译完的文件重新打包成apk,很简单,输入apktool b c:\***文件夹(你编译出来文件夹)即可,命令如下:这个主意你文件所在盘

    打包apk后的文件在目录C:\HelloAndroid下,生成了两个文件夹:

    build

    dist

    其中,打包生成的HelloAndroid.apk,在上面的dist文件夹下,Ok

    最后,再介绍一款刚出来的反编译工具 Androidfby ,它是一款对上述步骤进行了封装的图形界面工具,下载地址

    但是,针对部分签名的apk,无法实现反编译,但本博客方法则仍然可以反编译成功!仅供参考使用

    另外,作为应用开发者,肯定不希望自己的代码被反编译的,下一遍博客将讲述如何通过混淆代码防止被别人反编译

    Android如何防止apk程序被反编译

    作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来。

    Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了一个proguard文件夹

    proguard是一个java代码混淆的工具,通过proguard,别人即使反编译你的apk包,也只会看到一些让人很难看懂的代码,从而达到保护代码的作用。

    下面具体说一说怎么样让SDK2.3下的proguard.cfg文件起作用,先来看看android-sdk-windows\tools\lib\proguard.cfg的内容:

    [html] view
    plainprint?

    1. -optimizationpasses 5

    2. -dontusemixedcaseclassnames

    3. -

    4. -dontpreverify

    5. -verbose

    6. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

    7.

    8. -keep public class * extends android.app.Activity

    9. -keep public class * extends android.app.Application

    10. -keep public class * extends android.app.Service

    11. -keep public class * extends android.content.BroadcastReceiver

    12. -keep public class * extends android.content.ContentProvider

    13. -keep public class * extends android.app.backup.BackupAgentHelper

    14. -keep public class * extends android.preference.Preference

    15. -keep public class com.android.vending.licensing.ILicensingService

    16.

    17. -keepclasseswithmembernames class * {

    18. native <methods>;

    19. }

    20.

    21. -keepclasseswithmembernames class * {

    22. public <init>(android.content.Context, android.util.AttributeSet);

    23. }

    24.

    25. -keepclasseswithmembernames class * {

    26. public <init>(android.content.Context, android.util.AttributeSet, int);

    27. }

    28.

    29. -keepclassmembers enum * {

    30. public static **[] values();

    31. public static ** valueOf(java.lang.String);

    32. }

    33.

    34. -keep class * implements android.os.Parcelable {

    35. public static final android.os.Parcelable$Creator *;

    36. }

    脚本中可以看到,混淆中保留了继承自Activity、Service、
    Application、BroadcastReceiver、ContentProvider等基本组件以及
    com.android.vending.licensing.ILicensingService,

    并保留了所有的Native变量名及类名,所有类中部分以设定了固定参数格式的构造函数,枚举等等。(详细信息请参考<proguard_path>/examples中的例子及注释。)

    让proguard.cfg起作用的做法很简单,就是在eclipse自动生成的default.properties文件中加上一句“proguard.config=proguard.cfg”就可以了

    完整的default.properties文件应该如下:

    [html] view
    plainprint?

    1. # This file is automatically generated by Android Tools.

    2. # Do not modify this file -- YOUR CHANGES WILL BE ERASED!

    3. #

    4. # This file must be checked in Version Control Systems.

    5. #

    6. # To customize properties used by the Ant build system use,

    7. # "build.properties", and override values to adapt the script to your

    8. # project structure.

    9.

    10. # Project target.

    11. target=android-9

    12. proguard.config=proguard.cfg

    大功告成,正常的编译签名后就可以防止代码被反编译了。反编译经过代码混淆的apk得到的代码应该类似于下面的效果,是很难看懂的:

    如果您使用的是2.3之前的SDK版本也没关系,把上面的proguard.cfg文件复制一份放到项目中,然后进行相同的操作即可

    热点内容
    iqoo清除应用缓存 发布:2025-07-10 15:34:34 浏览:845
    手机rm文件夹 发布:2025-07-10 15:30:48 浏览:581
    游戏脚本挂 发布:2025-07-10 15:21:46 浏览:588
    sql写数据 发布:2025-07-10 15:01:29 浏览:163
    php入门手册 发布:2025-07-10 14:42:24 浏览:792
    手机如何设密码锁屏 发布:2025-07-10 14:17:06 浏览:803
    java求绝对值 发布:2025-07-10 14:10:55 浏览:653
    usb调试开关在哪里安卓 发布:2025-07-10 13:59:55 浏览:78
    数据库维度 发布:2025-07-10 13:54:31 浏览:799
    c语言位域的赋值 发布:2025-07-10 13:54:30 浏览:583