Android Studio 声明为系统应用并添加 系统jar包


注意:这篇文章转载自 Andro-bot的博客


前言

使用eclipse添加framework.jar很简单,但Android Studio上却很麻烦,上一次遇到这个之前百度了两天才解决,但是也是属于一个个办法瞎碰。结果这次我又不知道怎么搞了,就继续百度呗!还好毕竟搞过了一次,还是有点记忆在的,并且运气好看到了这篇博客,它已经把步骤讲的很清晰了,我只做了些小小的改动,就解决了问题。吸取上一次的教训,我决定写这篇博客记录过程,免得下一次又要茫茫网络大海捞针。
开发环境为:Android Studio3.1 ,win7。


1、添加system uid

要把应用声明为系统应用,首先需要添加system uid,添加方式为在AndroidManifest文件中添加sharedUserId为android.uid.system,实例如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.demo.app"
    android:sharedUserId="android.uid.system">
</manifest>

2、添加jar

将framework代码打包成classes.jar拷贝至libs文件夹下;将项目栏从Android模式转换为Project模式可以看到libs文件夹,如果没有可以在app文件夹下创建。
添加jar后,右键点击jar,选择 Add As Library选项,弹出弹窗选择ok。


3、配置Dependency

点击File,选择Project Structure,进入,点击最下面的app,看到Dependencies,下面已经有我们刚添加的jar了,将其的Scope从 implementation 改为 compileOnly,进入build.gradle文件,如果有implementation fileTree(include: [‘*.jar’], dir: ‘libs’),注释掉,这个的意思是要implementation libs下的jar。
如果你的dependencies是下面这样的话,这一步骤就算完成了。

dependencies {
    //implementation fileTree(include: ['*.jar'], dir: 'libs') //看这句和最下一句 中间随意
    implementation 'com.android.support:leanback-v17:27.1.1'
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.github.bumptech.glide:glide:3.8.0'
    compileOnly files('libs/classes.jar')
}

4、配置依赖Order

经过1、2步配置仍有SDK中找不到变量的错误,这是需要修改Module的.iml,打开app.iml文件,找到最下面的orderEntry部分,更改依赖顺序:

 <orderEntry type="library" name="Gradle: __local_aars__:D.\code\aswork\TestBlueTooth\app\libs\classes.jar:unspecified@jar" level="project" />
 //中间一长串是我的jar和项目地址,每个人都不一样

将其移动至

<orderEntry type="jdk" jdkName="Android API 26 Platform" jdkType="Android SDK" />

代码行前面,保存。
这时候执行sync,那些找不到的变量就不再报错,但是BuildAPK仍然会出错。
注意:这个iml的顺序每次在sync之后都会变回默认的,sync完记得再把对framework的Dependency移到SDK前面。这个iml文件依赖顺序仅仅是影响静态编译检查,不影响Build APK,也就是说下面的编译option配置正确,纵使有错误提示也不影响APK的生成。
: 在我把AS升级到3.3之后,发现这种方式失效了,虽然并不影响编译,但文件标红真的很影响观感。就在我犹豫要不要回滚3.2的时候,3.4更新到了,有趣的是,升到3.4之后这个问题又消失了。。。


5、配置编译Option

尽快前三步已经可以消除编译错误,但是在真正BuildAPK时仍会报错,这样就需要添加编译参数,在生成APK时优先使用framework.jar。
在Project的build.gradle中添加:

allprojects {
    repositories {
        google()
        jcenter()
    }
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs.add('-Xbootclasspath/p:app\\libs\\classes.jar')
        }
    }
}

上面添加的路径: app\libs\classes.jar 为添加framework.jar相对路径。因为是windows下,所以路径采用\\分隔符。
Note:对于较新的AS版本,-Xbootclasspath配置中需要使用全路径,格式如:“-Xbootclasspath/p:{jar包全路径}”


6、导出apk

导出APK 可以参考 me_lwj《android studio导出apk》这篇文章。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值