将Android工程打成jar并解决资源不能读取的问题
来源:互联网 发布:搜谱网 心事谁人知 编辑:程序博客网 时间:2024/06/06 00:59
将Android工程打成jar并解决资源不能读取的问题
这里以实际项目为例为大家讲解下如何修改腾讯微博sdk源码并将修改后的Android工程打成jar包
将项目中使用第三方登录模块进行了修改,发现使用腾讯微博的单点登录有2个问题。
备注:使用的Tencent 微博SDK版本是Tencent_Weibo_Android_Open_SDK_V2.0
第一、如果手机没安装腾讯微博客户端或者版本过低 就会弹出WebView进行授权,但是授权成功后AccessToken并没有回传。
后来查看AndroidSDKComponent下的源码发现如果检测到手机没安装或者版本过低就会跳转到Authorize(Activity)该类中授权成功后直接finish()掉了。
第二、由于sdk中缺少资源文件,所有打开的授权界面顶部标题栏背景为白色
因此必须对这个类进行修改,需要拿到WeiboToken可以在下面方法中添加
/** * * 获取授权后的返回地址,并对其进行解析 */public void jumpResultParser(String result) {String resultParam = result.split("#")[1];String params[] = resultParam.split("&");String accessToken = params[0].split("=")[1];String expiresIn = params[1].split("=")[1];String openid = params[2].split("=")[1];String openkey = params[3].split("=")[1];String refreshToken = params[4].split("=")[1];String state = params[5].split("=")[1];String name = params[6].split("=")[1];String nick = params[7].split("=")[1];Context context = this.getApplicationContext();if (accessToken != null && !"".equals(accessToken)) {Util.saveSharePersistent(context, "ACCESS_TOKEN", accessToken);Util.saveSharePersistent(context, "EXPIRES_IN", expiresIn);// accesstoken过期时间,以返回的时间的准,单位为秒,注意过期时提醒用户重新授权Util.saveSharePersistent(context, "OPEN_ID", openid);Util.saveSharePersistent(context, "OPEN_KEY", openkey);Util.saveSharePersistent(context, "REFRESH_TOKEN", refreshToken);Util.saveSharePersistent(context, "NAME", name);Util.saveSharePersistent(context, "NICK", nick);Util.saveSharePersistent(context, "CLIENT_ID", clientId);Util.saveSharePersistent(context, "AUTHORIZETIME",String.valueOf(System.currentTimeMillis() / 1000l));Toast.makeText(Authorize.this, "授权成功", Toast.LENGTH_SHORT).show();WeiboToken token = new WeiboToken();token.accessToken = accessToken;token.expiresIn = Long.parseLong(expiresIn);token.refreshToken = refreshToken;token.openID = openid;Intent data = new Intent();data.putExtra("WeiboToken", token);setResult(200, data);this.finish();isShow = true;}}
调用的Activity 通过Intent i = new Intent(mContext,Authorize.class); startActivityForResult(i, 100);
然后在调用的Activity重写 protected void onActivityResult(int requestCode, int resultCode, Intent data) {...}
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if(resultCode == Activity.RESULT_OK){ mSsoHandler.authorizeCallBack(requestCode, resultCode, data); } if(200==resultCode){ WeiboToken token = (WeiboToken) data.getSerializableExtra("WeiboToken"); requestFriendFansList(token); } }
或者在Authorize类中处理完授权使用接口回调的方式将值传回调用的类中
处理完上面的问题就是自定义Tencent微博授权页面顶部Title bar。这里官方也处理的比较坑爹,在手机没装Tencent客户端的情况下打开授权界面顶部出现白色
感觉太难看了,经过一番折腾最后弄好了,发现网上几乎没有这样的帖子。
在Authorize类的initLayout方法中我可以通过
int back_btn_id = getResources().getIdentifier("back_button", "drawable",mContext.getPackageName()); public static Drawable getAssertDrawable(Context context,String fileName){ try { InputStream inStream=context.getAssets().open(fileName); return new BitmapDrawable(BitmapFactory.decodeStream(inStream)); } catch (IOException e) { Log.e("TENCENT_WEIBO", "Assert中"+fileName+"不存在"); } return null; }
在这里另外转载下几篇介绍Android获取资源文件的帖子
http://www.cnblogs.com/carbs/archive/2012/07/20/2601811.html
http://www.2cto.com/kf/201205/132802.html
http://www.devdiv.com/Android-jar%E7%9A%84%E5%AF%BC%E5%87%BA%E4%B8%8E%E5%BC%95%E7%94%A8-thread-175955-1-1.html
最后将修改的Android项目保存并在项目上单击右键选择Export--选择Jar--JAR file--next--勾选左侧栏中项目下的src、assets、res--取消勾选右侧文件选项
然后勾选Export generated class files and resources,填写JAR file路径和名称
最后点击finish(),此时可能会弹出警告直接忽视点击ok,现在就可以开始使用jar包了!
要转载的朋友希望标明出处谢谢!
- 将Android工程打成jar并解决资源不能读取的问题
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
- 【Android】将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
- SendMessage、PostMessage原理
- Linux 内核模块编程的第一个字符设备驱动
- linux 虚拟文件系统VFS
- [设计模式as3版]三.装饰者模式
- Mysql避免全表扫描sql查询优化 .
- 将Android工程打成jar并解决资源不能读取的问题
- 高级Bash脚本编程指南(32):混杂命令(一)
- 内核中的UDP socket流程(6)——sendto
- 跟我一起学写jQuery插件开发方法
- 高性能I/O设计模式Reactor和Proactor
- 最小生成树
- POJ-2282-The Counting Problem
- delphi使用回车设置焦点改变
- 进程和线程的区别