当前位置:首页 » 安卓系统 » mac编译android源码

mac编译android源码

发布时间: 2023-04-23 01:47:53

Ⅰ Mac 编译 XGBoost for Android

xgboost 的官方源码: https://github.com/dmlc/xgboost

因为 mac 已经使用 clang 代替 gcc,不支持 OpenMp,需要先安装相关库: brew install libomp

安装 NDK 最新版本,本次使用 NDK-r16b

确保 clang 版本支持-fopenmp 参数

Mac OS 版本 10.15+

以下是本机环境,通过 brew config 查看

创建 build_32.sh 脚本

在源码根目录下创建 build_android 目录,并在目录下执行脚本:

源码根目录 /lib 下,会产生 libxgboost.so

将近 60MB... 囧rz

源码目录下,demo/c-api 即为 C 语音版本接口 Demo,修改 CMakeList.txt ,以便进行交叉编译

在源码根目录下创建 build_android 目录,并在目录下执行脚本,脚本内容与前文一致:

push 以下文件到 Android 手机的 /data/local/tmp 目录下:

编译产物: api-demo

模型训练和测试数据: agaricus.txt.test, agaricus.txt.train

xgboost 动态库: libxgboost.o

可以看到 demo 执行结果,就不贴图了

Ⅱ mac 怎样打包android系统源码

设置Mac上的编译环境可参考官方文档:
Initializing a Build Environment 里的 Setting up a Mac OS X build environment

里面有具体的方法,Android代滑宽码所在的分区是需要区分大小写的,默认的Mac分区是不区分大小写的,所以可能新信埋亮建一个区分大小写的分区或者使用文档中的方式,建立一个虚拟分区文件,把它格式化成区分大小写的区分。

但是在Mac里设置编译环境很麻烦,因为Mac本身没有编译工具链,需要额外的安装,还需要安装xCode,液滚等等。

Ⅲ ubuntu/mac android aosp源码编译遇到的坑

以上是编译aosp问题总结
========================分割线==========================

直接在命令行中设置临时变量就行

以上是刷机问题总结
========================分割线==========================

Ⅳ 怎么开发android framework

一.认识android的架构
Android其本质就是在标准的linux系统上增加了java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个JAVA的application framework,所有的应用程序都是基于JAVA的application framework之上。
android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。

二.搭建环境
搭建开发环境
对国内的开发者来说最痛苦的是无法去访问android开发网站。为了更好的认识世界,对程序员来说,会翻墙也是的一门技术,带你去领略墙外的世界,好了,不废话了, 国内开发者访问(androiddevtools) 上面已经有了所有你要的资源,同时可以下载到我们的主角framework

但是这样的搭建只能去阅读源代码,我们无法去更进一步去实现自己的rom,我们看到锤子的系统在早期的开放rom是自己从新实现了framework的代码,现在看起来他成功了,所以我们还要去搭建android系统的源码编译环境。

搭建源码编译环境
http://www.cnblogs.com/bluestorm/p/4419135.html
https://source.android.com/source/downloading.html(这里详细的介绍了如何下载编译)
三.开始主题

在一开始写c程序的时候都有一个运行的入口,比如
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;

//这里的main就是应用的入口
int main(int argc, const char * argv[]){
return 0;
}

在计算机网络原理中我们用socket实现一个服务器端,不断的接听客户端的访问,而且他的代码是这样实现的:
#include <winsock2.h>
#pragma comment(lib, "WS2_32.lib")

#include <stdio.h>
void main()
{
WORD wVersionRequested;//版本号
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD(2, 2);//2.2版本的套接字
//加载套接字库,如果失败返回
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0)
{
return;
}

//判断高低字节是不是2,如果不是2.2的版本则退出
if (LOBYTE(wsaData.wVersion) != 2 ||

HIBYTE(wsaData.wVersion) != 2)

{
return;
}

//创建流式套接字,基于TCP(SOCK_STREAM)

SOCKET socSrv = socket(AF_INET, SOCK_STREAM, 0);

