现在有很多系统app的开发,我不知道市面上的系统开发,是直接把软件植入了,还是也是做成apk包,在系统启动时自动加载,用的是何种方式;
接下来我介绍的一种就是类似与Settings这种,由系统绑定,整体代码在系统内,通过编译自身达到生产app的情况;
- 我会已我移植过的android上自带的terminal为例子;当然系统中已经有了Termianl,但它的功能无法满足我们的开发需求,所有我移植了一款源码,方便自己根据开发需求定制,另一方面这个的一直有些难度,在过程在碰到一些问题,更有代表性;
- 接下来进入正题;
首先明确路径
我们要移植的package工程,在package/apps/下边,你会发现系统所有的应用都在此处
我们会用到build下面的build/target/product/core.mk的配置文件,(此处是你的app能否被加载起来的关键)
再有,我们要有所需要的源码,一般github上的,都可用。当然也不乏一些拥有androidStudio的apk编译代码,它主要是通过gradle编译的,所以直接移入此类的是无法编译成功的,我们需要转译成通过.mk文件编译的,一边大致的目录结构;
一款应用,AndroidManifest.xml/Androd.mk/CleanSpeck.mk/res/src是不可缺少的,其他的jni,aidl看你的工程的需要。接下俩一点点分析,先说res|src两个文件夹,大家都知道res放的布局文件,配置信息,valuse属性等,src中就是我们的代码主题,这没什么可说的,直接移植进来就好。
- 接下来是我们的AndroidManifest.xml,清单配置文件,大家应该也都不陌生;
1 <?xml version="1.0" encoding="utf-8"?>
2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3 package="jackpal.androidterm"
4 android:versionName="1.0.70"
5 android:versionCode="71"
6 android:installLocation="auto">
7 <uses-feature android:name="android.hardware.touchscreen" android:required="false" />
8 <uses-permission android:name="android.permission.INTERNET" />
9 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
10 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
11 <uses-permission android:name="android.permission.ACCESS_SUPERUSER" />
12 <uses-permission android:name="android.permission.WAKE_LOCK" />
13 <permission android:name="jackpal.androidterm.permissi