导航:首页 > 源码编译 > mmm编译完如何打包

mmm编译完如何打包

发布时间:2025-08-06 14:32:04

android源码能在其他电脑上运行吗

如下:
1.在ubuntu系统下,进入源码根目录,运行如下命令
mmm命令编译idegen模块,在源码目录下的out/host/linux-x86/frameworks/目录下生成了idegen.jar文件。
2.在源码目录下继续执行如下命令:
3.development/tools/idegen/idegen.sh命令执行完成,会在根目录下生成
android.iml和android.ipr这两个文件,这两个文件是Android Studio的工程配置文件。
4.到这一步我们可以打开Android Studio导入源码了,不过还有一些要注意的地方,如果我们就这么直接导入,会把所有的源码模块导入到Android Studio中,这会很慢的,想想源码那么多文件,直接全部导入,如果你的电脑配置不好,可能会直接假死。所以我们最好过滤一下我们不需要的源码文件,只导入我们需要的模块。
对比源码下目录,我把除了frameworks模块的其他所有模块都过滤掉了。这样导入的速度很快,3分钟左右就导入完成了。
5.所有配置完成了,下面启动Android Studio开始导入源码。
6.Android Studio导入源码
点击ok,大概过了3-5分钟,就导入完成了。
7.好了,现在我们可以愉快的使用Android Studio查看源码了。
8.如果你不想编译源码,还想把源码导入Android Studio的简单方法是什么呢,到这一步我想大家都知道了,就是把上面生成的两个文件android.iml和android.ipr拷贝到你的未编译源码根目录就可以用Android Studio导入了。
9.当然,一般我们大部分人不在ubuntu下开发app ,为了能在Windows或Mac系统下也能使用Android Studio查看未编译的源码,我们也可以像上一步那样直接拷贝ubuntu下的android.iml和android.ipr文件到Windows或Mac系统下的android源码根目录下,然后导入Adnroid Studio中,这样就可以在这两个平台上进行查看源码了,不用一直开虚拟机了。

② 如何单独编译Android源代码中的模块

