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

本文详细介绍了如何使用repo工具下载高通定制的Android源码,包括替换下载源、选择版本及常见编译错误解决方法,如mm单编应用失败、系统签名失败等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

高通Android源码下载记录

简介

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

高通Android源码下载

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

下载repo工具

git clone git://codeaurora.org/tools/repo.git

把里面的repo文件拷贝到~/bin/repo路径下,并添加执行权限:

sudo chmod +x ~/bin/repo

替换repo的下载源,因为repo默认的源是git://android.git.kernel.org/tools/repo.git,此地址比较慢,把REPO_URL替换为以下:

 REPO_URL='git://codeaurora.org/tools/repo.git'

下载具体的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

-m 后就是紧跟的Android版本信息,可以在高通源码版本列表选择你需要的版本;这里可能会遇到问题,提示找不到公钥public key:

gpg: Can't check signature: No public key

解决办法把–repo-url及其以后的命令删除掉后,在执行一次即可!

最后,执行

repo sync

就下载下来了!

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


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

源码中添加aidl服务

添加aidl级别的系统服务,按照Android源码添加aidl服务进行操作,主要是编写

  • 编写aidl接口
  • 编写aidl的服务service
  • 编写aidl的客户端manager
  • 系统启动时将service加入到binder服务列表

最后,不要忘了给这个服务添加权限,在一些servie文件中;其中上面文章没有提到的,在编写完aidl服务后,我们需要执行make update-api命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅气好男人_Jack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值