带源码的APK预置进系统时所遇到的问题

今天闲暇之余将以前工作时遇到的一些问题总结一下,这些问题在没解决之前的心情作为一个程序员都懂的,可一旦解决之后发现这些是多么的弱智。好了,闲话少说,直入今天的主题

1.R cannot be resolved to a variable

开始遇到这个问题的时候理所当然的知道是资源这块没有处理好,可能是图片资源,字符资源等等拼写问题,或则是目录存放结构的问题,当初反复检查并参考网上的一些问题,然后都没能找到对症下药的解决办法。说到这里之后,我得先将当时的工作环境说一下,当时只是想做一个简单的应用并预置进系统,所以就没有借助IDE工具,直接是在源码中用记事本编辑应用了,当时想着反正功能简单嘛!那铺垫做好了,接下来就将我当初写的代码盛上来吧。

这里先说明几个地方,这个应用里只包含了两个类,MainActivity.java/SubActivity.java,并且这两个Activity都有在AndroidManifest.xml里注册




报错的报告如下

packages/apps/AndroidTest/src/com/example/test/SubActivity.java:11: R cannot be resolved to a variable


显示问题就在SubActivity.java中的R.layout.activity_main这里的资源有问题,那问题又来了,怎么MainActivity.java中同样也是引用的这个资源却没有问题呢,反复比较这两个Activity类,看到的区别也就是包名和类名不一样,那问题又在哪里呢!!!!好了,各位看官,是不是被我已经带沟里啦,不买关子啦。

解决问题开始

前面也说到,这两个Activity类的区别就在包名和类名,那反复查看,知道问题在哪里了,现在回过头去看AndroidManifest.xml文件里的manifest标签中的package的值为com.example.androidtest,那这样通过编译应用生成的R资源的全路径就成com.example.androidtest.R,好啦,这下知道原因在哪里了吧,MainActivity.java的包名本身就是com.example.androidtest,所以在MainActivity.java不用import com.example.androidtest.R,而SubActivity.java就必须要import com.example.androidtest.R;这样资源就编译过去了。其它这个问题如果用上IDE工具编辑时,工具会自动给你添加上去,自然也就不会遇到这个问题,也许有人会说这个问题是自找到,那确实,没办法,也是当自己一个教训并学习了吧!

2.带源码且带第三方jar应用预置系统编译时,怎样将第三方的jar编译到应用中

先来看一下应用的目录结构


这里就是将libs目录下的这几个jar包随应用编译到系统中,这里的关键就是Android.mk文件的编辑


一定要切记我箭头所指的地方,说明一个地方,我曾近就是自以为是的少写了下面的include $(CLEAR_VARS),或者少写了include $(BUILD_MULTI_PREBUILT),就一直编译出问题。LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES是用来定义jar包的名字并指明路径,为后面的LOCAL_STATIC_JAVA_LIBRARIES所用。

3.应用中需要使用apache-http的问题,从android5.0以后,android.jar中已经不再包含apache-http的接口了,那随着SDK升级,怎么延续项目使用的apache-http的接口呢,apache-http的jar包在Android\sdk\platforms\android-23\optional\org.apache.http.legacy.jar,至于怎么将这个jar编译到应用中,请参考上一个问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值