一. 首先在Android源代码目录下的build目录下,有个脚本文件envsetup.sh,执行这个脚本文件后,就可以获得一些有用的工具:
USER-NAME@MACHINE-NAME:~/Android$ . ./build/envsetup.sh
注意,这是一个source命令,执行之后,就会有一些额外的命令可以使用:
- croot: Changes directory to the top of the tree.
- m: Makes from the top of the tree.
- mm: Builds all of the moles in the current directory.
- mmm: Builds all of the moles in the supplied directories.
- cgrep: Greps on all local C/C++ files.
- jgrep: Greps on all local java files.
- resgrep: Greps on all local res/*.xml files.
- godir: Go to the directory containing a file.
这些命令的具体用法,可以在命令的后面加-help来查看,这里只关注mmm命令,也就是可以用它来编译指定目录的所有模块,通常这个目录只包含一个模块。
二. 使用mmm命令来编译指定的模块,例如Email应用程序:
USER-NAME@MACHINE-NAME:~/Android$ mmm packages/apps/Email/
编译完成之后,就可以在out/target/proct/generic/system/app目录下看到Email.apk文件了。Android系统自带的App都放在这具目录下。另外,Android系统的一些可执行文件,例如C编译的可执行文件,放在out/target/proct/generic/system/bin目录下,动态链接库文件放在out/target/proct/generic/system/lib目录下,out/target/proct/generic/system/lib/hw目录存放的是硬件抽象层(HAL)接口文件
三. 编译好模块后,还要重新打包一下system.img文件,这样把system.img运行在模拟器上时,就可以看到程序了。
USER-NAME@MACHINE-NAME:~/Android$ make snod
四. 参照Ubuntu上下载、编译和安装Android最新源代码一文介绍的方法运行模拟器:
USER-NAME@MACHINE-NAME:~/Android$ emulator
这样一切就搞定了。

③ 条件编译形式

条件编译形式允许程序在运行时根据特定条件选择执行不同的代码块。这种形式通常用于在不同平台或配置下优化代码或实现兼容性。以 NNN 和 MMM 作为条件示例,其结构如下:




#if NNN
statement1;
#elif MMM
statement2;
#else
statement3;
#endif


此结构中,`#if`、`#elif` 和 `#else` 是预处理器指令,用于根据 NNN 和 MMM 的值决定执行哪部分代码。当 NNN 为真(通常表示为1)时,执行 `statement1`;当 NNN 为假(通常表示为0)且 MMM 为真时,执行 `statement2`;当 NNN 和 MMM 均为假时,则执行 `statement3`。



条件编译的形式在软件开发中非常有用。它允许开发者在不修改源代码的情况下,针对不同环境或配置提供不同功能。例如,在编写跨平台应用时,可以使用条件编译来根据目标平台的特性选择使用特定的功能库或功能实现。这有助于减少代码冗余,提高代码效率和可维护性。



此外,条件编译还能用于在开发过程中进行调试和测试。通过条件地启用或禁用某些功能或代码块,开发者可以更容易地定位和解决问题。在生产环境中,可以使用条件编译来禁用调试代码、日志记录或性能测试代码,从而减少应用程序的大小和运行时消耗。



总之,条件编译是一种强大的工具,能够根据运行环境和需求动态地调整程序的行为。它简化了代码维护和跨平台开发的过程,有助于提高软件的性能和可移植性。


(3)mmm编译完如何打包扩展阅读

一般情况下,源程序中所有的行都参加编译。但有时希望对其中一部分内容只在满足一定条件下才进行编译,即对一部分内容指定编译条件,这就是“条件编译”(conditional compile)。条件编译语句排版时,需考虑以下三种位置:1)条件编译语句块与函数定义体之间不存在相互嵌套(主要在(.h)文件中);2)条件编译语句块嵌套在函数体之外(主要在(.c)文件中);3)条件编译语句嵌套在函数体内 (主要在(.c)文件中)。条件编译指令将决定那些代码被编译,而哪些是不被编译的。可根据表达式的值或某个特定宏是否被定义来确定编译条件。

④ 如何用android:sharedUserId属性生成带有系统权限的apk

如何用android:sharedUserId属性生成带有系统权限的apk?

通过源码编译apk获取系统权限,主要有两种方法:使用Android系统源码的环境下用make命令编译,或者使用eclipse源码编译,无需使用make命令。

方法1:Android源码环境下的make命令编译。首先在android源码根目录下执行以下命令:
- build/envsetup.sh 设置编译环境
- lunch 选择编译目标
- make 编译整个系统

Android平台提供常用命令如:
- make 编译整个系统或单个模块
- mmm 编译指定目录下的模块
- mm 编译当前目录下的模块
- mma 编译当前目录及其依赖模块
- mms 编译指定目录及其依赖模块
- make sdk 编译SDK
- make snod 生成系统映像,速度较快但不稳定

方法2:使用eclipse源码编译。在signapk.java代码目录下执行命令:
- javac signapk.java 获取SignApk$SignatureOutputStream.class和SignApk.class
- 将两个class文件放入目录下并生成signapk.jar文件
- 复制platform.pk8和platform.x509.pem文件至signapk.jar和SignApk.mf所在的目录
- 使用java -jar signapk.jar签名apk文件

在加入android:sharedUserId="android.uid.system"属性后,程序运行在系统进程中,拥有系统权限。但还需使用platform.pk8和platform.x509.pem两个文件签名apk,确保在系统中安装和运行。生成的程序仅在原始Android系统或自己编译的系统中可用。

系统中使用不同共享UID的APK具有不同的权限和用途。遵循上述方法,你可以尝试编译带有sharedUserId权限的apk,并将其放置在开发版的/system/priv-app/目录下,以实现静默ota升级。

本文章总结了使用android:sharedUserId属性生成带有系统权限的apk的方法和注意事项,希望对开发者有所帮助。后续将介绍ota升级的理论、实践和原理等内容。欢迎关注知乎主页以获取更多Android开发知识。sunst 2019-06-15 23:30

⑤ 如何单独编译Android源码中的模块

1.make 模块名称
需要查看Android.mk文件的LOCAL_PACKAGE_NAME变量。
2.mmm命令
用于在源码根目录编译指定模块,参数为模块的相对路径。只能在第一次编译后使用。比如要编译Phone部分源码,需要在终端中执行以下命令:
$mmm packages/apps/phone
3.mm命令
用于在模块根目录编译这个模块。只能在第一次编译后使用。例如要编译Phone部分源码,需要在终端中执行以下命令:
$cd packages/apps/phone
$mm
注:mmm和mm命令必须在执行“.build/envsetup.sh”之后才能使用,并且只编译发生变化的文件。如果要编译模块的所有文件,需要-B选项,例如mm -B。

阅读全文

与mmm编译完如何打包相关的资料

热点内容
梁加密筋示意图 浏览:329
网站怎么挂在服务器地址 浏览:344
nomo滤镜是哪个app的 浏览:466
phpsession在哪里 浏览:97
如何在电脑上打开wifi连接到服务器地址 浏览:474
dns宽带服务器怎么查 浏览:708
联通app哪里刷人脸登录 浏览:139
浙江省编程比赛小学 浏览:133
网易云音乐rsa加密 浏览:149
怎么处理不服从命令的干部 浏览:522
怎么在服务器装mod 浏览:745
app北京一卡通在哪里充值 浏览:237
圈梁上下箍筋要加密吗 浏览:925
忘了以前的服务器怎么查 浏览:33
基于模板的识别算法 浏览:525
理政cad命令 浏览:862
怎么安装材质包在服务器 浏览:921
为什么微信都加密了 浏览:623
美团app在哪里看拒单 浏览:289
赤兔宝app在哪里下载 浏览:691