原文链接:http://blog.csdn.net/helldevil/article/details/51547454
之前机器属于阿富汗就别,所以只能在苦逼的在eclipse里面开发应用。后来鸟枪换炮,系统硬件升级了,就装了个Android stuido来开发应用,好处吗,自不用说,
大家百度下,这里就不做广告了。
说下如果在android studio下开发系统应用,这里的系统应用是指需要用到系统隐藏API或者自定义API的这种应用,普通的SDK是无法提供的。
比如:
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
-
-
- switch (keyCode) {
- case KeyEvent.KEYCODE_XXXX_DTV:
- case KeyEvent.KEYCODE_XXXX_ATV:
- case KeyEvent.KEYCODE_XXXX_HDMI1:
- case KeyEvent.KEYCODE_XXXX_HDMI2:
- case KeyEvent.KEYCODE_XXXX_HDMI3:
这种自定义的按键,你该咋办。。。代码一上去,直接大大的红色,囧。
也尝试了百度解决方案,说实在的百度就是个垃圾,啥也搜不到,搜到的也是没有经过验证的回答。全是无效答案,所以这里给大家提供自己亲测完美运行的解决方案。
废话不多说,直接说解决:
1 首先你得有源码,和编译的环境,如果没有,下面就不要看了。。。
有了源码,请编译下,编译完成后,一般会生成out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar
这个是你的framework的编译的链接文件,一定要是这个文件,/system/framework/下面的那个木有用。
2 有了这个神器,你就可以导入到android studio。怎么导入?
额。。。FILE->Project Structure->Dependencies,记住点+号,一定要选择Provide模式,Compile模式会让你蛋疼的,这个是将库编译到源码中。。。那是无尽的等待啊。
3 导完库后,就是如何去掉那该死的错误提(找不到XXX定义)
这里我求助了Stackoverflow的大神,他们给出了完美解决方案。
在Build.gradle里面加入如下脚本:(注意要用自己的android api来替换,我的是4.4.2所以用Android API 19 platform)
- task pushDownJdkDependency {
- def imlFile = file("launcher3.iml")
- try {
- def parsedXml = (new XmlParser()).parse(imlFile)
- 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 19 Platform", 'jdkType': 'Android SDK'])
- def writer = new StringWriter()
- new XmlNodePrinter(new PrintWriter(writer)).print(parsedXml)
- imlFile.text = writer.toString()
- } catch (FileNotFoundException e) {
- // nop, iml not found
- }
-
- }
这里的Luancher3.xml是和你工程同名的一个配置文件,用于在链接时查找相应的库,默认SDK库在最头上,他是亲儿子。。。有了亲儿子,当然不会认你这个干儿子了。
所以得篡权,这个脚本就是篡权用的,把自己提升到第一位编程亲儿子
- <orderEntry type="sourceFolder" forTests="false" />
- <orderEntry type="library" exported="" name="framework" level="project" />
- <orderEntry type="library" exported="" name="tvapi" level="project" />
- <orderEntry type="library" exported="" name="support-annotations-23.2.0" level="project" />
- <orderEntry type="library" exported="" name="SmartPlayer" level="project" />
- <orderEntry type="jdk" jdkName="Android API 19 Platform" jdkType="Android SDK" />
现在变成亲儿子了,讨厌的红色消失啦。。。哈哈。。。
下面加入的是可以让其运行的脚本。这个要放在android的闭包里面。
- android {
- ...
- allprojects {
-
- gradle.projectsEvaluated {
- preBuild.dependsOn(pushDownJdkDependency)
- tasks.withType(JavaCompile) {
- options.compilerArgs.add('-Xbootclasspath/p:libs/framework.jar')
- }
- }
- }
- }
以上就可以完成在android平台上开发了系统应用了。谢谢大家。
http://download.csdn.NET/detail/helldevil/9642150 这里是配置文件