Ubuntu24.10编译Android12源码并运行于模拟器中

效果如下:

 

初始化环境:

 运行lunch弹出对应目标

生成模拟器版本镜像

 

 

镜像生成成功

 生成模拟器启动镜像

 

编译注意事项:  

24.10版本:

sudo apt install curl
curl -sSL  'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo
chmod a+x ~/bin/repo

增加如下软链:

sudo ln -s /usr/bin/python3 /usr/bin/python

 

git config --global user.name "tonyimax"

 

git config --global user.email "lin_hong_quan_msn@hotmail.com"

 

修改系统配置:

等号后 1 改为 0  

 

 

编译前先安装下面依赖:

sudo apt-get install gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses6 lib32ncurses6 x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

初始化Android 12 仓库:

repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b  android-12.1.0_r5

同步源码:

repo sync -j4

### 将C#代码编译为适用于Android平台的.so库 为了在Ubuntu 24.10上将C#代码编译成可以在Android平台上使用的共享库(`.so` 文件),可以采用Mono项目中的工具链来完成此操作。具体过程涉及几个关键技术组件和步骤。 #### 使用Mono开发环境准备 首先,在Ubuntu环境中安装必要的软件包,包括但不限于Mono运行时和支持AOT (Ahead-of-Time) 编译的功能: ```bash sudo apt-get update && sudo apt-get install mono-complete ``` 这一步骤确保了系统中有足够的资源来进行后续的操作[^3]。 #### 创建配置C#源码 创建一个新的C#类库项目,编写目标功能逻辑。考虑到最终产物是一个原生支持的动态链接库,应避免依赖于任何仅限.NET框架特有的特性或API调用。对于希望暴露给Java层的方法,需标记为`public static extern`以便通过JNI接口访问这些方法。 #### AOT编译选项设置 由于Android设备上的Dalvik/ART虚拟机无法直接执行由CLR产生的中间语言(IL),因此需要提前把IL转换为目标架构(ARM/x86等)的具体机器指令集。可以通过mono --aot命令实现这一点: ```bash mkbundle -o output_file input_assemblies --static --deps \ --platform=arm --cross=aarch64-linux-android-clang \ --sdk=/path/to/android/sdk/platforms/android-version/arch-arm/usr/lib/ ``` 这里指定了交叉编译器路径以及SDK位置,同时选择了静态链接方式减少对外部依赖的需求[^4]。 #### 打包成为.so文件 经过上述处理之后得到的是一个可执行文件形式的结果;然而,为了让它能在Android应用里作为插件加载,则还需要进一步加工——即利用objcopy工具将其转化为标准ELF格式下的共享对象(shared object): ```bash llvm-objcopy -O elf64-littleaarch64 --redefine-sym _start=_fini \ --strip-all output_file liboutput.so ``` 此时便获得了名为liboutput.so的目标文件,该文件可以直接嵌入到APK之中供应用程序使用[^5]。 #### 集成至Android工程 最后阶段是在安卓项目的build.gradle中加入如下配置片段以包含新生成的本地库: ```gradle android { ... sourceSets.main { jniLibs.srcDirs = ['libs'] } } ``` 将之前制作好的.so放置于对应目录下(如app/libs/<abi>/)。这样就可以像平常一样通过JNI机制调用了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

自由软件开发者

有你的鼓励,我会更加努力。

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

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

打赏作者

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

抵扣说明:

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

余额充值