问题总结2015/05/05

1、第三方提供的库不能使用。

调查方法:差分编译,对比连接后和编译后的差分情况;Debug单步调试,定位出错代码;由于是第三方库不能使用的原因,反编译辅助调查。

调查结果:本机编译后的R文件中的资源ID和Jar包中索引的资源ID(Jar包的.class文件中资源ID是固定值)不一致。

解决方法:(转)http://blog.csdn.net/p106786860/article/details/12152011

===========================================================

随着Android系统的日益发展和日渐成熟,各种平台的合作就日渐频繁。现在主要互联网公司,都退出了各种各样的插件功能。如第三方支付,第三方联合登陆和微博分享等等功能。 

 

 

在每个Android项目中,都会有一个R.java文件,该文件由ADT维护的,只要你将资源文件放到工程里,或者声明新的控件标识,ADT就会监测到,自动在R.java里注册一个ID方便使用。 

 

[java] view plaincopy
  1. public final class R {   
  2.     public static final class anim {   
  3.         public static final int cycle_7=0x7f040000;   
  4.         … …    
  5.     }   
  6.     public static final class array {   
  7.         public static final int bank_type=0x7f050001;   
  8.         … …    
  9.     }   
  10.     public static final class id{   
  11.         public static final int account_warning_text_color=0x7f060027;   
  12.         public static final int account_withdraw_text_color=0x7f060026;   
  13.         … ...   
  14.     }   
  15.     … ...   
  16. }   

Android布局文件中的组件被调用时需要定义组件的android:id属性,android:id属性只能接受资源类型的值,就是必须以@开头的值。们声明一个控件的ID有如下几种方式: 

@+id =0x7f070007; 

 

[html] view plaincopy
  1. <TextView             
  2.    android:id="@+id/noteInfo"            
  3.    android:layout_width="match_parent"            
  4.    android:layout_height="wrap_content"/>   

), 

 

[html] view plaincopy
  1. <FrameLayout   
  2.     android:id="@android:id/tabcontent"   
  3.     android:layout_width="fill_parent"   
  4.     android:layout_height="fill_parent" >   
  5. </FrameLayout>   

  

 

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8">    
  2. <TabHost xmlns:android="http://schemas.android.com/apk/res/android"      
  3.     android:id="@android:id/tabhost"    
  4.     android:layout_width="fill_parent"    
  5.     android:layout_height="fill_parent" >    
  6.     <LinearLayout    
  7.         android:orientation="vertical"    
  8.         android:layout_width="fill_parent"   
  9.         android:layout_height="fill_parent" >   
  10.         <TabWidget   
  11.             android:id="@android:id/tabs"               
  12.             android:layout_width="fill_parent"              
  13.             android:layout_height="wrap_content" />   
  14.         <FrameLayout   
  15.             android:id="@android:id/tabcontent"              
  16.             android:layout_width="fill_parent"               
  17.             android:layout_height="fill_parent" >   
  18.         </FrameLayout>   
  19.     </LinearLayout>   
  20. </TabHost>   

 

 

/res/ 

文件:  = () 

 

[html] view plaincopy
  1. <resources>   
  2.     <item name="HorizontalScrollView01" type="id"/>   
  3.     <item name="LinearLayout0000" type="id"/>   
  4.     <item name="LinearLayout01" type="id"/>   
  5. </resources>   

public.xml文件:描述attr、id、drawable等所指定的一个32的id值,即id值。 

 

[html] view plaincopy
  1. <resources>   
  2.     <public id="0x7f040000" name="cycle_7" type="anim" />   
  3.     <public id="0x7f040002" name="layout_animation_image" type="id" />   
  4.     <public id="0x7f040003" name="layout_animation_linear" type="color" />   
  5. </resources>   


基础的知识已经准备完毕,现在我们来描述原理。当我们将src目录下的源码通过Eclipse打出Jar后,源码代码中的如()中的R.id.id_name部分,都会被替换成此时在R文件中生成的id_name对应的ID值(如果有兴趣的话,可以用反编译软件可以查看到)。 

 

,@+id/ static final  =0x7f080001。当时当你将Jar提供给第三方的时候,在它的机器上生成的ID值可能就不是0x7f080001,就会出现由于Jar中固定的ID值与当前R文件中生成的ID值不一致,导致() 

 

通过对上面只是的了解,我们可以用如下方式解决问题:通过使用ids.xml文件和public.xml文件,定义好固定的ID值,将声明控件的方式由@+id改为@id形式,这样引用控件和资源的id根据ids.xml和public.xml的声明,在R文件中声明为固定的值。一直与Jar中的ID值保持一致。 

 

 

 

1.重新编译项目,生成R文件。 


