Android Studio搭建系统App开发环境
一.前言
在Android的体系中开发普通app使用Android Studio这一利器会非常的方便。但是开发系统app可能就会有些吃力,不过经过一些配置仍然会
很简单。我们知道系统app因为涉及到一些系统API和系统权限的原因,需要使用系统级别的签名才行,也就是platform签名。同时在Studio中
直接调用系统API是不可行的。使用Android Studio开发系统app,所要解决的其实也就是这两个问题。
二.目录
1.配置前的准备
2.在Android Studio中调用系统API
3.通过Android Studio直接运行系统APP在设备上
三.实际解决
1.配置前的准备
1.可用的Android Studio。
2.Android源码环境,并且已经编译过了
3.下载keytool-importkeypair https://github.com/getfatday/keytool-importkeypair
2.在Android Studio中调用系统API
1.打开Android Studio,创建一个普通的Android工程。
2.进入Android源码环境,将out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes-full-debug.jar
拷贝的你的Android工程的libs目录下,并且将其重命名为framework.jar,并且添加到环境变量中(在studio中右击后选择add as library)
3.在你的Android工程(不是app的)的build.gradle中添加如下内容:
gradle.projectsEvaluated {
tasks.withType(JavaCompile){
options.compilerArgs.add('-Xbootclasspath/p:yourpath/app/libs/framework.jar')
}
}
注意这是添加在allprojects中和repositories为同级。如果配置到此的话,你在编译app的时候就会报出数组越界的错误,这是因为app在打包的时候会把framework.jar也打进去,导致了方法数超过了64K。
4.在app的build.gradle中的第一行添加如下内容
compileOnly files('libs/framework.jar')
这句话的意思是以只读的方式打开framework.jar,在打包app的时候不会将其打包进去。这就解决了方法数超过64k的问题了
5.做到第四步的时候,你会发现你调用系统API的时候仍然会报错,而且不进行提示。这是因为Android Studio默认搜索的SDK的
优先级是高于你所引入的framework.jar的。
工程目录结构下在app/app.iml中,将<orderEntry type="jdk" jdkName="Android API 27 Platform" jdkType="Android SDK" />
放到最后便可。
3.通过Android Studio直接运行系统app在设备上
要解决这个问题其实有两种思路能够解决。首先我们要明确Android源码中的系统app之所以能使用系统的API和一些系统权限,是因为在Android.mk文件指定了签名使用系统级别的platform。即LOCAL_CERTIFICATE := platform。而在Android Studio中直接Run的app使用的是普通的开发者签名jks。那么第一种思路就是我们只需要将系统签名引入到jks中便可,这也是下面要介绍的。还有一种思路,其实在Android系统中的MAC机制也就是SEAndroid,会通过签名和包名两种机制来为Android程序进程设置Type。所以我们可以根据这个思路,想到将我们开发的app的包名添加到SEAndroid设置Type的机制中。这样你的app不需要成为系统app都可以使用一些系统的资源了。当然第二种思路会很复杂,所以仅仅作为一种思路。下面是第一种思路的实施方法。
1.在Android Studio中build->Generate Signed APK,之后输入密码别名等,生成一个你自己的新的jks文件。
2.在Android 源码环境中,进入build/target/product/security将platform.pk8,platform.x509.pem和第一步生成的jks放在一个目录中。
3.在linux环境中,建议为ubuntu.将keytool-importkeypair下载后,你可以将keytool-importkeypair这个可执行文件和jks等放到一个目录中。执行
./keytool-importkeypair -k jks的文件名 -p jks的密码 -pk8 platform.pk8 -cert platform.x509.pem -alias jks的别名
这就话可以将系统签名引入到jks中。接下来只需要在Android Studio Run的时候对app签名时使用这个签名就可以了
4.在Android工程中,将如下内容添加到app的build.gradle中便可。
signingConfigs{
release {
storeFile file("yourpath/SignSys.jks")
storePassword 'jks的密码'
keyAlias "jks的别名"
keyPassword 'jks的密码'
}
debug {
storeFile file("yourpath/SignSys.jks")
storePassword 'jks的密码'
keyAlias "jks的别名"
keyPassword 'jks的密码'
}
}
需要注意的是这段内容和defaultConfigs是同级的,以及如果是在Ubuntu环境下,你的jks如果是放在home主目录下的。请用你的/home/username代替~,不然可能会找不到jks文件。
5.为你的app打上系统app的标记。
在app的AndroidManifest.xml中添加android:sharedUserId="android.uid.system"
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="xxxxr"
android:sharedUserId="android.uid.system"
>
到此你就可以直接让你的app以系统app的身份直接Run在你的设备上了
Android Studio搭建系统App开发环境的更多相关文章
- 干货分享:在Windows下使用Visual Studio搭建C语言开发环境
前言:本文将教大家如何使用 VIsual Studio Code 搭建 C 语言开发环境,包括使用 VS Code 如何编译和调试 C 语言程序,需要 用到的工具有 Visual Studio Cod ...
- Android studio ocr初级app开发问题汇总(含工程代码)
博客第一篇文章,稍作修改,增加文字介绍 开发目的 最近由于某些需求,需要在Android手机端实现OCR功能,大致为通过手机照相,识别出相片中的中文信息字段.但是由于新手光环+流程不熟悉,遇到了各种各 ...
- Android Studio 2.2 NDK开发环境搭建
转载请标明出处:http://blog.csdn.net/shensky711/article/details/52763192 本文出自: [HansChen的博客] Android应用程序使用ND ...
- 全志A33 lichee 搭建Qt App开发环境编写helloworld
开发平台 * 芯灵思SinlinxA33开发板 淘宝店铺: https://sinlinx.taobao.com/ 嵌入式linux 开发板交流 QQ:641395230 Step 1 在虚拟机(Ce ...
- Android开发新手学习总结(一)——使用Android Studio搭建Android集成开发环境
[新手连载]一:使用Android Studio搭建Android集成开发环境http://bbs.itcast.cn/forum.php?mod=viewthread&tid=87055&a ...
- 使用Android Studio搭建Android集成开发环境
有很长一段时间没有更新博客了,最近实在是太忙了,没有时间去总结,现在终于可以有时间去总结一些Android上面的东西了,很久以前写过这篇关于使用Android Studio搭建Android集成开发环 ...
- Android开发学习总结(二)——使用Android Studio搭建Android集成开发环境
有很长一段时间没有更新博客了,最近实在是太忙了,没有时间去总结,现在终于可以有时间去总结一些Android上面的东西了,很久以前写过这篇关于使用Android Studio搭建Android集成开发环 ...
- 使用Android Studio搭建Android开发环境
一.Android Studio简单介绍 2013年GoogleI/O大会首次发布了Android Studio IDE(Android平台集成开发环境).它基于Intellij IDEA开发环境,旨 ...
- 基于Android Studio搭建Android应用开发环境
备注:电脑是windows xp系统 1. 安装JDK和环境变量设置 JDK是java development kit,Java JDK下载地址 http://www.oracle.com/t ...
随机推荐
- mdadm语法
mdadm命令详解及实验过程 一.概念 mdadm是multiple devices admin的简称,它是Linux下的一款标准的软件 RAID 管理工具,作者是Neil Brown 二.特点 ...
- 易语言 - 模块 - 子程序 - 纯真IP数据库查询
.版本 .支持库 spec .程序集 程序集1 .子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码 _临时子程序 () ' 在初始化代码执行完毕后调用测试代码 返回 () ' ...
- servlet之servlet(二)
·servlet用于创建返回基于客服请求的动态页面(整个).部分页面.与数据库交互 ·servlet接口: 继承servlet接口后,要在web.xml中配置和映射servlet.配置servlet初 ...
- [C# 基础知识系列]专题二:委托的本质论 (转载)
引言: 上一个专题已经和大家分享了我理解的——C#中为什么需要委托,专题中简单介绍了下委托是什么以及委托简单的应用的,在这个专题中将对委托做进一步的介绍的,本专题主要对委本质和委托链进行讨论. 一.委 ...
- 3D数学基础(二)向量
向量的基本运算包括加法.减法.点乘.叉乘.单位化运算等,而在游戏开发中使用最为广泛的是减法.点乘.叉乘.单位化运算.向量是具有方向和长度的矢量,有2D.3D.4D等的.在游戏开发里面一般使用的是2D和 ...
- Watchman 的安装
先查看gcc的版本 gcc --version 如果gcc的版本低于4.8,就要升级gcc的版本了.在这里,就不延时升级gcc了, 安装watchman git clone https://githu ...
- jQuery-4.动画篇---自定义动画
jQuery中动画animate(上) 有些复杂的动画通过之前学到的几个动画函数是不能够实现,这时候就需要强大的animate方法了 操作一个元素执行3秒的淡入动画,对比一下2组动画设置的区别 $(e ...
- 2018上C语言程序设计(初级)作业- 第2次作业
一.预习作业 在课前或者课后观看浙江大学程序设计入门-C语言课程中第2周.第3周的判断部分和第4周的判断部分. 二.PTA作业 完成第7周.第8周和第9周和第10周共8次pta作业,将PTA作业中部分 ...
- ietester下ie6.0停止工作问题的修复
工作时经常用到ie6.0来测试兼容性,不得不吐槽下ie6.0的过分老旧,页面编写完成后,最痛苦的莫过于在ie6.0下测试兼容性. 今天满怀基情的打算开始了一天的工作,却在刚要开始之初,被同事的iete ...
- android 判断横竖屏的方法(转)
public boolean isScreenChange() { Configuration mConfiguration = this.getResources().getConfiguratio ...