Android集成FBReader(精简版)指南

来源:互联网 发布:守望先锋安娜技能数据 编辑:程序博客网 时间:2024/05/18 10:23

本文的主要内容


  • 概述
  • 精简版FBReader下载地址
  • 集成教程
  • 问题及解决方法
  • 参考文档

概述


之前集成FBReader参考的是这篇文章:

  • 如何把FBReader集成到自己的项目中 - 简书
    http://www.jianshu.com/p/febc1f032ff2

但是集成完成后出现了一些问题,比如内存泄露严重、加上项目中使用的开源框架也蛮多的,集成后又出现了著名的65K方法数限制问题,解决了很久很头疼没解决,还有其它一些问题……不知道大家有没有遇到这些问题,可能是我操作的问题吧。

言归正传,本文将提供一个精简版的FBreader集成版本,集成过程只需要4步,集成后也没有遇到上面的问题;其中集成中遇到的问题,我会在下面一一给出解决方法。

精简版FBReader下载地址


PS:该版本是我在FBReader交流群(321171877)里发现的,感谢大神。
http://pan.baidu.com/s/1hsL2Lhy

集成教程


PS:建议大家不要再AS里复制,巨卡;集成前要做好备份工作。

言归正传,我们先看下目录结构,要复制的文件都在这里,其中jni文件夹可以不用复制。

这里写图片描述

1.将除jni和AndroidManifest.xml的其他文件夹直接复制到相应文件夹下。

2.复制的时候会提示是否替换下面的文件,选否,然后把里面的代码复制到对应的xml中即可。

这里写图片描述

3.打开AndroidManifest.xml,将application标签内的所有代码和下图中的权限代码复制到你的AndroidManifest.xml中。

这里写图片描述

4.自定义的Application一定要继承FBReader项目中的FBReaderApplication类。

至此,集成已经完成。

问题及解决方法


1.找不到org.geometerplus.zlibrary.ui.android.R
解决方法:替换为自己的R文件即可,大家可使用Ctrl+Shift+R一键替换

2.程序包org.apache.http不存在
出现该问题的原因是在新版本的SDK中Google删除了这个类,解决方法:
打开app的build.gradle中 ,在buildToolsVersion下边,添加如下代码,即可解决。

useLibrary 'org.apache.http.legacy'

3.Error:(303, 27) 错误: 找不到符号 符号: 方法 sin(float) 位置: 类 FloatMath
原因同上,解决方法:
将FloatMath替换为Math即可,要注意的地方是,有的地方需要强转为Float类型。

4.Error:(31, 29) 错误: 找不到符号 符号: 方法 setLatestEventInfo(MainActivity,String,String,<空值>) 位置
原因同上,我直接贴下修改代码吧,直接替换方法即可。

    private Notification createDownloadFinishNotification(File file, String title, boolean success) {        final ZLResource resource = getResource();        final String tickerText = success ?                resource.getResource("downloadCompleteTicker").getValue() :                resource.getResource("downloadFailedTicker").getValue();        final String contentText = success ?                resource.getResource("downloadComplete").getValue() :                resource.getResource("downloadFailed").getValue();        NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);//获取系统服务        final Intent intent = success ? getFBReaderIntent(file) : new Intent();        final PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0);        final Notification notification = new Notification.Builder(this)                .setTicker(tickerText)//在状态栏显示的标题                .setContentText(contentText)                .setSmallIcon(android.R.drawable.stat_sys_download_done)//设置状态栏显示时的图标                .setContentIntent(contentIntent)                .build();//创建Notification        notification.flags |= Notification.FLAG_AUTO_CANCEL;        notificationManager.notify(1, notification);//管理器通知        return notification;    }

5.启动后出现两个app
解决方法:打开清单文件把这里的intent-filter删除即可。

这里写图片描述

参考文档


如何把FBReader集成到自己的项目中 - 简书
http://www.jianshu.com/p/febc1f032ff2

程序包org.apache.http不存在,解决方式 - 丶鹏 - CSDN博客
http://blog.csdn.net/qq_23089525/article/details/52038529

AS 报错 Error:(303, 27) 错误: 找不到符号 符号: 方法 sin(float) 位置: 类 FloatMath - rongwenbin的专栏 - CSDN博客
http://blog.csdn.net/rongwenbin/article/details/51240884

Error:(31, 29) 错误: 找不到符号 符号: 方法
setLatestEventInfo(MainActivity,String,String,<空值>) - linsuren的博客 - CSDN博客
http://blog.csdn.net/linsuren/article/details/52440792?locationNum=1