當前位置:首頁 » 安卓系統 » 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 瀏覽:528
微博資料庫設計 發布:2025-07-05 15:30:55 瀏覽:25
linux485 發布:2025-07-05 14:38:28 瀏覽:305
php用的軟體 發布:2025-07-05 14:06:22 瀏覽:756
沒有許可權訪問計算機 發布:2025-07-05 13:29:11 瀏覽:432
javaweb開發教程視頻教程 發布:2025-07-05 13:24:41 瀏覽:707
康師傅控流腳本破解 發布:2025-07-05 13:17:27 瀏覽:242
java的開發流程 發布:2025-07-05 12:45:11 瀏覽:686
怎麼看內存卡配置 發布:2025-07-05 12:29:19 瀏覽:285
訪問學者英文個人簡歷 發布:2025-07-05 12:29:17 瀏覽:835