ドッカー環境アンドロイドソースでコンパイル|コンパイラはxposedを実行することができます

序文

私のコンピュータはUbuntu18バージョンであるため、成功した後、起動するすべての環境を確認していない携帯電話にxposedブラシをコンパイルし、問題がない、問題は、図書館システムのUbuntuと互換性が見つけることができるが、私は、結局、少しシステムを再インストールすることはできません愚かな最善の方法は、Ubuntuのコンテナのドッキングウィンドウのコンパイルであるように、統一された環境はまた、通常の環境から単離することができる
開発環境を動作し、以下の動作を開始しました

インストールの設定]ドッキングウィンドウ

人に優しい画像アドレスのドッキングウィンドウ加速採択

デーモンの設定ファイルを変更することにより/etc/docker/daemon.jsonアクセラレータを使用するには、次のコマンドを実行します。

あなたは、デーモンは、デフォルトでドッカードッカー公式ミラーアクセラレーションを使用して設定することができます。だから、ミラーミラーは、それぞれが引く際に指定せずに、公式で加速し、デフォルトを引くことができますregistry.docker-cn.com

一時的な効果:あなたはパス--registryミラーパラメータプロセスを守ることができますがドッカーで開始しました:$ docker --registry-mirror=https://registry.docker-cn.com daemon

変更する場合が永久的主題、あなたは/etc/docker/daemon.jsonファイルを変更し、レジストリミラーキーを追加することができます。

$ sudo mkdir -p /etc/docker
$ sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

Ubuntuのミラーを引っ張ります

我々はシステムをコンパイルしているのでアンドロイド6.0で、コンパイルするのUbuntuに14.04 x64システムを使用してトラブルを大幅に節約することをお勧めします(例:コンパイラのバージョン、キットのバージョンを構築する、などの非互換性の問題としてバージョン依存)私たちがドッキングウィンドウを使用する理由です、理由。

次のコマンドを実行すると、スナップショットを取ります。
$ sudo docker pull ubuntu:14.04 # docker默认都是64位系统

クエリのローカルミラー

クエリ既存のローカルミラー(そのミラー番号-image IDに注意してください)

$ sudo docker images

misty@ubuntu:/etc/docker$ sudo docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
ubuntu               14.04               2c5e00d77a67        6 weeks ago         188MB
rethinkdb            latest              cc5badcd88e8        7 weeks ago         184MB
nginx                latest              53f3fd8007f7        7 weeks ago         109MB
openstf/stf          latest              f8f8d84596a0        7 weeks ago         784MB
sorccu/adb           latest              7123ee61b746        15 months ago       30.5MB
openstf/ambassador   latest              b1f0eb8297cf        3 years ago         6.46MB

地元のコンテナをチェック

misty@ubuntu:/etc/docker$ sudo docker ps -a

ブートイメージ

本明細書中で使用される仓库:标签方法をsudo docker run -it ubuntu:14.04 /bin/bash、あなたが得るように、擬似端末

# 启动镜像,并获取一个伪终端
# 注意:实际启动的是容器,启动镜像时会自动创建新容器并启动。
$ sudo docker run -it <REPOSITORY:TAG> /bin/bash   # 使用  仓库名+标签 启动
$ sudo docker run -it <IMAGE ID> /bin/bash     # 使用 IMAGE ID 启动
# 退出镜像
>> $ exit   # 或使用快捷键 Ctrl + D

システムのソースを交換してください

これは、ここで使用されるようだvi、リダイレクトの方法を使用して書くことが推奨され、少し問題になるの設定]ドッキングウィンドウの参照画像アドレスを変更します

>> # cp /etc/apt/sources.list /etc/apt/sources.list.bak
>> # echo "新的数据源" > /etc/apt/sources.list  // 使用新的数源替换
>> # apt-get update
>> # exit
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

中国の言語サポートを追加

中国の言語サポートを追加
Ubuntuはやる容器の内部に指定されたコンテナを開始した後:

