1. 程式人生 > >android通用編譯指令碼

android通用編譯指令碼

# compile-common-android.sh

#! /usr/bin/env bash
#
# Copyright (C) 2013-2014 Zhang Rui <[email protected]>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

#----------
UNI_BUILD_ROOT=`pwd`
FF_TARGET=$1
set -e
set +x

FF_ACT_ARCHS_64="armv5 armv7a arm64 x86 x86_64"
FF_ACT_ARCHS_ALL=$FF_ACT_ARCHS_64

echo_archs() {
    echo "===================="
    echo "[*] check archs"
    echo "===================="
    echo "FF_ALL_ARCHS = $FF_ACT_ARCHS_ALL"
    echo "FF_ACT_ARCHS = $*"
    echo ""
}

echo_usage() {
    echo "Usage:"
    echo "  compile-common-android.sh armv5|armv7a|arm64|x86|x86_64"
    echo "  compile-common-android.sh all"
    echo "  compile-common-android.sh clean"
    exit 1
}

#----------
case "$FF_TARGET" in
    "")
        echo_archs armv7a
        sh do-compile-common-android.sh armv7a
    ;;
    armv5|armv7a|arm64|x86|x86_64)
        echo_archs $FF_TARGET
        sh do-compile-common-android.sh $FF_TARGET
    ;;
    all)
        echo_archs $FF_ACT_ARCHS_64
        for ARCH in $FF_ACT_ARCHS_64
        do
            sh do-compile-common-android.sh $ARCH
        done
    ;;
    clean)
        make clean
    ;;
    *)
        echo_usage
        exit 1
    ;;
esac


#do-compile-common-android.sh

#! /usr/bin/env bash
#
# Copyright (C) 2014 Miguel Botón <[email protected]>
# Copyright (C) 2014 Zhang Rui <[email protected]>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

#--------------------
set -e

if [ -z "$ANDROID_NDK" ]; then
    echo "You must define ANDROID_NDK before starting."
    echo "They must point to your NDK directories.\n"
    exit 1
fi

#--------------------
# common defines
FF_ARCH=$1
if [ -z "$FF_ARCH" ]; then
    echo "You must specific an architecture 'arm, armv7a, x86, ...'.\n"
    exit 1
fi


FF_BUILD_ROOT=`pwd`
FF_ANDROID_PLATFORM=android-9


FF_BUILD_NAME=
FF_CROSS_PREFIX=

FF_CFG_FLAGS=
FF_PLATFORM_CFG_FLAGS=

FF_EXTRA_CFLAGS=
FF_EXTRA_LDFLAGS=


#-----detect---------
UNAME_S=$(uname -s)
UNAME_SM=$(uname -sm)
echo "build on $UNAME_SM"

echo "ANDROID_NDK=$ANDROID_NDK"

if [ -z "$ANDROID_NDK" ]; then
echo "You must define ANDROID_NDK before starting."
echo "They must point to your NDK directories."
echo ""
exit 1
fi



# try to detect NDK version
export IJK_GCC_VER=4.9
export IJK_GCC_64_VER=4.9
export IJK_MAKE_TOOLCHAIN_FLAGS=
export IJK_MAKE_FLAG=
export IJK_NDK_REL=$(grep -o '^r[0-9]*.*' $ANDROID_NDK/RELEASE.TXT 2>/dev/null | sed 's/[[:space:]]*//g' | cut -b2-)
case "$IJK_NDK_REL" in
10e*)
# we don't use 4.4.3 because it doesn't handle threads correctly.
if test -d ${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.8
# if gcc 4.8 is present, it's there for all the archs (x86, mips, arm)
then
echo "NDKr$IJK_NDK_REL detected"

case "$UNAME_S" in
Darwin)
export IJK_MAKE_TOOLCHAIN_FLAGS="$IJK_MAKE_TOOLCHAIN_FLAGS --system=darwin-x86_64"
;;
CYGWIN_NT-*)
export IJK_MAKE_TOOLCHAIN_FLAGS="$IJK_MAKE_TOOLCHAIN_FLAGS --system=windows-x86_64"
;;
esac
else
echo "You need the NDKr10e or later"
exit 1
fi
;;
*)
IJK_NDK_REL=$(grep -o '^Pkg\.Revision.*=[0-9]*.*' $ANDROID_NDK/source.properties 2>/dev/null | sed 's/[[:space:]]*//g' | cut -d "=" -f 2)
echo "IJK_NDK_REL=$IJK_NDK_REL"
case "$IJK_NDK_REL" in
11|12*)
if test -d ${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.9
then
echo "NDKr$IJK_NDK_REL detected"
else
echo "You need the NDKr10e or later"
exit 1
fi
;;
*)
echo "You need the NDKr10e or later"
exit 1
;;
esac
;;
esac


