高通Android源码下载及相关问题

高通Android源码下载记录

简介

android源码一般最初是由Google发布,但是高通作为移动芯片厂商,占据了全球大部分手机芯片市场份额;所以,一般在Google发布Android源码后,高通都会根据自己的芯片如8950等进行适配,对android源码进行改造适配移植,形成自己的android源码以及ROM,可以说凡是用到高通芯片的手机厂商,一般都是基于高通的android源码进行修改的;

高通Android源码下载

同android原版源码下载一样,也是用repo方式下载,下载流程也一样,不同的是下载域名不一样

下载repo工具

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

在这里我遇到了这个storage.googleapis.com网址无法访问,错误是我的电脑连接到了代理,导致直接提示拒绝连接,而且是连接到127.0.0.1环回地址,办法就是取消代理,直接在命令行输入:
export HTTP_PROXY=
export HTTPS_PROXY=
到这里就下载repo

下载具体的Android版本

repo init -u git://codeaurora.org/platform/manifest.git -b release -m 
LA.UM.6.6.r1-10100-89xx.0.xml --repo-url=git://codeaurora.org/tools/repo.git 
--repo-branch=caf-stable

这里就是指定下载具体的android版本,可以在高通源码版本列表选择你需要的版本;楼主这里也遇到问题,提示 没有找到RSA公钥

大致原理,就是使用repo工具下载,这个repo下载方式是RSA非对称加密算法,没有找到服务端发过来的公钥,问题就是第一步下载的repo不对,因为网上有各种教程通过git下载啊!或者把repo init后源码的.repo里面隐藏的repo文件拷贝到第一步,这些都是不对的,只有从正确的网址里面下到repo,才能和真正的高通服务器建立连接,才能下载

然后就下载下来了!

重点来了,请注意! 就算你按照上面的步骤下载下来后,编译仍然失败的!为什么呢?因为还差部分私有文件和补丁,这部分代码个人是拿不到的,必须要找合作商要


mm单编应用失败问题

问题描述:
ninja: error: ‘out/target/common/obj/JAVA_LIBRARIES/sdk_v26_intermediates/classes.dex.toc’, needed by ‘out/target/common/obj/APPS/_intermediates/with-local/classes.dex’, missing and no known rule to make it
10:48:28 ninja failed with: exit status 1
在这里插入图片描述
问题大意是说sdk_v26_intermediates目录下为了生成classes.dex.toc这个文件,需要APPS/_intermediates/with-local/classes.dex的dex文件,没有规则来创建他们

解决办法
问题原因是我们制定的sdk版本26这个class.dex.toc需要重新生成,我们需要手动生成一个,这个就参考网上的办法Android: How to generate classes.dex.toc files?

另一个解决办法,是由于我们制定的SDK版本与Android源码版本不一致导致的,所以需要重新生成,这个解决办法就是制定SDK版本为current即可,因为当前版本已经在编译系统时生成了,就不需要再次生成了


为APK系统签名失败

Exception in thread "main" java.lang.ExceptionInInitializerError
	at org.conscrypt.OpenSSLBIOInputStream.<init>(OpenSSLBIOInputStream.java:34)
	at org.conscrypt.OpenSSLX509Certificate.fromX509PemInputStream(OpenSSLX509Certificate.java:129)
	at org.conscrypt.OpenSSLX509CertificateFactory$1.fromX509PemInputStream(OpenSSLX509CertificateFactory.java:226)
	at org.conscrypt.OpenSSLX509CertificateFactory$1.fromX509PemInputStream(OpenSSLX509CertificateFactory.java:222)
	at org.conscrypt.OpenSSLX509CertificateFactory$Parser.generateItem(OpenSSLX509CertificateFactory.java:100)
	at org.conscrypt.OpenSSLX509CertificateFactory.engineGenerateCertificate(OpenSSLX509CertificateFactory.java:278)
	at java.security.cert.CertificateFactory.generateCertificate(CertificateFactory.java:339)
	at com.android.signapk.SignApk.readPublicKey(SignApk.java:184)
	at com.android.signapk.SignApk.main(SignApk.java:1007)
Caused by: java.lang.IllegalArgumentException: Failed to load any of the given libraries: [conscrypt_openjdk_jni-linux-x86_64, conscrypt_openjdk_jni-linux-x86_64-fedora, conscrypt_openjdk_jni]
	at org.conscrypt.NativeLibraryLoader.loadFirstAvailable(NativeLibraryLoader.java:176)
	at org.conscrypt.NativeCryptoJni.init(NativeCryptoJni.java:49)
	at org.conscrypt.NativeCrypto.<clinit>(NativeCrypto.java:53)
	... 9 more

从错误提示来看加载conscrypt_openjdk_jni-linux-x86_64, conscrypt_openjdk_jni-linux-x86_64-fedora, conscrypt_openjdk_jni这三个库时失败,所以需要提供上面三个任意一个库即可;那这个库在哪里呢?使用find搜索编译后的目录就找到了:

find /源码根目录/out/host/ -iname libconscrypt_openjdk_jni.so

在这里插入图片描述
搜出来有很多个,不一定每个都能签名成功,涉及到库底层位数的问题,可以一个一个试,签名即可!
以下是我写的一个签名工具:

#!/bin/bash
# android app系统签名,使用工具来源于msm8953_810_LA301下的工具源码
# $1 未签名apk
# $2 签名后的apk名称
echo "Android App系统签名工具"
if [ ! $1 ] || [ ! $2 ]; then
	echo "usage: \n参数一 未签名apk  参数二 签名后apk名称\n"
	echo "输入参数为空,错误!"
	exit 1;
fi
# 已把把相关的jar包和库都放到../third/目录下
java -Djava.library.path=../third/ -jar ~/Library/third/signapk.jar ~/Library/third/platform.x509.pem ~/Library/third/platform.pk8 $1 $2

猜你喜欢

转载自blog.csdn.net/jackzhouyu/article/details/106973281