序文
私のコンピュータは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
- コンテナの内部に
sudo docker exec -it [容器id] /bin/bash
Androidのソースコンパイル済みの記事を設定するには、2 ... perlの構成環境
- ここで私は、コンパイルXposedBridge内のUbuntuにあった容器の内部xposedコンパイル(コンフィギュレーション・ファイルと出力ディレクトリを変更するに注意してください)、この利点は、あなたが環境を分けることができるということですJava8内部のUbuntuの設定は、コンテナの設定Java7の内側に、主に環境上の設定をインストールするのが面倒です、とにかく、マッピングは、同じソースディレクトリであります
- ホームホストのXposedToolsの下でプロジェクトが
./buile.pl -a java
XposedBridgeをコンパイルし始めました
- ホームホストのXposedToolsの下でプロジェクトが
- Xposedをコンパイルを開始
- コンパイル前XposedBridgeは、Javaディレクトリのフォルダの出力、Xposedプロジェクトにチェックするため
$aosp/frameworker/bash/cmds/xposed
で、xposed_art$aosp/art
オリジナルアートのソースディレクトリを置き換え、およびブランチの対応するソースコードのバージョンに切り替えます。 - ホームホストのXposedToolsの下でプロジェクトは
./buile.pl -t arm64:23
、Xposedをコンパイルし始めました
- コンパイル前XposedBridgeは、Javaディレクトリのフォルダの出力、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
このパス、次のソースディレクトリを見つけるために、次のコマンドを使用して
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/
友達リンクヨーヨーに歓迎し、いくつかのハイテクに精通した小さなパートナーを知ることを望みます