>> $ locale       #查询当前语言
>> $ locale -a    #查询支持的语言
# 若不支持UTF-8,则添加UTF-8语言支持
>> $ apt-get install language-pack-zh-hant language-pack-zh-hans # 中文
>> $ language-pack-en # 英文
# 修改 /etc/profile 文件,添加:
export LANG=zh_CN.UTF-8
export LANGUAGE=zh_CN:zh
# 重新加载资源
>> $ source /etc/profile

正しいタイムゾーン

起動後Ubuntuは、コンテナの内部にコンテナを指定し実行します。

>> $ date  # 查看当前时间
>> $ cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
>> $ echo 'Asia/Shanghai' >/etc/timezone

コンパイル特殊なミラーの設定

次のコマンドを使用してコンテナを作成し、マウント~/shareコンテナにディレクトリを/home/shareカタログ:
$ docker run -it -v ~/share:/home/share ubuntu:14.04 /bin/bash

説明:ここでは、ディレクトリは、将来の事業を促進するために、コンテナをマウントします。

64ビットから32ビットシステムでサポートされている追加
サポートするかどうかを確認する> 1を

>> $ dpkg --print-architecture     # 若支持,输出 amd64
>> $ dpkg --print-foreign-architectures    # 若支持,输出 i386

手動で開いサポート

>> $ sudo dpkg --add-architecture i386
>> $ sudo apt-get update

すべてのソフトウェアを更新します(必要ありません)
>> $ sudo apt-get dist-upgrade

サポート・ライブラリ(IA32-LIBSをインストールするには、元の必要性、現在、以下の3つのライブラリに置き換えられての)のみをインストールします

$ sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0

Androidのソースコードコンパイラ必要な依存関係を追加し
、コンパイラをインストールして、ツールのパッケージをビルドします:

$ sudo apt-get install gcc-multilib g++-multilib build-essential

必要なソフトウェア・ツールをインストールします。

>> $ sudo apt-get install git-core gnupg bison flex gperf pngcrush bc zip curl lzop 
>> $ sudo apt-get install schedtool libxml2 libxml2-utils xsltproc squashfs-tools 

必要に応じて追加のライブラリをインストールします。

>> $ sudo apt-get install libesd0-dev libsdl1.2-dev libwxgtk2.8-dev libswitch-perl 
>> $ sudo apt-get install libssl1.0.0 libssl-dev lib32readline-gplv2-dev libncurses5-dev

附属書:コマンド:

bc           命令行计算器
lzop             快速压缩工具
flex             词法分析器生成器
curl             基于URL的文件传输工具
gperf            哈希函数生成器
bison            语法分析器生成器
xsltproc         快速XSLT引擎,可以通过XSL文件把XML转为HTML,XHTML,PDF...
schedtool        查询或设置CPU状态
squashfs-tools       linux内核压缩工具,只读式压缩文件系统Image
pngcrush         批量压缩PNG图片
libxml2 libxml2-utils    操作XML文档工具

コンテナは、ミラーを提出しているセーブ

環境を構成した後、鏡のような容器を保存します:

$ sudo docker commit -m "xxx" <CONTAINER ID> <TEPO:TAG>

たとえば、使用$ docker ps -a、我々はローカルミラーとして保存するだけで1a61adfb1953ためのコマンドクエリコンテナの番号を、あなたが行うことができます。

$ sudo docker commit -m "local_ubuntu14" 7e242d3a00ae local_ubuntu14:ubuntu_v1.0

$ドッカー画像は、新たに生成された画像を使用して表示することができます。

misty@ubuntu:~/share$ sudo docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
local_ubuntu14       ubuntu_v1.0         97793b37c017        15 seconds ago      796MB
ubuntu               14.04               2c5e00d77a67        6 weeks ago         188MB
rethinkdb            latest              cc5badcd88e8        7 weeks ago         184MB
nginx                latest              53f3fd8007f7        7 weeks ago         109MB
openstf/stf          latest              f8f8d84596a0        7 weeks ago         784MB
sorccu/adb           latest              7123ee61b746        15 months ago       30.5MB
openstf/ambassador   latest              b1f0eb8297cf        3 years ago         6.46MB