//Socket地址结构体的创建

SOCKADDR_IN addrSrv;

addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//转换Unsigned long型为网络字节序格
addrSrv.sin_family = AF_INET;//指定地址簇
addrSrv.sin_port = htons(6000);
//指定端口号,除sin_family参数外,其它参数都是网络字节序,因此需要转换

//将套接字绑定到一个端口号和本地地址上
bind(socSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));//必须用sizeof,strlen不行

listen(socSrv, 5);

SOCKADDR_IN addrClient;//字义用来接收客户端Socket的结构体

int len = sizeof(SOCKADDR);//初始化参数,这个参数必须进行初始化,sizeof

//循环等待接受客户端发送请求

while (1)
{
//等待客户请求到来;当请求到来后,接受连接请求,

//返回一个新的对应于此次连接的套接字(accept)。
//此时程序在此发生阻塞

SOCKET sockConn = accept(socSrv, (SOCKADDR*)&addrClient, &len);

char sendBuf[100];

sprintf(sendBuf, "Welcome %s to JoyChou",

inet_ntoa(addrClient.sin_addr));//格式化输出

//用返回的套接字和客户端进行通信

send(sockConn, sendBuf, strlen(sendBuf)+1, 0);//多发送一个字节

//接收数据

char recvBuf[100];

recv(sockConn, recvBuf, 100, 0);

printf("%s\\n", recvBuf);
closesocket(sockConn);

}
}

他采用了一个while死循环去监听客户端的请求。
在一遍啰嗦之后,主角终于闪亮的登场了。

先上源代码
public final class ActivityThread {

public static void main(String[] args) {
SamplingProfilerIntegration.start();

CloseGuard.setEnabled(false);

Environment.initForCurrentUser();

EventLogger.setReporter(new EventLoggingReporter());

Security.addProvider(new AndroidKeyStoreProvider());

final File configDir = Environment.getUserConfigDirectory(UserHandle.myUserId());
TrustedCertificateStore.setDefaultUserDirectory(configDir);

Process.setArgV0("<pre-initialized>");

Looper.prepareMainLooper();

//从中可以看到为app开辟了一个线程进入了looper之中

ActivityThread thread = new ActivityThread();
thread.attach(false);

if (sMainThreadHandler == null) {
sMainThreadHandler = thread.getHandler();
}

AsyncTask.init();

if (false) {
Looper.myLooper().setMessageLogging(new
LogPrinter(Log.DEBUG, "ActivityThread"));
}

Looper.loop();

throw new RuntimeException("Main thread loop unexpectedly exited");
}

}

看到源码失望了,没有一个while循环啊,其实用了他方法实现
//用一个looper的机制循环监听响应
Looper.prepareMainLooper();

Looper.loop();

进一步深入代码
public static void loop() {
final Looper me = myLooper();
if (me == null) {
throw new RuntimeException("No Looper; Looper.prepare() wasn't called on this thread.");
}
final MessageQueue queue = me.mQueue;

Binder.clearCallingIdentity();
final long ident = Binder.clearCallingIdentity();

// 在这里看到了一个循环监听消息

for (;;) {
Message msg = queue.next(); // might block
if (msg == null) {
// No message indicates that the message queue is quitting.
return;
}

Printer logging = me.mLogging;
if (logging != null) {
logging.println(">>>>> Dispatching to " + msg.target + " " +
msg.callback + ": " + msg.what);
}

msg.target.dispatchMessage(msg);

if (logging != null) {
logging.println("<<<<< Finished to " + msg.target + " " + msg.callback);
}

// Make sure that ring the course of dispatching the
// identity of the thread wasn't corrupted.
final long newIdent = Binder.clearCallingIdentity();
if (ident != newIdent) {
Log.wtf(TAG, "Thread identity changed from 0x"
+ Long.toHexString(ident) + " to 0x"
+ Long.toHexString(newIdent) + " while dispatching to "
+ msg.target.getClass().getName() + " "
+ msg.callback + " what=" + msg.what);
}

msg.recycleUnchecked();
}
}

