将Android工程打成jar并解决资源不能读取的问题

将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包了!


要转载的朋友希望标明出处谢谢!

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值