ローカルミラーを提出し始め、コンテナ、ソースディレクトリのAndroidミラーディレクトリAOSPをマウントするホストのホスト
sudo docker run -it -v ~/bin:/home/aosp local_ubuntu14 /bin/bash

コンパイラー環境の前の準備 - 環境リスト

ホストシステム:ubuntu18.0.4LTS
ホスト:Javaバージョン「1.8.0_211」
ドッカーServerバージョン:18.09.5
カーネルバージョン:4.18.0-25-一般的な
ミラー:Ubuntuの14.04
アンドロイド-6.0.1_r11:コンテナのソースバージョンでの
コンテナのJavaバージョン:Javaバージョン"1.7.0_201"

使用する前にコンパイルします

  • ドッキングウィンドウ関連文書はしている/var/lib/dockerディレクトリ

私はAndroidのソースコードをコンパイルし始め、xposed

  1. コンテナの内部にsudo docker exec -it [容器id] /bin/bash

Androidのソースコンパイル済みの記事を設定するには、2 ... perlの構成環境

  1. ここで私は、コンパイルXposedBridge内のUbuntuにあった容器の内部xposedコンパイル(コンフィギュレーション・ファイルと出力ディレクトリを変更するに注意してください)、この利点は、あなたが環境を分けることができるということですJava8内部のUbuntuの設定は、コンテナの設定Java7の内側に、主に環境上の設定をインストールするのが面倒です、とにかく、マッピングは、同じソースディレクトリであります
    • ホームホストのXposedToolsの下でプロジェクトが./buile.pl -a javaXposedBridgeをコンパイルし始めました
  2. Xposedをコンパイルを開始
    • コンパイル前XposedBridgeは、Javaディレクトリのフォルダの出力、Xposedプロジェクトにチェックするため$aosp/frameworker/bash/cmds/xposedで、xposed_art $aosp/artオリジナルアートのソースディレクトリを置き換え、およびブランチの対応するソースコードのバージョンに切り替えます。
    • ホームホストのXposedToolsの下でプロジェクトは./buile.pl -t arm64:23、Xposedをコンパイルし始めました

一般的な問題解決

USER問題(ドッカーの操作による、ユーザ環境変数が設定されていません)

