发新帖

智器阅读Android6.0无源修复

[复制链接]
19184 7
智器阅读Android6.0无源修复
无源修复者:PeterDocter
修复时间:
解决Android6.0上的sd内外卡无法别问题

关键代码
\com\smartdevices\bookmanager\active\ac.smali
.method public staticd()Ljava/util/ArrayList;
         .registers 6
         const/4             v0, 0
         new-instance        v1,Ljava/util/ArrayList;
         invoke-direct       {v1},Ljava/util/ArrayList;-><init>()V
         invoke-static       {},Landroid/os/Environment;->getExternalStorageDirectory()Ljava/io/File;
         move-result-object  v2
         invoke-virtual      {v2},Ljava/io/File;->getAbsolutePath()Ljava/lang/String;
         move-result-object  v2
(1)       new-instance        v3, Ljava/io/File;
          const-string        v4, "/"
          const/4             v5, 1
          invoke-virtual      {v2, v4, v5},Ljava/lang/String;->indexOf(Ljava/lang/String;I)I
          move-result         v4
          invoke-virtual      {v2, v0, v4}, Ljava/lang/String;->substring(II)Ljava/lang/String;
          move-result-object  v2
         invoke-direct       {v3, v2},Ljava/io/File;-><init>(Ljava/lang/String;)V
         invoke-virtual      {v3},Ljava/io/File;->listFiles()[Ljava/io/File;
         move-result-object  v2
         array-length        v3, v2
:46
         if-ge               v0, v3, :8A
:4A
         aget-object         v4, v2, v0
         if-eqz              v4, :84
:52
         invoke-virtual      {v4},Ljava/io/File;->exists()Z
         move-result         v5
         if-eqz              v5, :84
:5E
         invoke-virtual      {v4},Ljava/io/File;->canRead()Z
         move-result         v5
         if-eqz              v5, :84
:6A
(2)         invoke-virtual     {v4}, Ljava/io/File;->canWrite()Z
         move-result         v5
         if-eqz              v5, :84
:76
         invoke-virtual      {v4},Ljava/io/File;->getAbsolutePath()Ljava/lang/String;
         move-result-object  v4
         invoke-virtual      {v1, v4},Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
:84
         add-int/lit8        v0, v0, 0x01
         goto                :46
:8A
         return-object       v1
.end method
代码分析
(1)  这里主要从/storage/emulated/0中提取出/storage,进行遍历当前路径结果如下:
/storage/emulated 内卡
/storage/FADF-18EC 外卡
在android 6.0测试/storage/emulated虽然这个目录存在但是无读写权限,必须是用
Environment.getExternalStorageDirectory().getAbsolutePath()返回完整路径才有读写权限也就是/storage/emulated/0。
这就是造成内卡无法读写的原因!
(2)  主要功能是检测外卡是否有读写权限,在android 4.4以上所有外卡都只有读权限除非有root权限与修改过系统权限配置文件。
外卡没有读写权限就不保存此路径,也就是无法认识外卡的原因。
修改代码
public static final ArrayList d() {
       int i = 0;
       ArrayList arrLlist = new ArrayList();
       String sd1 =Environment.getExternalStorageDirectory().getAbsolutePath();
       File sd = new File(sd1);
       arrLlist.add(sd.getAbsolutePath());
       if (sd.canRead()) {
           Log.i(TAG, sd.getAbsolutePath().toString() + " Reading isok!");
           if (sd.canWrite()) {
                Log.i(TAG,sd.getAbsolutePath().toString() + " Writing is ok!");
           }
       }
       File[] FPath = new File(sd1.substring(0, sd1.indexOf("/",1))).listFiles();
       while (i < FPath.length) {
           File FPath2 = FPath;
           if (FPath2 != null) {
                if (FPath2.exists()) {
                    if (FPath2.canRead()) {
                        Log.i(TAG,FPath2.toString() + " Reading is ok!");
                       arrLlist.add(FPath2.getAbsolutePath());
                    }
                }
           }
           i++;
       }
       return arrLlist;
}
转换成smali代码替换原来d()方法内容,这样就可以解决问题了!
这样修复之后,所有浏览图片格式pdf都没有阅读了!
有款修复的是
这个功能是浏览文字格式的pdf时用到,这个功能是so中主要是
Java_com_smartdevices_pdfreader_PdfView_nativeGetSelectText
这个函数的问题,在模拟器上测试过android 4.4.x以上都不正常。不知道是否7a中so本身嵌入arm代码就有问题。。。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

举报 使用道具

回复

精彩评论7

sndncel    发表于 2016-4-6 05:12:25 | 显示全部楼层
学习了呀。。。。支持一下呀。

举报 使用道具

回复 支持 反对
xin    发表于 2016-4-6 07:23:27 | 显示全部楼层
4.4的路过帮顶

举报 使用道具

回复 支持 反对
luokein    发表于 2016-4-11 20:09:14 | 显示全部楼层
这个没有修改好的apk么

举报 使用道具

回复 支持 反对
pingf    发表于 2016-4-18 09:31:51 | 显示全部楼层
太棒了,这个真心要赞一个,最好的阅读器终于能用了~

举报 使用道具

回复 支持 反对
wsklght    发表于 2016-4-27 19:53:04 | 显示全部楼层
这个没有修改好的apk么

举报 使用道具

回复 支持 反对
linzifengzw    发表于 2016-5-30 08:48:15 | 显示全部楼层
有修改的app吗

举报 使用道具

回复 支持 反对
longwang    发表于 2016-9-17 01:05:22 | 显示全部楼层
不错,阅读器终于又可以用了。谢谢!

举报 使用道具

回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表