2.将R文件拷贝,根据R文件中的信息,获得ids.xml和public.xml文件中的内容。 

文件格式:只需声明@id的对应的R文件中id类型 


文件格式:需要声明R文件中所有资源的类型 


 

id的形式转换成@id形式 

 


4.使用Eclipse的Export功能,将项目src目录下的源码(注仅仅是src目录下的源码,其它资源我们将以库项目的形式提供给用户)导出Jar包,提供给用户调用。 


 = () 

5.我们删除该项目src下的源代码,将该项目设置为库项目,以供客户引入或许Jar包中的布局,图片等资源。 


到这里我们为客户准备的东西已经完毕,1.srcjar.jar包,2.plugin资源库项目。 

并引入我们的plugin资源库项目 


7.将plugin资源库项目的AndroidManifest.xml中的内容,添加到客户项目中,并在客户端项目中调用srcjar.jar包中的入口Activity即可。 

注意:如果在你的项目中存在调用本项目目录调用资源,如assets下的apk或者mp3等文件,可以拷贝到客户端相应的目录即可。 

 

 

 

===========================================================

 

2、表单提交时,提示数据通信异常(源代码中的错误提示有误导......坑爹=。=)。

调查方法:辅助fidder抓包工具,监控表单提高及服务器响应情况。

调查结果:服务器响应失败。提交的表单中有不合法的数据。
前端与后端协作时要注重接口的对接(一切以接口文档为准),出现问题时首先确保提交和返回的数据正确,然后在展开调查。

相关资料:

http://blog.csdn.net/xyz_lmn/article/details/8808169

http://www.cnblogs.com/tankxiao/archive/2012/02/06/2337728.html

http://blog.csdn.net/ithomer/article/details/6727581

http://blog.isming.me/2015/01/18/android-anti-decompile/

http://blog.csdn.net/vipzjyno1/article/details/23542617

转载于:https://www.cnblogs.com/clong2010/p/4479657.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398185.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js的下拉刷新和上拉加载,基于iScroll v4.2.5

html部分 <div id"wrapper" style"height: 100%"><div id"scroller"><div id"pullDown"></div><ul id"thelist"><li>我是三冰 1</li><li>我是三冰 2</li><li>…

java声明和初始化数组_Java 中初始化数组

数组是一种有用的数据类型&#xff0c;用于管理在连续内存位置中建模最好的集合元素。下面是如何有效地使用它们。-- Chris Hermansen&#xff08;作者&#xff09;有使用 C 或者 FORTRAN 语言编程经验的人会对数组的概念很熟悉。它们基本上是一个连续的内存块&#xff0c;其中…

Java第二次实验报告——Java面向对象程序设计

北京电子科技学院&#xff08;BESTI&#xff09;实 验 报 告课程名称&#xff1a;java程序设计实验 班级&#xff1a;1352 姓名&#xff1a;洪韶武 学号&#xff1a;20135219成绩&#xff1a; 指导教师&#xff1a;娄嘉鹏…

IOS 多线程04-GCD详解 底层并发 API

IOS 多线程04-GCD详解 底层并发 API 注&#xff1a;本人是翻译过来&#xff0c;并且加上本人的一点见解。 前言 想要揭示出表面之下深层次的一些可利用的方面。这些底层的 API 提供了大量的灵活性&#xff0c;随之而来的是大量的复杂度和更多的责任。在我们的文章常见的后台实践…

mac pandas文件路径_Mac进阶必看:如何利用Automator快速获取文件路径

在重装mac os系统后&#xff0c;有的小伙伴会选择手动恢复数据&#xff0c;但是却发现一些软件比如FTP、iterm2、foxmail等这些软件的配置信息没有了&#xff0c;其实数据并没有丢失哦&#xff01;一般情形下数据都会在/Users/dcm/Library下&#xff0c;但是Mac默认是不显示这些…

深入分析Spring 与 Spring MVC容器

spring官方文档中对web容器的说明spring配置文件默认名字——applicationContext.xml参考链接&#xff1a;https://www.cnblogs.com/hujunzheng/p/5673377.htmlSpring的启动过程&#xff1a;首先&#xff0c;对于一个web应用&#xff0c;其部署在web容器中&#xff0c;web容器提…

mysql jpa 批注 视图_通过JPA注解映射视图的实体类 jpa 视图 无主键 @Query注解的用法(Spring Data JPA) jpa 使用sql语句...

参考: https://blog.csdn.net/qq465235530/article/details/68064074https://www.cnblogs.com/zj0208/p/6008627.html这里主要说一下怎么用jpa映射一个视图的实体类&#xff0c;其实跟表映射一样&#xff0c;就是需要添加一个空的主键id标识package com.cf.bus.core.rs.templat…

