android 系统应用导入AS遇到的问题

最近导入android10 Launcher3的项目到AS上遇到了各种问题导致编译不能继续,下面我们一个一个解决:

1.

'variant.getJavaCompile()' is obsolete and has been replaced with 'variant.getJavaCompileProvider()' 这个错误警告很有可能是gradle版本的问题,

我们这份代码中默认的gradle版本是3.3.0,结合上面警告中被替换的得信息我们可能需要更老版本的gradle。 所以修改为3.2.1版本试试就可以了。

2. failed to find Platform SDK with path: platform; android-Q

这个很明显是

COMPILE_SDK的问题了
gradle.properties中的定义:

结合sdk location目录: C:\Users\user\AppData\Local\Android\Sdk

根本就没有android-Q目录,所以我们改成android-29.

3.各种找不到类:

很明显需要导入framework.jar。  我们去out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar拷贝到当前项目的libs/目录下。

然后又报错:

我们可以看到

getIdentifier() 属于
@SystemApi 所以AS默认是看不到的,

我们需要添加几行代码让AS能够看到这些系统隐藏接口。


allprojects {
    repositories {
        mavenCentral()
        google()
    }

    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
             // Xbootclasspath/p:是 Java 编译的寻址优先设置,先找缺省路径还是全路径
            options.compilerArgs.add('-Xbootclasspath/p:libs/framework.jar')
        }
    }

    gradle.buildFinished {
        pushDownSDK(".idea/modules/app/app.iml");
    }
}

//在app/app.iml中,把jdk的顺序调整到最后
def pushDownSDK(iml) {
    def imlFile = file(iml)
    try {
        def parsedXml = (new XmlParser()).parse(imlFile)
        def jdkIndexOf = parsedXml.component[1].orderEntry.findIndexOf { it.'@type' == 'jdk' }
        if (jdkIndexOf <= 1) {
            def jdkNode =parsedXml.component[1].orderEntry.find { it.'@type' == 'jdk' }
            parsedXml.component[1].remove(jdkNode)
            new Node(parsedXml.component[1], 'orderEntry',['type': 'jdk', 'jdkName': 'Android API 28 Platform', 'jdkType': 'Android SDK'])
            def writer = new StringWriter()
            new XmlNodePrinter(new PrintWriter(writer)).print(parsedXml)
            imlFile.text = writer.toString()
            println "Push File: $iml jdk priority ok"
            groovy.xml.XmlUtil.serialize(parsedXml,new FileOutputStream(imlFile))
        }
    } catch (Exception e) {
        // do nothing
    }
}

最后从out目录中导入其他几个依赖的jar包:

程序包com.google.protobuf.nano不存在的问题需要到out目录中找到libprotobuf-java-nano.jar导入。

程序包android.stats.launcher.nano不存在
import android.stats.launcher.nano.LauncherExtension; 需要导入launcherprotosnano.jar

各种systemui的库找不到, 导入MtkSystemUISharedLib.jar

然后修改几处已经过时的接口,最后编译顺利通过。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值