android NDK 交叉編譯
android中介軟體開發,本來利用NDK就直接生成了一個SO檔案,然後直接打包到APK裡,即可執行,但是由於一般真機是不帶有root許可權的,即使SSH可以解決root許可權,當到了java層,root許可權又失效了。經常碰到operation not permitted 或 permission delied 之類的錯誤,但目前還有一個可以執行在真機上的C編譯器,因為手機的資源畢竟是很有限的,可喜的是android-NDK給我們提供了這個交叉編譯環境,只是生成SO檔案的時候,把裡面的細節全部省掉了。不過還是保留了許多中間過程的開發HTML文件。下面說說具體的實現過程:
1,下載NDK,並配合NDK環境變數為NDK的安裝路徑
2,根據NDK裡docs文件裡的standalone-toolchain.html來抽取交叉編譯的環境。
3,配置SYSROOT環境變數: SYSROOT=$NDK/platforms/android-8/arch-arm //android-8是你的android開發版本所定
4,然後執行命令:
$NDK/build/tools/make-standalone-toolchain.sh --platform=android-5 --install-dir=/tmp/my-android-toolchain
/tmp/my-android-toolchain是你交叉編譯環境的複製路徑。最好別放在tmp目錄裡,因為重啟機子就立即消失了。這個新生成的檔案 夾即是你的交叉編譯環境
5,配置PAHT和CC環境變數:
export PATH=/tmp/my-android-toolchain/bin:$PATH
export CC=arm-linux-androideabi-gcc
如果需要長久有效,在/etc/profile里加上PATH=/..../bin:$PATH
export PATH
其他的類似處理。
6,把你要需要編譯的C檔案放在以上生成的編譯環境的bin目錄下,例如:/tmp/my-android-toolchain/bin,進入這個目錄裡,輸入命令: $CC -o hello hello.c (這相當於我們平時的gcc命令,只是這裡需要引用arm裡的庫,而不是X86裡的庫)
hello.c:
#include<string.h>
#include<stdio.h>
int main()
{
printf("hello,toolchain!/n");
return 0;
}
即生成了可在手機arm裡執行的可執行檔案hello
7,把這個可執行檔案hello放到手機裡的/data/目錄下,方法有很多,這裡介紹兩種:
一、把這個檔案放在電腦的某個目錄下,然後進入DOS的這個目錄下,執行如下命令:adb push hello /data/
二、放在SDCARD目錄下,然後執行cp /sdcard/hello /data/也可以
8,進入/data/目錄下,執行這個hello檔案,例如“./hello”,即可以在adb shell裡看到列印結果: hello,toolchain!
相關文章
- 交叉編譯-Mac環境使用NDK編譯FFmpeg編譯Mac
- Android NDK 提供的交叉工具鏈手動編譯原始碼Android編譯原始碼
- Android:JNI與NDK(二)交叉編譯與動態庫,靜態庫Android編譯
- Android 基於ffmpeg開發簡易播放器 - NDK交叉編譯ffmpegAndroid播放器編譯
- libusb android ndk編譯--編譯mipsAndroid編譯
- 交叉編譯編譯
- 交叉編譯c++給android呼叫編譯C++Android
- lazarus交叉編譯編譯
- GDB交叉編譯編譯
- golang交叉編譯Golang編譯
- 用 NDK 編譯 ffmpeg 到 Android 平臺編譯Android
- 交叉編譯入門編譯
- go 交叉編譯,部署Go編譯
- 淺談交叉編譯編譯
- ubuntu下編譯交叉編譯工具鏈Ubuntu編譯
- Android-NDK-11-C語言編譯原理AndroidC語言編譯原理
- ios交叉比編譯android錯誤解決iOS編譯Android
- cygwin下ndk編譯protobuf編譯
- 用Android NDK r6編譯Python 3.2Android編譯Python
- 交叉編譯和 RPC編譯RPC
- wifidog交叉編譯WiFi編譯
- golang初學:交叉編譯Golang編譯
- Rust 交叉編譯與條件編譯總結Rust編譯
- 編譯器的自展和自舉、交叉編譯編譯
- Cocos2dx交叉編譯至android平臺編譯Android
- Go跨平臺交叉編譯Go編譯
- linux與windows交叉編譯LinuxWindows編譯
- 交叉編譯mupdf1.15.0編譯
- Go - armv7 交叉編譯Go編譯
- Ubuntu交叉編譯環境配置Ubuntu編譯
- 交叉編譯和交叉除錯環境搭建及使用編譯除錯
- 【譯】Android NDK API 規範AndroidAPI
- Android NDK祕籍--編譯靜態庫、呼叫靜態庫Android編譯
- Android NDK開發掃盲及最新CMake的編譯使用Android編譯
- Go語言交叉編譯工具goxGo編譯
- protobuf 的交叉編譯使用(C++)編譯C++
- 製作交叉編譯工具鏈概述編譯
- 交叉編譯工具鏈構建原理編譯