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


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

 

原创粉丝点击