Ⅳ 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中,这样就可以在这两个平台上进行查看源码了,不用一直开虚拟机了。

Ⅵ 在Mac上开发Android是一种怎样的体验

一直在mac上开发,体验不错,用的android studio,昌中山编译速度还是非常快的,耐中比培纤windows强很多。

Ⅶ mac可以编译arm汇编吗

可以
编译就是把源代码转成对应CPU类型下的本地代码。
因为编译器也是程序,也有它自身的运行环境。交叉编译就是用A环境下运行的编译器生成B环境下运行的本地代码。
对于本文,就是用在Mac下的C++编译器,生成ARM下运行的本地代码。编译器由Android提供,对应的目录在:$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-g+

Ⅷ 为什么用mac开发android

Android系统的源代码编译只能在linux和mac下进行,而windows不行,这是主要原因。

开发应用3大平台都可以,但是如果涉及JNI之类的,还是linux下方便。

不赞同说linux下配置简单,linux下配置是比较繁琐的。

mac(苹果电脑)是可以用于开发Android系统的,需要在mac平台上搭建Android开发环境,具体步骤为:

一.Eclipse的下载1.找到“EclipseIDEforjavaDevelopers”此处右上角会根据你当前使用的系统自动选择,Mac下就会自动选择位“MacOSX(Cocoa)”

2.然后点击右边枯雀的“MacOSX64bit”(这里我的Pro是i5处理器可以用64位的),根据你的机器也可以选择“MacOSX32bit”进行下载。

二.安装ADT

ADT是Android应用程序的开发环境

在线安装,本来还有个离线安装的,但是我试图去下载这个离线安装包但是没有找到下载的地方,所以这里主要介绍如何进行在线安装。

1.点击菜单中的Help——>InstallNewSoftware?6?8;

2.在弹出的对话框中有个“Workwith”,在右边的输入没嫌早栏中输入:dl-ssl.google/android/eclipse/然后下面就会pending出来一个“DeveloperTools”,勾选上,然后一路的Next下去就可以安装完成。

三.设定ADT

在菜单栏Refactor中如果能看到Android的标签表示ADT安装成功。

1下载AndroidSDK

打开网站:developer.android/sdk/index.html选择MacOSX(intel)的SDK版本进行下载(因为pro是intel的i5处理器)

2安装AndroidSDK

刚下载的Mac版的SDK文件是:“android-sdk-mac_x86.rar”文件,将其解压出来,然后运行tools/Android,在弹出的AndroidSDKandAVDManager对话框中选择左边的Installedpackages,右边就会列出当前已经安装了的SDK,点击下面的“UpdateAll”然后一步一步来就会下载所有的AndroidSDK的版本并进行安装。

然后在菜单栏Eclipse—>Preferences(偏好设置),会弹出一个Preferences对话者芦框,选Android,然后在SDKLoaction中填入刚下载的SDK的路径或者点击右边的Browser选择。

3生成模拟器

菜单栏Window—>AndroidSDKandAVDManger会弹出对话框,然后在对话框中选择new开始按自己的需求新建模拟器,至此就大功告成了。

Ⅸ 编译调试Android系统原生App - 以Settings为例

本文已过时,最新文章:向大家推荐《使用 AS 开发 System App》 https://xiaozhuanlan.com/system-app

Android原生系统带有许多原生的App,比如 浏览器、录音机、计算器、设置 等,有些时候,我们需要用到一些系统的功能,或者是对已有的功能做二次开发,比如我上学时给一个公司做过一个Launcher和Wizard,就需要用到系统设置中的某些功能,比如Wifi、声音、显示等功能,于是就需要从Settings源码中提取出需要的功能。

特别是公司自己定制Android系统,需要在上面做一些 系统级的App 的时候,原生App已有的功能就可以通过编译其源码的方式直接拿过来改改就能用,而且可用度很高。