case "$UNAME_S" in
Darwin)
export IJK_MAKE_FLAG=-j`sysctl -n machdep.cpu.thread_count`
;;
CYGWIN_NT-*)
IJK_WIN_TEMP="$(cygpath -am /tmp)"
export TEMPDIR=$IJK_WIN_TEMP/

echo "Cygwin temp prefix=$IJK_WIN_TEMP/"
;;
esac

#--------------------
echo ""
echo "--------------------"
echo "[*] make NDK standalone toolchain"
echo "--------------------"
FF_MAKE_TOOLCHAIN_FLAGS=$IJK_MAKE_TOOLCHAIN_FLAGS
FF_MAKE_FLAGS=$IJK_MAKE_FLAG
FF_GCC_VER=$IJK_GCC_VER
FF_GCC_64_VER=$IJK_GCC_64_VER

#----- armv7a begin -----
if [ "$FF_ARCH" = "armv7a" ]; then
    FF_BUILD_NAME=common-android-armv7a
    FF_CROSS_PREFIX=arm-linux-androideabi
	FF_TOOLCHAIN_NAME=${FF_CROSS_PREFIX}-${FF_GCC_VER}
    FF_PLATFORM_CFG_FLAGS="android-armv7"
elif [ "$FF_ARCH" = "armv5" ]; then
    FF_BUILD_NAME=common-android-armv5
    FF_CROSS_PREFIX=arm-linux-androideabi
	FF_TOOLCHAIN_NAME=${FF_CROSS_PREFIX}-${FF_GCC_VER}
    FF_PLATFORM_CFG_FLAGS="android"
elif [ "$FF_ARCH" = "x86" ]; then
    FF_BUILD_NAME=common-android-x86
    FF_CROSS_PREFIX=i686-linux-android
	FF_TOOLCHAIN_NAME=x86-${FF_GCC_VER}
    FF_PLATFORM_CFG_FLAGS="android-x86"
elif [ "$FF_ARCH" = "x86_64" ]; then
    FF_ANDROID_PLATFORM=android-21
    FF_BUILD_NAME=common-android-x86_64
    FF_CROSS_PREFIX=x86_64-linux-android
    FF_TOOLCHAIN_NAME=${FF_CROSS_PREFIX}-${FF_GCC_64_VER}
    FF_PLATFORM_CFG_FLAGS="linux-x86_64"
elif [ "$FF_ARCH" = "arm64" ]; then
    FF_ANDROID_PLATFORM=android-21
    FF_BUILD_NAME=common-android-arm64
    FF_CROSS_PREFIX=aarch64-linux-android
    FF_TOOLCHAIN_NAME=${FF_CROSS_PREFIX}-${FF_GCC_64_VER}
    FF_PLATFORM_CFG_FLAGS="linux-aarch64"
else
    echo "unknown architecture $FF_ARCH";
    exit 1
fi

FF_TOOLCHAIN_PATH=$FF_BUILD_ROOT/$FF_BUILD_NAME/toolchain
FF_SYSROOT=$FF_TOOLCHAIN_PATH/sysroot
FF_PREFIX=$FF_BUILD_ROOT/$FF_BUILD_NAME/
mkdir -p $FF_PREFIX
mkdir -p $FF_SYSROOT