including ./tools/external/fat32lib/Android.mk ...
Install: out/host/linux-x86/framework/jack.jar
out/host/linux-x86/bin/jack-admin: line 27: USER: unbound variable
make: *** [out/host/linux-x86/framework/jack.jar] Error 1
make: *** Deleting file `out/host/linux-x86/framework/jack.jar'

#### make failed to build some targets (41 seconds) ####

ソリューション:

  • export USER=$(whoami)
  • またENV USER root、//また、彼らが必要とする名前にすることができます

詳細なエラーログ

Last 10 lines from the log:
   target Unpacked: patchoat (out/target/product/generic_arm64/obj_arm/EXECUTABLES/patchoat_intermediates/PACKED/patchoat)
   target Symbolic: patchoat (out/target/product/generic_arm64/symbols/system/bin/patchoat)
   target Strip: patchoat (out/target/product/generic_arm64/obj_arm/EXECUTABLES/patchoat_intermediates/patchoat)
   Install: out/target/product/generic_arm64/system/bin/patchoat
   collect2: error: ld returned 1 exit status
   make: *** [out/target/product/generic_arm64/obj_arm/SHARED_LIBRARIES/libxposed_art_intermediates/LINKED/libxposed_art.so] Error 1
   make: *** Waiting for unfinished jobs....
   
   #### make failed to build some targets (04:32 (mm:ss)) ####

そのためUbuntu18前にコンパイルされたソースコードを直接実行するためにソースディレクトリに、この問題の出現を引き継ぐgit status発見はguthubのart6.0対応する点にCANGエディタ、よく、直接還元環境、再プルxposed_artを変更し、本当にこの問題を持っていない、そして成功したことにより、コンパイル、再コンパイル

ブートインタフェースカード決済

起動画面で電話カードへのコンパイルが成功ブラシの後、アクセスログ

Failed to dlopen libart.so: dlopen failed: cannot locate symbol "__android_log_error_write" referenced by "/system/lib64/libart.so"...

あなたのライブラリーにAndroid.mkコンパイルスクリプトエラーがlibxxx.so追加してください:LOCAL_LDFLAGS + = -fuse-LD = BFD

# 直接追加的方式
ifeq (1,$(strip $(shell expr $(PLATFORM_SDK_VERSION) \>= 22)))
  LOCAL_WHOLE_STATIC_LIBRARIES := libsigchain
  LOCAL_LDFLAGS := -Wl,--version-script,art/sigchainlib/version-script.txt -Wl,--export-dynamic
  LOCAL_LDFLAGS += -fuse-ld=bfd
endif

このターンの後、報告されることがあります。「安全= -icf」認識できないオプションを

案の定、次のコンパイルエラー修正後

Last 10 lines from the log:
   target Symbolic: xposed (out/target/product/generic_arm64/symbols/system/bin/app_process64_xposed)
   target Strip (keep symbols): xposed (out/target/product/generic_arm64/obj/EXECUTABLES/xposed_intermediates/app_process64_xposed)
   /home/aosp/WORKING_DIRECTORY/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/../lib/gcc/arm-linux-androideabi/4.9.x-google/../../../../arm-linux-androideabi/bin/ld.bfd: unrecognized option '--icf=safe'
   /home/aosp/WORKING_DIRECTORY/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/../lib/gcc/arm-linux-androideabi/4.9.x-google/../../../../arm-linux-androideabi/bin/ld.bfd: use the --help option for usage information
   collect2: error: ld returned 1 exit status
   make: *** [out/target/product/generic_arm64/obj_arm/EXECUTABLES/xposed_intermediates/LINKED/app_process32_xposed] Error 1
   make: *** Waiting for unfinished jobs....

   #### make failed to build some targets (43 seconds) ####

解決策:
変更TARGET_linux-arm.mkのP134ラインTARGET_GLOBAL_LDFLAGS、割り当てを削除–icf=safe
IMG

このパス、次のソースディレクトリを見つけるために、次のコマンドを使用してfind ./ -iname TARGET_linux-arm.mk
パスがあります$aosp/build/core/combo/TARGET_linux-arm.mk

成功した統合環境、電話完璧な実行にブラシを再構成することによって、問題を解決した後、ちょうど、上記の二つの方法を試してみてください実際には、問題を解決しない、第二は渡すことはできませんコンパイラの直接の結果であります

ルートパーティションのために提出正常にコンパイルコンテナがいっぱいにリードをミラーリング

sudo docker commit "commit images" [containerId] myaosp:v1.0 ;

ああ、完全なルートディレクトリの半分を行い、かつ迅速にするためにctrl +c終了し、それは容器内の私と一緒にディレクトリAOSPホストをマウントして、新しいAOSP関係を引くことができ、データが多すぎる、
ソリューション:
一時的な解決策は:オンラインで見つけますLinuxの操作性の感覚をクリーンアップする方法の多くは、結局、クリーンアップファイルまたは慎重に良いと関連の強いものではなく、戻って解放への移行を望んでいない、それの最初の部分は、ドッキングウィンドウを再起動するためにリリースされました

启动 systemctl start docker (这条命令即可)
守护进程重启 sudo systemctl daemon-reload
重启docker服务 systemctl restart docker
重启docker服务 sudo service docker restart
关闭docker service docker stop
关闭docker systemctl stop docker

最後に書かれました

ブロガーに感謝する参照が提供ドッカーAndroidシステムのソースコードのコンパイルの使用を

確かに幸運小

每一丝灵感都值得被记录,每一笔记录都是成长,每一点成长都值得欢呼

個人ブロガーの駅:www.imisty.cn
CSDNブログ:https://blog.csdn.net/lookinthefog
ブログパーク:https://imist.cnblogs.com/

友達リンクヨーヨーに歓迎し、いくつかのハイテクに精通した小さなパートナーを知ることを望みます

おすすめ

転載: www.cnblogs.com/imist/p/11417602.html