这里有两种情况,分为 原生 的和 公司定制 的系统。无论是原生的还是定制的,类似于Settings这样需要使用到 系统级或隐藏API 的App,都需要系统签名文件和编译系统源码后得到相应的jar包才可以在IDE中编译,因为标准SDK根本没有那些API可供调用。

举个栗子:

需要额外的Jar就需要自己编译系统源码啦,这个是比较麻烦的,有兴趣可以试试自己编译定制自己的Android系统。

** 注意,既然是定制的,源码、jar、签名文件,还有系统都是一一对应的,你不能拿其他公司的系统签名来给你公司的系统app签名,这样无法运行的。 **

有了源码,下一步当然是要跑起来啦。

建议都使用Eclipse来编译,不要使用AS,因为AS编译大型的原生App能卡到你吐血,而且出错提示也不友好。但是用过AS的人都不想再碰Eclipse了有没有??别急,可以先用Eclipse编译过了,再贴到AS中,这样好很多,也很节省时间。

初始化:

放入源码:

修正res错误:

修正src错误:

使用到系统级API的,或者AndroidManifest.xml文件中声明了

那么没有系统签名,直接debug签名运行是不行的,需要向底层工程师要系统的签名文件,在源码目录
build\target\proct\security
下的 platform.pk8 和 platform.x509.pem ,如果你想看此次编译Settings是否已成功了,可以适当的在入口加一下Log,然后导出未签名的apk,使用系统签名进行签名后,放到 /system/app/ 下替换掉Settings.apk,然后重启系统,打开设置,看看Logcat是否输出里加入的Log。

在不知道系统签名可以转换成debug签名前,老实说我一直都是用Log的方式调试,太特么痛苦了。现在知道后整个人都懵逼了。

我们都希望可以像调试普通app那样调试系统app,以下是如何通过 openssl 将 platform.pk8 和 platform.x509.pem 转换成 debug.keystore 文件:

三个命令

此方法来自: http://curlog.com/2016/08/30/android-pk2debug-keystore/

Mac自带openssl,Linux和Win需要安装。

然后就可以使用得到的debug签名配置到eclipse后愉快的调试啦,当然,得先把系统中已经存在的app先删除掉。然后重启系统,至于如何配置eclipse的debug签名,请Google。

使用过AS后,当然希望在AS中也可以调试系统App,抽空再写篇相关编译和调试的文章。如果这篇文章帮到你了,给个赞呗。

Ⅹ 如何在Mac上进行Android反编译

apktool 反编译得到的是布局和资源文件。 dex2jar 反编译得到的代码字节码,利用jd gui就可以查看到源代码。 1)下载apktool,及mac下jd -gui,解压。 2) 使用apktool d xxx.apk进行反编译,得到一个同名的文件夹。里面就有我们需要的布局文件。 dex2jar反编译 1)将apk文件后缀名直接改为.zip,并解压。得到其中的classes.dex文件 ,它就是java源代码经过编译再通过dx工具打包而成的。 2)将classes.dex文件复制到dex2jar所在的文件夹。 3)命令行下定位到dex2jar目录,运行 sh dex2jar.sh classes.dex 生成 classes_dex2jar.jar 用jd gui打开就可以看到源代码了。

热点内容
随机启动脚本 发布:2025-07-05 16:10:30 浏览:526
微博数据库设计 发布:2025-07-05 15:30:55 浏览:24
linux485 发布:2025-07-05 14:38:28 浏览:304
php用的软件 发布:2025-07-05 14:06:22 浏览:754
没有权限访问计算机 发布:2025-07-05 13:29:11 浏览:431
javaweb开发教程视频教程 发布:2025-07-05 13:24:41 浏览:701
康师傅控流脚本破解 发布:2025-07-05 13:17:27 浏览:240
java的开发流程 发布:2025-07-05 12:45:11 浏览:685
怎么看内存卡配置 发布:2025-07-05 12:29:19 浏览:284
访问学者英文个人简历 发布:2025-07-05 12:29:17 浏览:834