#--------------------
echo ""
echo "--------------------"
echo "[*] make NDK standalone toolchain"
echo "--------------------"
FF_MAKE_TOOLCHAIN_FLAGS=$IJK_MAKE_TOOLCHAIN_FLAGS
FF_MAKE_FLAGS=$IJK_MAKE_FLAG


FF_MAKE_TOOLCHAIN_FLAGS="$FF_MAKE_TOOLCHAIN_FLAGS --install-dir=$FF_TOOLCHAIN_PATH"
FF_TOOLCHAIN_TOUCH="$FF_TOOLCHAIN_PATH/touch"
if [ ! -f "$FF_TOOLCHAIN_TOUCH" ]; then
    $ANDROID_NDK/build/tools/make-standalone-toolchain.sh \
        $FF_MAKE_TOOLCHAIN_FLAGS \
        --platform=$FF_ANDROID_PLATFORM \
        --toolchain=$FF_TOOLCHAIN_NAME
    touch $FF_TOOLCHAIN_TOUCH;
fi


#--------------------
echo ""
echo "--------------------"
echo "[*] check fdkaac env"
echo "--------------------"
export PATH=$FF_TOOLCHAIN_PATH/bin:$PATH

export COMMON_FF_CFG_FLAGS=

FF_CFG_FLAGS="$FF_CFG_FLAGS $COMMON_FF_CFG_FLAGS"

#--------------------
# Standard options:
FF_CFG_FLAGS="$FF_CFG_FLAGS --prefix=$FF_PREFIX"
FF_CFG_FLAGS="$FF_CFG_FLAGS --host=${FF_CROSS_PREFIX}"

#--------------------
echo ""
echo "--------------------"
echo "[*] configurate "
echo "--------------------"
echo "./Configure $FF_CFG_FLAGS"
#此處可以修改編譯選項
./Configure $FF_CFG_FLAGS
#        --extra-cflags="$FF_CFLAGS $FF_EXTRA_CFLAGS" \
#        --extra-ldflags="$FF_EXTRA_LDFLAGS"

#--------------------
make 
make install
rm -rf $FF_TOOLCHAIN_PATH


相關推薦

android通用編譯指令碼

# compile-common-android.sh #! /usr/bin/env bash # # Copyright (C) 2013-2014 Zhang Rui <[email protected]> # # Licensed under

分享一個Android平臺編譯指令碼

先說明使用方法 1:將內容copy到一個檔案,如檔名為mk,將此檔案加上可執行許可權 chmod +x mk 2:將mk檔案放於android頂層目錄 3:執行./mk會有提示如下: ^.^ example: ./mk full_g30p_5u-eng ^.^ exampl

Android 編譯指令碼解析 findleaves.py 解讀

最近在分析Android編譯,加上之前確實寫過關於findleaves.py的應用,今天找時間分析一下原理,也算是學習  #!/usr/bin/env python # # Copyright (C) 2009 The Android Open Source Project # # L

androidAndroid平臺通用編譯環境

Date: 2018.9.30 1、arm交叉編譯工具鏈使用 arm-linux-androideabi-gcc 2、android ndk下載: 3、Android平臺通用編譯環境 #!/bin/

Gradle Android最新自動化編譯指令碼教程(提供demo原始碼)

一、前言Gradle 是以 Groovy 語言為基礎,面向Java應用為主。基於DSL(領域特定語言)語法的自動化構建工具。上面這句話我覺得寫得很官方,大家只需知道Gradle可以用來android開發中進行多個專案依賴的自動化編譯指令碼,知道這點也就知道我們使用它的目的;為

指定Android Studio編譯工程時的源文件編碼