javascript继承模式原理与示例深入剖析

原型链ECMAScript 中描述了原型链的概念&#xff0c;并将原型链作为实现继承的主要方法。 其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。简单回顾一下构造函数、原型和实例的关系&#xff1a;每个构造函数都有一个原型对象&#xff0c;原型对象都包含一…

mysql innodb_sort_buffer_size_mysql优化---第7篇:参数 innodb_buffer_pool_instances设置

摘要&#xff1a;1 innodb_buffer_pool_instances可以开启多个内存缓冲池&#xff0c;把需要缓冲的数据hash到不同的缓冲池中&#xff0c;这样可以并行的内存读写。2 innodb_buffer_pool_instances参数显著的影响测试结果&#xff0c;特别是非常高的 I/O 负载时。3 实验环境下&…

open-falcon的插件机制

Plugin可以看做是对agent功能的扩充。对于业务系统的监控指标采集&#xff0c;最好不要做成plugin&#xff0c;而是把采集脚本放到业务程序发布包中&#xff0c;随着业务代码上线而上线&#xff0c;随着业务代码升级而升级&#xff0c;这样会比较容易管理。 1. 编写采集脚本 用…

从简单的信道预计说起

前面写了关于CP在OFDM中的应用&#xff0c;主要是记录一点零星的想法而已&#xff0c;今天突然想写点关于信道特性方面的东西。原因有下面几点&#xff1a; 1&#xff09;信道在仿真中的地位不容置疑&#xff0c;不同信道的条件下的仿真是很多课题的重点&#xff0c;自己差点儿…

python input函数赋值法_赋值法 - 静雅斋数学 - 博客园

前言赋值法是高中数学中比较常用的一种方法&#xff0c;使用“赋值法”的数学素材和知识点&#xff0c;散落在高中数学的几乎各个章节中&#xff0c;现对其进行整理&#xff0c;以便于学习。比如学习函数时可以赋值法给出单调性&#xff0c;奇偶性&#xff0c;周期性等&#xf…

Android surfaceview详解

周末看《精通Android游戏开发》(Pro Android Games)&#xff0c;里面讲到游戏的框架&#xff0c;其中一个重要的概念surfaceview,觉得不是很理解&#xff0c;于是花了一点时间研究了下&#xff0c;写下自己的心得。surface&#xff0c;这个单词的意思是浮在表面的&#xff0c;那…

ThinkPhp学习06

一、简单学习修改用户信息模块 1、编写UserAction.class.php 1 <?php2 3 class UserAction extends Action{4 public function index(){5 $mM(User);6 $arr$m->select();7 $this->assign(data,$arr);8 …

Spring MVC @SessionAttributes注解

SessionAttributes原理 默认情况下Spring MVC将模型中的数据存储到request域中。当一个请求结束后&#xff0c;数据就失效了。如果要跨页面使用。那么需要使用到session。而SessionAttributes注解就可以使得模型中的数据存储一份到session域中。 SessionAttributes参数 1、name…

C# 关于MVC框架的简单实例(计算器)

一、需求分析 实现效果 二、实现步骤 步骤一&#xff1a;新建项目--->Web---->空模板 步骤二&#xff1a;添加控制器 步骤三&#xff1a;根据控制器名称添加视图 步骤四&#xff1a;添加Models模型 编写具体的方法 using System;using System.Collections.Generic;using…

JS函数

函数&#xff1a; 函数是由事件驱动或者当它被调用时执行的可重复色代码块。 <head> <script> function hanshu() { alert("你好&#xff01;"); } </script> </head><body> <button οnclick"hanshu()">点击</but…

堆与二叉树(下)

接着上次的&#xff0c;这里主要介绍的是堆排序&#xff0c;二叉树的遍历&#xff0c;以及之前讲题时答应过的简单二叉树问题求解 堆排序 给一组数据&#xff0c;升序&#xff08;降序&#xff09;排列 思路 思考&#xff1a;如果排列升序&#xff0c;我们应该建什么堆&#x…

java new数组_Java如何使用new创建数组

java语言使用new操作符来创建数组&#xff0c;语法如下&#xff1a;arrayRefVar new dataType[arraySize];上面的语法语句做了两件事&#xff1a;一、使用dataType[arraySize]创建了一个数组。二、把新创建的数组的引用赋值给变量 arrayRefVar。数组变量的声明&#xff0c;和创…

hibernate select语句返回的类型

2019独角兽企业重金招聘Python工程师标准>>> Person类中包含有MyEvent这个类 public class Person{private Long id;private String name;private MyEvent myEvent; } 一、HQL from语句 1、结果类型&#xff1a;List<Person> from Person 或者 from Person…