你好这是RK3128 Android平台编译记录,使用环境如下:
1.Ubuntu16.04 LTS
2.gcc (使用gcc6.5,更高级版本python2.7.14存在编译问题)
1.
以及 rom 依赖选项在进行之前,首先需要确保环境编译。
1)环境安装项
sudo apt-get install git-core gnupg flex bison gperf libsd2-dev
libesd0-devxgtk2.8 -dev squashfs-tools build-essential zip curl
libncurses5-dev zlib1g-dev pngcrush schedtool libxml2 libxml2-utils
xsltproc lzop libc6-dev schedtool g++-multilib lib32z1-dev lib32ncurses5-dev
lib32readline-gplv2-dev gcc-multilib libswitch- perl
libssl1.0.0 libssl-dev
但是实际安装中,因为存在:libwxgtk2.8-dev lib32readline-gplv2-dev 所以没有已经
请使用:
sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev
libesd0-dev squashfs-tools build-essential zip curl
libncurses5-dev zlib1g-dev pngcrush schedtool libxml2 libxml2-utils
xsltproc lzop libc6-dev schedtool g++ -multilib lib32z1-dev lib32ncurses5-dev
gcc-multilib libswitch-perl
libssl1.0.0 libssl-dev添加
:
libwxgtk2.8-dev
sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt-get install libwxgtk2.8-dev 添加
:
lib32readline-gplv2-dev
sudo apt-get install lib32readline6-dev添加
:
libbz-dev checkpolicy
sudo apt-get install libbz2-dev
sudo apt-get install checkpolicy
2)软件安装依赖项
系统编译需要使用k7,如果系统中可以打开-jjd版本,但
不是1.7版本,而是自带1.7版本(直接有一个作用),直接添加了一个作用,kd的时候
使用了jk7 。
export ANDROID_SET_JAVA_HOME=true
如果系统是14.04,安装源里面有open-jdk源码路径,但是没有16.04了。
ubuntu 14.04
sudo apt-get install openjdk-7-jre 或者sudo apt-get install openjdk-7-jdk
ubuntu 16.04
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-7-
jdkjava存在多个版本的情况
配置
注意sudo update-alternatives --config java
sudo update-alternatives --config javac
2.编译中遇到的错误
1)error: unsupported reloc 43
这个问题是由于从Ubuntu14.04环境换成了16.04,具体原因是使用clangart是遇到
的问题,为什么使用clang而导致不使用gcc,这里可以
参考一下方法,解决。
https://github.com/gmacario/easy-jenkins/issues/88
libnativehelper/JniConstants.cpp:129:错误:不支持 reloc 43
libnativehelper/JniConstants.cpp:130:错误:不支持 reloc 43
libnativehelper/JniConstants.cpp:131 :错误:不支持 reloc 43
libnativehelper/JniConstants.cpp:132:错误:不支持 reloc 43
libnativehelper/JniConstants.cpp:133:错误:不支持 reloc 43
libnativehelper/JniConstants.cpp:134:错误:不支持 reloc 43
libnativehelper/JniConstants.cpp :135: 错误: 不支持的 reloc 43
libnativehelper/JniConstants.cpp:136: 错误: 不支持的 reloc 43
libnativehelper/JniConstants.cpp:137: 错误: 不支持的 reloc 43
libnativehelper/JniConstants.cpp:138: 错误: 不支持的 reloc 43
libnativehelper/JniConstants.cpp:139: 错误: 不支持 reloc 43
libnativehelper/JniConstants.cpp:140: 错误: 不支持 reloc 43
libnativehelper/toStringArray.cpp:21: 错误: 不支持 reloc 43
libnativehelper/toStringArray.cpp:21: 错误: 不支持reloc 43
libnativehelper/JniInvocation.cpp:40:错误:不支持 reloc 43
libnativehelper/JniInvocation.cpp:45:错误:不支持 reloc 43
libnativehelper/JniInvocation.cpp:165:错误:不支持 reloc 43
libnativehelper/JniInvocation.cpp:165:错误:不支持的 reloc 43
libnativehelper/JniInvocation.cpp:165:错误:不支持的 reloc 43
libnativehelper/JniInvocation.cpp:165:错误:不支持的 reloc 43
clang:错误:链接器命令失败,退出代码 1(使用 -v 查看调用)
build/core/host_shared_library_internal.mk:44:目标“out/host/linux-x86/obj32/lib/libnativehelper.so”的配方失败
make: *** [out/host/linux-x86/obj32/lib/libnativehelper.so] 错误 1
make: *** Waiting for unfinished jobs....
make: *** wait: 没有子进程。
解决方法一:修改mk文件,source_android修改修改,源路径【这会Android源码】1.mk
文件
cd
/art/build/
vim Android.common_build.mk //第119行
前:
#主机。
ART_HOST_CLANG := false
ifneq ($(WITHOUT_HOST_CLANG),true)
# 默认情况下,主机构建使用 clang 以获得更好的警告。
ART_HOST_CLANG := true
endif
修改后:
#主持人。
ART_HOST_CLANG := false
ifneq ($(WITHOUT_HOST_CLANG),false)
# 默认情况下,主机构建使用 clang 以获得更好的警告。
ART_HOST_CLANG := true
endif
2.cp文件
cp /usr/bin/ld.gold /prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6/x86_64-linux/bin/ld
3 .update一下
修改了上述代码之后,最好执行一次make update-api,在
解决方法二:通过环境禁止clang
export WITHOUT_HOST_CLANG=false
2)public_api.txt:20: error 5: added public field android.Manifest .permission.BACKUP
DroidDoc 耗时 87 秒。将文档写入 out/target/common/docs/api-stubs
DroidDoc 需要 84 秒。将文档写入 out/target/common/docs/system-api-stubs
目标 Dex:TeleService
目标 Dex:电信
目标 Dex:TelephonyProvider
检查 API:checkpublicapi-last
检查 API:checkpublicapi-current
检查 API:checksystemapi-last
检查 API:checksystemapi-current
frameworks/base/api/current.txt:20:错误 10:删除字段 android .Manifest.permission.BACKUP
frameworks/base/api/current.txt:82:错误 10:删除字段 android.Manifest.permission.INVOKE_CARRIER_SETUP
frameworks/base/api/current.txt:106:错误 10:删除字段 android.Manifest .permission.READ_PRIVILEGED_PHONE_STATE
frameworks/base/api/current.txt:116:错误 10:删除字段 android.Manifest.permission.RECEIVE_EMERGENCY_BROADCAST
************************ ********
您已尝试更改之前批准的 API。
要使这些错误消失,您有两种选择: 1) 您可以在上述 错误
中列出的方法等中添加“@hide”javadoc 注释。 2) 您可以通过执行以下命令来更新 current.txt: make update-api 要将修改后的 current.txt 提交到 Android 主存储库, 您需要获得批准。****************************** build/core/tasks/apicheck.mk:62: 目标'out/target/的配方common/obj/PACKAGING/checkpublicapi-current-timestamp' 失败make: *** [out/target/common/obj/PACKAGING/checkpublicapi-current-timestamp] 错误 38 make: *** Waiting for unfinished jobs....
情况,需要修改一下system/core/libutils/String8.cpp
参考:https://android.googlesource.com/platform/system/core/+/dd060f01f68ee0e633e9cae24c4e565cda2032bd%5E%21
diff --git a/libutils/String8 .cpp b/libutils/String8.cpp
索引 9092cbc..3323b82 100644
--- a/libutils/String8.cpp
+++ b/libutils/String8.cpp
@@ -424,7 +424,7 @@
next = len ;
}
- memcpy(buf + 尾,buf + 索引 + 跳过,下一个 - 索引 - 跳过);
+ memmove(buf + 尾,buf + 索引 + 跳过,下一个 - 索引 - 跳过);
尾 += 下一个 - 索引 - 跳过;
索引=下一个;
}
或者
sed -i '427s/memcpy/memmove/' ./system/core/libutils/String8.cpp
3.编译完成
再解决好所有出现的问题后,编译完成,出现:
#### make completed successfully (26:32 (mm:ss)) ####
TARGET_PRODUCT=rk312x
TARGET_HARDWARE=rk30board
IMG_TARGET=all , ota = withoutkernel
system fileysystem是 ext4
'kernel/arch/arm/boot/zImage' -> '/android-workspace/android/out/target/product/rk312x/kernel'
在没有内核的情况下创建 boot.img... 完成。
使用内核创建 recovery.img 并且没有资源...完成。
创建 misc.img.... 完成。
创建system.img ...完成。
创建装载机...完成。
创建uboot.img ...完成。
创建resource.img ...完成。
创建 kernel.img ...完成。
创建参数...完成。
萤火虫使图像完成!
你好这是RK3128 Android平台编译记录,使用环境如下:
1.Ubuntu16.04 LTS
2.gcc (使用gcc6.5,更高级版本python2.7.14存在编译问题)
1.
以及 rom 依赖选项在进行之前,首先需要确保环境编译。
1)环境安装项
sudo apt-get install git-core gnupg flex bison gperf libsd2-dev
libesd0-devxgtk2.8 -dev squashfs-tools build-essential zip curl
libncurses5-dev zlib1g-dev pngcrush schedtool libxml2 libxml2-utils
xsltproc lzop libc6-dev schedtool g++-multilib lib32z1-dev lib32ncurses5-dev
lib32readline-gplv2-dev gcc-multilib libswitch- perl
libssl1.0.0 libssl-dev
但是实际安装中,因为存在:libwxgtk2.8-dev lib32readline-gplv2-dev 所以没有已经
请使用:
sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev
libesd0-dev squashfs-tools build-essential zip curl
libncurses5-dev zlib1g-dev pngcrush schedtool libxml2 libxml2-utils
xsltproc lzop libc6-dev schedtool g++ -multilib lib32z1-dev lib32ncurses5-dev
gcc-multilib libswitch-perl
libssl1.0.0 libssl-dev添加
:
libwxgtk2.8-dev
sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt-get install libwxgtk2.8-dev 添加
:
lib32readline-gplv2-dev
sudo apt-get install lib32readline6-dev添加
:
libbz-dev checkpolicy
sudo apt-get install libbz2-dev
sudo apt-get install checkpolicy
2)软件安装依赖项
系统编译需要使用k7,如果系统中可以打开-jjd版本,但
不是1.7版本,而是自带1.7版本(直接有一个作用),直接添加了一个作用,kd的时候
使用了jk7 。
export ANDROID_SET_JAVA_HOME=true
如果系统是14.04,安装源里面有open-jdk源码路径,但是没有16.04了。
ubuntu 14.04
sudo apt-get install openjdk-7-jre 或者sudo apt-get install openjdk-7-jdk
ubuntu 16.04
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-7-
jdkjava存在多个版本的情况
配置
注意sudo update-alternatives --config java
sudo update-alternatives --config javac
2.编译中遇到的错误
1)error: unsupported reloc 43
这个问题是由于从Ubuntu14.04环境换成了16.04,具体原因是使用clangart是遇到
的问题,为什么使用clang而导致不使用gcc,这里可以
参考一下方法,解决。
https://github.com/gmacario/easy-jenkins/issues/88
libnativehelper/JniConstants.cpp:129:错误:不支持 reloc 43
libnativehelper/JniConstants.cpp:130:错误:不支持 reloc 43
libnativehelper/JniConstants.cpp:131 :错误:不支持 reloc 43
libnativehelper/JniConstants.cpp:132:错误:不支持 reloc 43
libnativehelper/JniConstants.cpp:133:错误:不支持 reloc 43
libnativehelper/JniConstants.cpp:134:错误:不支持 reloc 43
libnativehelper/JniConstants.cpp :135: 错误: 不支持的 reloc 43
libnativehelper/JniConstants.cpp:136: 错误: 不支持的 reloc 43
libnativehelper/JniConstants.cpp:137: 错误: 不支持的 reloc 43
libnativehelper/JniConstants.cpp:138: 错误: 不支持的 reloc 43
libnativehelper/JniConstants.cpp:139: 错误: 不支持 reloc 43
libnativehelper/JniConstants.cpp:140: 错误: 不支持 reloc 43
libnativehelper/toStringArray.cpp:21: 错误: 不支持 reloc 43
libnativehelper/toStringArray.cpp:21: 错误: 不支持reloc 43
libnativehelper/JniInvocation.cpp:40:错误:不支持 reloc 43
libnativehelper/JniInvocation.cpp:45:错误:不支持 reloc 43
libnativehelper/JniInvocation.cpp:165:错误:不支持 reloc 43
libnativehelper/JniInvocation.cpp:165:错误:不支持的 reloc 43
libnativehelper/JniInvocation.cpp:165:错误:不支持的 reloc 43
libnativehelper/JniInvocation.cpp:165:错误:不支持的 reloc 43
clang:错误:链接器命令失败,退出代码 1(使用 -v 查看调用)
build/core/host_shared_library_internal.mk:44:目标“out/host/linux-x86/obj32/lib/libnativehelper.so”的配方失败
make: *** [out/host/linux-x86/obj32/lib/libnativehelper.so] 错误 1
make: *** Waiting for unfinished jobs....
make: *** wait: 没有子进程。
解决方法一:修改mk文件,source_android修改修改,源路径【这会Android源码】1.mk
文件
cd
/art/build/
vim Android.common_build.mk //第119行
前:
#主机。
ART_HOST_CLANG := false
ifneq ($(WITHOUT_HOST_CLANG),true)
# 默认情况下,主机构建使用 clang 以获得更好的警告。
ART_HOST_CLANG := true
endif
修改后:
#主持人。
ART_HOST_CLANG := false
ifneq ($(WITHOUT_HOST_CLANG),false)
# 默认情况下,主机构建使用 clang 以获得更好的警告。
ART_HOST_CLANG := true
endif
2.cp文件
cp /usr/bin/ld.gold /prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6/x86_64-linux/bin/ld
3 .update一下
修改了上述代码之后,最好执行一次make update-api,在
解决方法二:通过环境禁止clang
export WITHOUT_HOST_CLANG=false
2)public_api.txt:20: error 5: added public field android.Manifest .permission.BACKUP
DroidDoc 耗时 87 秒。将文档写入 out/target/common/docs/api-stubs
DroidDoc 需要 84 秒。将文档写入 out/target/common/docs/system-api-stubs
目标 Dex:TeleService
目标 Dex:电信
目标 Dex:TelephonyProvider
检查 API:checkpublicapi-last
检查 API:checkpublicapi-current
检查 API:checksystemapi-last
检查 API:checksystemapi-current
frameworks/base/api/current.txt:20:错误 10:删除字段 android .Manifest.permission.BACKUP
frameworks/base/api/current.txt:82:错误 10:删除字段 android.Manifest.permission.INVOKE_CARRIER_SETUP
frameworks/base/api/current.txt:106:错误 10:删除字段 android.Manifest .permission.READ_PRIVILEGED_PHONE_STATE
frameworks/base/api/current.txt:116:错误 10:删除字段 android.Manifest.permission.RECEIVE_EMERGENCY_BROADCAST
************************ ********
您已尝试更改之前批准的 API。
要使这些错误消失,您有两种选择: 1) 您可以在上述 错误
中列出的方法等中添加“@hide”javadoc 注释。 2) 您可以通过执行以下命令来更新 current.txt: make update-api 要将修改后的 current.txt 提交到 Android 主存储库, 您需要获得批准。****************************** build/core/tasks/apicheck.mk:62: 目标'out/target/的配方common/obj/PACKAGING/checkpublicapi-current-timestamp' 失败make: *** [out/target/common/obj/PACKAGING/checkpublicapi-current-timestamp] 错误 38 make: *** Waiting for unfinished jobs....
情况,需要修改一下system/core/libutils/String8.cpp
参考:https://android.googlesource.com/platform/system/core/+/dd060f01f68ee0e633e9cae24c4e565cda2032bd%5E%21
diff --git a/libutils/String8 .cpp b/libutils/String8.cpp
索引 9092cbc..3323b82 100644
--- a/libutils/String8.cpp
+++ b/libutils/String8.cpp
@@ -424,7 +424,7 @@
next = len ;
}
- memcpy(buf + 尾,buf + 索引 + 跳过,下一个 - 索引 - 跳过);
+ memmove(buf + 尾,buf + 索引 + 跳过,下一个 - 索引 - 跳过);
尾 += 下一个 - 索引 - 跳过;
索引=下一个;
}
或者
sed -i '427s/memcpy/memmove/' ./system/core/libutils/String8.cpp
3.编译完成
再解决好所有出现的问题后,编译完成,出现:
#### make completed successfully (26:32 (mm:ss)) ####
TARGET_PRODUCT=rk312x
TARGET_HARDWARE=rk30board
IMG_TARGET=all , ota = withoutkernel
system fileysystem是 ext4
'kernel/arch/arm/boot/zImage' -> '/android-workspace/android/out/target/product/rk312x/kernel'
在没有内核的情况下创建 boot.img... 完成。
使用内核创建 recovery.img 并且没有资源...完成。
创建 misc.img.... 完成。
创建system.img ...完成。
创建装载机...完成。
创建uboot.img ...完成。
创建resource.img ...完成。
创建 kernel.img ...完成。
创建参数...完成。
萤火虫使图像完成!
举报