javac Coding 設置 odin images utf8編碼 androi mage nco 統一設置為UTF8編碼在工程的根目錄下的build.gradle文件中,添加定義。tasks. withType(JavaCompile) { options.enc

android編譯odex文件

lis 目錄 trac 依賴 andro xheditor span sys 放置 關於android的反編譯工具,相信大家並不陌生 如APK-TOOL,dex2jar APK-TOOL 用於反編譯出布局文件 下載地址http://code.google.co

cocos2d-x 移植到android編譯的一些問題:fatal error: Box2D/Box2D.h: No such file or directory&quot;

cocos2 app nal get dsc err 2dx ros blue 1、fatal error: Box2D/Box2D.h: No such file or directory" 須要加入box2d庫的支持,改動android.mk

android ndk 編譯的時候指令集的選取

文章 span tag androi ndk 有時 oca class word android ndk在編譯的時候默認生成的是thumb指令(拇指)不是arm(手臂)指令,但是有時候在看反匯編的時候,不太熟悉thumb指令或者說thumb指令看起來更費勁,需要生成arm指

Android 關於編譯ijkplayer下的so經驗分享

本地 pat 經驗 變量 一次 公司 https 調研 vmw 前言:公司最近需要做直播方面的技術調研,所以需要去研究播放器相關的技術;剛好本人github上收藏了ijkplayer,之前一直沒有研究過,現在剛好clone下來研究研究。 我先在Windows安裝c

Android】Ubuntu 16.04搭建Android開發編譯環境

jdk8 per 參考 prot google官網 markdown ins 由於 log 一. 通用Android環境和工具配置 1. 系統更新升級 sudo apt-get update sudo apt-get upgrade 2. 配置ntlmaps代理上網環境

【Cocos2d-x 3.0】遊戲開發之android交叉編譯

plain edit 100% b2c 令行 sdk 自己的路 smi bin 作者:Senlern 轉載請註明,原文鏈接:http://blog.csdn.net/zhang429350061/article/details/37959489 在上

Android系統編譯出錯

android 編譯出錯在Android7.1編譯過程中出現如下錯誤:Starting build with ninjaninja: Entering directory `.‘ [ 0% 8/30301] Ensure Jack server is installed and startedJack

android studio 編譯C文件出錯

android c1、還要在gradle.properties裏面加上這麽一句話:android.useDeprecatedNdk=true 2、打開app Module的build.gradle文件,在defaultConfig節點裏添加以下代碼 註意這裏的moduleName,是我們在之前自己編寫的類裏面

如何為Android平臺編譯 opencv3 和 opencv_contrib (Linux)

gre inter jni fuzzy dnn letter ott esc lis p { margin-bottom: 0.1in; direction: ltr; color: rgb(0, 0, 10); line-height: 120%; text-align:

OSG for android編譯總結

display article 原因 mat cygwin 動態鏈接 cep evel arr 最近對OSG進行了android下的編譯。簡單總結一下: 0.介紹下環境:WIN7 64位 + cygwin32位 + OSG3.2.0 1.首先介紹幾篇博文,參考了不少,但並沒

Android Studio編譯的時候提示Gradle無法下載的解決方案

target 單擊 拷貝 比較 file 版本 編譯 blank 方案 首先,打開android studio項目 找到項目目錄gradle\wrapper\gradle-wrapper.properties這個文件。內容如下:#Wed Apr 10 15:27:10 PD

基於 MVP 架構使用Android通用開發框架快速開發微博項目實戰

安卓 MVP 課程目標:基於 MVP 架構使用Android通用開發框架快速開發微博項目實戰適應人群:適合大學生和初中級android開發工程師,可以系統化的微博類APP的開發,系統化掌握商業化項目的開發。* 不斷豐富自己的知識,做有“錢”途的Android工程師課程簡介:《基於 MVP 架構使用An

加速Android Studio編譯速度

strip roi cache code mage -i ide wid 著作權 一、修改運行內存 進入項目,菜單欄-help-Edit Custom VM Option Paste_Image.png 添加或修改為: -Xms

android編譯

adbc nsh cef vfs weixin 反編譯 target get blank 轉自這位老鐵:https://www.jianshu.com/p/f5fadbc7d2f8 https://mp.weixin.qq.com/s?__biz=MzA5MzI3NjE2M