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
- libusb android ndk編譯--編譯mipsAndroid編譯
- Android:JNI與NDK(二)交叉編譯與動態庫,靜態庫Android編譯
- Android 基於ffmpeg開發簡易播放器 - NDK交叉編譯ffmpegAndroid播放器編譯
- 交叉編譯c++給android呼叫編譯C++Android
- 交叉編譯編譯
- Android-NDK-11-C語言編譯原理AndroidC語言編譯原理
- lazarus交叉編譯編譯
- golang交叉編譯Golang編譯
- GDB交叉編譯編譯
- 【譯】Android NDK API 規範AndroidAPI
- go 交叉編譯,部署Go編譯
- 交叉編譯入門編譯
- 交叉編譯和 RPC編譯RPC
- Android NDK祕籍--編譯靜態庫、呼叫靜態庫Android編譯
- linux與windows交叉編譯LinuxWindows編譯
- golang初學:交叉編譯Golang編譯
- 交叉編譯mupdf1.15.0編譯
- Rust 交叉編譯與條件編譯總結Rust編譯
- 編譯器的自展和自舉、交叉編譯編譯
- FFmpeg開發筆記(十六)Linux交叉編譯Android的OpenSSL庫筆記Linux編譯Android
- FFmpeg開發筆記(八)Linux交叉編譯Android的FFmpeg庫筆記Linux編譯Android
- Go跨平臺交叉編譯Go編譯
- Ubuntu交叉編譯環境配置Ubuntu編譯
- Go - armv7 交叉編譯Go編譯
- AndroidStudio之NDK常見編譯錯誤Android編譯
- NDK clang編譯器的一個bug編譯
- 交叉編譯工具鏈構建原理編譯
- Go語言交叉編譯工具goxGo編譯
- protobuf 的交叉編譯使用(C++)編譯C++
- FFmpeg開發筆記(九)Linux交叉編譯Android的x265庫筆記Linux編譯Android
- Andorid Studio NDK 開發 – 編譯 OpenSSL 類庫編譯
- 全網可用交叉編譯工具鏈大全編譯
- 關於Gdb工具的交叉編譯、移植編譯
- Tinyx 交叉編譯配置檔案(arm版)編譯
- 交叉編譯場景分析(arm-linux)(四)--編譯readline和ncurses編譯Linux
- android ndk整合Android
- 32位支援:使用 GCC 交叉編譯GC編譯
- 交叉編譯場景分析(arm-linux)--序編譯Linux