[转载]Unable to execute dex: java.nio.BufferOverflowException.解决办法 - 祝福的博客 - 博客频道 - CSDN.NET

mikel阅读(946)

[转载]Unable to execute dex: java.nio.BufferOverflowException.解决办法 – 祝福的博客 – 博客频道 – CSDN.NET.

异常提示:

[2014-01-16 09:27:35 – Dex Loader] Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.
[2014-01-16 09:27:35 – tab_demo] Conversion to Dalvik format failed: Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.



错误原因:

出现这个错误是因为项目中了引用了两个相同的jar包。

解决办法:

我们只需要将相同 jar文件中重复的一个去除即可,详细步骤是:右键项目——Build Path——Configure Build Path…——Libriaries,然后我们在Libraries中将出现的相同jar文件去除一个,点击ok即可修复项目异常,通常我都是直接将 Android Private Libraries删掉就行了,但是这样做只是临时性的修复,每当我重启eclipse的时候,eclipse就会自动再载入一次相同的jar文件,重新 触发异常,所以大家也可以试试楼下评论的方法:卸载掉19版本的build tools,安装18.1.1及以下版本的build tools。
        右键选择项目,选择Build Path——Configure Build Path…,然后在弹出框中选择:Java Build Path——Libraries,最后将Android Dependencies和Android Private Libraries移除(remove)掉即可。 我遇到这种问题的时候,Android Dependencies和Android Private Libraries里面都没有我项目所需的库,所以我remove掉之后不需要重新添加jar包,但是如果你的Android Dependencies和Android Private Libraries里面有项目所需的库的话,需要你重新引入,否则项目会报错,jar引入:右键选择lib中的jar文件选择Add Build Path即可。

[转载]android_加速Web开发的9款知名HTML5框架 | 安卓开发 | android学习 -android开发- android开源码 – 移动互联网

mikel阅读(1197)

[转载]android_加速Web开发的9款知名HTML5框架 | 安卓开发 | android学习 -android开发- android开源码 – 移动互联网.

与手工编码比起来,HTML5框架在准确性和正确率方面给予了保证。大多数HTML5框架都会有一个组合或者包含一些额外的组件,比如JQuery Scripts。CSS3样式表则以改善多媒体特征的功能性和响应式的Web布局为主。

如果你有一个根据固定流程进行的特定项目,为了保证项目刚开始就能有较高的正确率,那么你可以利用HTML5框架来提升整个开发过程,并且让网站拥有一致性结构。

伴随着智能手机正在席卷整个移动市场,在移动设备上开发出兼容性高的网站已变的非常重要,相信所有的网站所有者都希望自己的网站能够兼容所有的智能手机平台,HTML5框架可以轻松解决这种跨平台问题。

如果你是一名Web设计师,你肯定有兴趣开发出杀手级的应用,那么使用下面推荐的HTML5框架将会对你的开发过程产生巨大的帮助,帮你搭建跨平台网站。

1. LungoJS


这个是被认为开发移动网站最好的HTML5开发框架,使用 HTML5/CSS3 和 JavaScript 技术。可帮助创建基于 iOS、 Android、 Blackberry 和 WebOS 平台的应用程序。该框架可利用当前移动设备的高级特性,可捕捉事件包括滑动、触屏、长按等。无需使用图片,全部采用向量声称。

Lungo.JS 无需服务器端支持,可帮助实现 HTML5 特性,包括 WebSQL、Geolocation、 History、 Device orientation 等等。这是一个完全可定制的框架,可用来创建应用、游戏等程序。

2.Kendo UI

Kendo UI是一个HTML5平台,开发者利用它可以开发新颖的、交互的移动应用程序和网站。该框架提供了大量的动画和丰富的拖拽功能、模板功能以及提供了将近10款客户端常用的数据绑定小部件,如图表、组合框以及常用表格。

3.Sencha Touch

Sencha Touch是第一个基于HTML5的移动应用框架,利用JavaScript、HTML5和CSS3来构建移动应用程序,该框架利用本地代理存储离线数据,具体使用HTML5来渲染视频和音频组件。

可以让你的Web App看起来就像本地应用程序一样。美丽的用户界面组件和丰富的数据管理,全部基于最新的HTML5和CSS3的Web标准,全面兼容Android和Apple iOS设备。

4.Jo


该框架可以创建像本地一样的应用,并且兼容任何操作系统,无论是Blackberry、iOS还是Android。并且提供许多HTML5小部件。使用它可以解决任何动画设计方面的问题。

5.52 Framework

52 Framework拥有16列的网格模板。该框架来自于CSS3样式里的新“Selection”、阴影、圆角以及有效的HTML5标记。该框架还提供了一些特殊的脚本和样式用于IE6。

6. G5 Framework

如果你想要快速实现Web开发,并且想要重用ant主题或应用程序或网站项目,那么G5 框架是 您最好的选择,因为该框架旨在提升开发效率、减少代码。该框架采用特色的PHP激活类、SEO优化技术。除了G5自身所带的这些功能特性外,它还集成其他 许多功能,例如Orbit Slider、CSS3 PIE、Reveal Modals、CSS3 Buttons和Tipsy Tooltips等。

7.LimeJS

LimeJS 是一个 JavaScript 游戏开发框架,用于快速构建运行于触屏设备和桌面浏览器的游戏。允许开发者创建基于 HTML5 的游戏,支持主流浏览器包括iOS。

8.jQuery Mobile

JQuery Mobile(JQueryMobile)是 jQuery在手机上和平板设备上的版本。jQuery Mobile 不仅会给主流移动平台带来jQuery核心库,而且会发布一个完整统一的jQuery移动UI框架。支持全球主流的移动平台。jQuery Mobile开发团队说:能开发这个项目,我们非常兴奋。移动Web太需要一个跨浏览器的框架,让开发人员开发出真正的移动Web网站。我们将尽全力去满 足这样的需求。

9.Phone Gap


PhoneGap是一个开源的开发框架, 使用HTML,CSS和JavaScript来构建跨平台的的移动应用程序。它使开发者能够利用 iPhone,Android,Palm,Symbian,Blackberry,Windows Phone和Beda智能手机的核心功能——包括地理定位,加速器,联系人,声音和振动等。

来自: WEBDEVELOPERJUICE

[转载]Android 开源框架ActionBarSherlock 和 ViewPager 仿网易新闻客户端 - Mobile Internet developer - 博客频道 - CSDN.NET

mikel阅读(953)

[转载]Android 开源框架ActionBarSherlock 和 ViewPager 仿网易新闻客户端 – Mobile Internet developer – 博客频道 – CSDN.NET.

转载请注明出处:http://blog.csdn.net/xiaanming/article/details/9971721

大 家都知道Android的ActionBar是在3.0以上才有的,那么在3.0以下呢,google并没有给我提供在3.0以下支持ActionBar 的包,但是外国的大牛JakeWharton实现了在3.0以下使用ActionBar, JakeWharton这位大牛是 ActionBarSherlock,Android-ViewPagerIndicator ,NineOldAndroids的作者,非常厉害的一个人,Github的关注量超过2.6K,我左侧的友情链接里面有他的Github的主页链接,有 兴趣的朋友可以去follow下他,今天我们使用的是他的开源框架ActionBarSherlock,ActionBarSherlock是让 Action Bar功能支持2.X后的所有平台,而且他会自动的判断是调用原生Action Bar还是使用扩展ActionBar,很多知名的应用也使用这个库,我之前对ActionBar也不了解,所以就去下了 ActionBarSherlock来好好的了解了解ActionBar的使用

把红色框框标记的文件导入Eclipse里面,我们可以先看下例子,来了解下ActionBar的一些使用情况

  • 我们新建一个Android工程,叫ViewPagerAndTab,然后指定ActionBarSherlock为ViewPagerAndTab的库工程,右键工程—>Properties

通过上面的几步我们就指定ActionBarSherlock为ViewPagerAndTab的库工程,接下来我们就能在3.0以下使用ActionBar,我这里使用的是ActionBar  Tab和ViewPager仿网易新闻,我们看看主要代码的编写

1.先看布局文件,里面一个ViewPager,非常简单


2.MainActivity代码,点击ActionBar的Tab,ViewPager切换不同的Fragment,滑动ViewPager,选中相对应的ActiionBar Tab

package com.example.viewpagerandtabdemo;

import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.ActionBar.Tab;
import com.actionbarsherlock.app.SherlockFragmentActivity;

public class MainActivity extends SherlockFragmentActivity implements ActionBar.TabListener, OnPageChangeListener{
/**
* 顶部Tab的title
*/
private String [] mTabTitles;

/**
* ViewPager对象的引用
*/
private ViewPager mViewPager;

/**
* 装载Fragment的容器,我们的每一个界面都是一个Fragment
*/
private List mFragmentList;

/**
* ActionBar对象的引用
*/
private ActionBar mActionBar;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//从资源文件在获取Tab的title
mTabTitles = getResources().getStringArray(R.array.tab_title);
mFragmentList = new ArrayList();

mViewPager = (ViewPager) findViewById(R.id.viewPager);
//设置Adapter
mViewPager.setAdapter(new TabPagerAdapter(getSupportFragmentManager(), mFragmentList));
//设置监听
mViewPager.setOnPageChangeListener(this);

//获取Action实例我们使用getSupportActionBar()方法
mActionBar = getSupportActionBar();

//隐藏Title
mActionBar.setDisplayShowTitleEnabled(false);
//隐藏Home logo
mActionBar.setDisplayShowHomeEnabled(false);
//设置ActionBar的导航模式为Tab
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

//为ActionBar添加Tab并设置TabListener
for(int i=0; i<mTabTitles.length; i++){
ActionBar.Tab tab = mActionBar.newTab();
tab.setText(mTabTitles[i]);
tab.setTabListener(this);
mActionBar.addTab(tab, i);
}

//将Fragment加入到List中,并将Tab的title传递给Fragment
for(int i=0; i<mTabTitles.length; i++){
Fragment fragment = new ItemFragment();
Bundle args = new Bundle();
args.putString("arg", mTabTitles[i]);
fragment.setArguments(args);

mFragmentList.add(fragment);
}

}

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
//点击ActionBar Tab的时候切换不同的Fragment界面
mViewPager.setCurrentItem(tab.getPosition());
}

@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {

}

@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {

}

@Override
public void onPageScrollStateChanged(int arg0) {

}

@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {

}

@Override
public void onPageSelected(int arg0) {
//滑动ViewPager的时候设置相对应的ActionBar Tab被选中
mActionBar.setSelectedNavigationItem(arg0);
}

}

我们使用 ActionBarSherlock的时候不再是继承Activity,而是继承 SherlockActivity,SherlockDialogFragment,SherlockFragmentActivity等等,我这里用到 Fragment,所以继承SherlockFragmentActivity,我们不能随便设置Activity的theme,以后我们要全屏显示的时 候直接设置android:theme=”@android:style/Theme.Black.NoTitleBar”

, 我们使用ActionBar就不能这样设置了,并且不能随便设置他的Theme,必须是Theme.Sherlock, Theme.Sherlock.Light, Theme.Sherlock.Light.DarkActionBar,或者是他们的子样式,不然就会出 java.lang.IllegalStateException异常,所以为了自定义ActionBar的Tab,我们必须修改其style

注意:我们还必须删除ViewPagerAndTab工程libs下面的android-support-v4.jar包,因为在ActionBarSherlock已经包含android-support-v4.jar

 

3.ViewPager的适配器TabPagerAdapter,因为我们用到Fragment,所以我们继承FragmentStatePagerAdapter而不是PagerAdapter

package com.example.viewpagerandtabdemo;

import java.util.List;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;

public class TabPagerAdapter extends FragmentStatePagerAdapter {
private List list;

//构造函数
public TabPagerAdapter(FragmentManager fm, List list) {
super(fm);
this.list = list;
}

@Override
public Fragment getItem(int arg0) {
return list.get(arg0);
}

@Override
public int getCount() {
return list.size();
}

}

4.ItemFragment 继承SherlockFragment,也可以直接继承Fragment,里面的的布局比较简单,一个TextView用来显示从Activity传递过来的ActionBar Tab的title

package com.example.viewpagerandtabdemo;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.actionbarsherlock.app.SherlockFragment;

public class ItemFragment extends SherlockFragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

View contextView = inflater.inflate(R.layout.fragment_item, container, false);
TextView mTextView = (TextView) contextView.findViewById(R.id.textview);

//获取Activity传递过来的参数
Bundle mBundle = getArguments();
String title = mBundle.getString("arg");

mTextView.setText(title);

return contextView;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}

}

然后我们将上面的Activity的theme设置成android:theme=”@style/Theme.Sherlock.Light.DarkActionBar” 运行项目看看效果,下图一是项目的效果,图二是网易的效果

是不是相差很大呢?人家下面的指示条是红色的,我们做出来的是蓝色的,人家选中Tab的字体颜色是红色,我们的不变色等等,那么我们要怎么才能做出网易新闻的那样子的效果,我们需要改变其style,改变如下


还有一些图片,selector我没有贴出来,可以去下载代码看看效果,改变style运行效果

好了,今天的讲解到此结束,有疑问的朋友请在下面留言,有兴趣的可以看看 开源框架ViewPageIndicator 和 ViewPager 仿网易新闻客户端Tab标签

 源码下载,请点击

很 多朋友说自己在4.1上面怎么设置style没效果,首先这个库是在2.X的机器上面使用ActionBar,3.0以后就是使用Andriod自带的 ActionBar,所以在3.0以上的系统使用的style为android自带的style,所以我们要将style文件做下修改,如下

    <style name="Themes.ActionBarTab" parent="@style/Theme.Sherlock">
        <!-- 去除ActionBar的Divider -->
        <item name="actionBarDivider">@null</item>
		<item name="android:actionBarDivider">@null</item>
        
        <!-- 设置ActionBar Tab的高度 -->
        <item name="actionBarSize">45dip</item>
		<item name="android:actionBarSize">45dip</item>
        
        <!-- 设置ActionBar Tab字体的样式 -->
        <item name="actionBarTabTextStyle">@style/Widget.Sherlock.ActionBar.TabText</item>
		<item name="android:actionBarTabTextStyle">@style/Widget.Sherlock.ActionBar.TabText</item>
        
        <!-- 设置ActionBar Tab的样式,例如下面的红色指引,Tab之间的间隙等等 -->
        <item name="actionBarTabStyle">@style/Widget.Sherlock.ActionBar.TabView</item>
		<item name="android:actionBarTabStyle">@style/Widget.Sherlock.ActionBar.TabView</item>
        
        <!-- 设置ActionBar的样式,这里简单的设置了ActionBar的背景 -->
        <item name="actionBarStyle">@style/Widget.Slider.ActionBar</item>
		<item name="android:actionBarStyle">@style/Widget.Slider.ActionBar</item>
    </style>
    
    
     <style name="Widget.Slider.ActionBar" parent="@style/Widget.Sherlock.ActionBar">  
        <item name="backgroundStacked">@drawable/base_action_bar_bg</item>
		<item name="android:backgroundStacked">@drawable/base_action_bar_bg</item>
    </style>

    <style name="Widget.Sherlock.ActionBar.TabText" parent="android:Widget.Holo.ActionBar.TabText">
        <item name="android:textColor">@drawable/selector_tabtext</item>
        <item name="android:textSize">15sp</item>
    </style>

    <style name="Widget.Sherlock.ActionBar.TabView" parent="Widget">
        <item name="android:background">@drawable/tab_indicator</item>
        <item name="android:paddingLeft">8dip</item>
        <item name="android:paddingRight">8dip</item>
    </style> 

[转载]人工智能和机器学习领域有哪些有趣的开源项目? | CODE

mikel阅读(889)

[转载]人工智能和机器学习领域有哪些有趣的开源项目? | CODE.

 

本文简要介绍了10款   Quora上网友推荐的 人工智能和机器学习领域方面的开源项目。

 


 

GraphLab

 

GraphLab是一种新的面向机器学习的并行框架。GraphLab提供了一个完整的平台,让机构可以使用可扩展的机器学习系统建立大数据以分析 产品,该公司客户包括Zillow、Adobe、Zynga、Pandora、Bosch、ExxonMobil等,它们从别的应用程序或者服务中抓取数 据,通过推荐系统、欺诈监测系统、情感及社交网络分析系统等系统模式将大数据理念转换为生产环境下可以使用的预测应用程序。( 详情

 

项目主页: http://graphlab.org/

 

Vowpal Wabbit

 

Vowpal Wabbit(Fast Online Learning)最初是由雅虎研究院建设的一个机器学习平台,目前该项目在微软研究院。它是由John Langford启动并主导的项目。

 

项目地址:  http://hunch.net/~vw/

 

scikits.learn

 

scikit-learn是一个开源的、构建在SciPy之上用于机器学习的 Python 模块。它包括简单而高效的工具,可用于数据挖掘和数据分析,适合于任何人,可在各种情况下重复使用、构建在 NumPy、SciPy和 matplotlib 之上,遵循BSD 协议。(详情

 

项目地址: http://scikit-learn.org/stable

 

Theano

 

Theano是一个python库,用来定义、优化和模拟数学表达式计算,用于高效的解决多维数组的计算问题。它使得写深度学习模型更加容易,同时也给出了一些关于在GPU上训练它们的选项。( 详情

 

项目地址: http://deeplearning.net/software/theano/

 

Mahout

 

Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout包含许多实现,包括聚 类、分类、推荐过滤、频繁子项挖掘。此外,通过使用 Apache Hadoop 库,Mahout 可以有效地扩展到云中。

 

项目主页: http://mahout.apache.org/

 

pybrain

 

pybrain是Python的一个机器学习模块,它的目标是为机器学习任务提供灵活、易应、强大的机器学习算法。pybrain包括神经网络、强化学习(及二者结合)、无监督学习、进化算法。以神经网络为核心,所有的训练方法都以神经网络为一个实例。

 

项目主页: http://pybrain.org/

 

OpenCV

 

OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。( 详情

 

项目主页: http://opencv.org/

 

Orange

 

Orange 是一个基于组件的数据挖掘和机器学习软件套装,它的功能即友好,又很强大,快速而又多功能的可视化编程前端,以便浏览数据分析和可视化,基绑定了 Python以进行脚本开发。它包含了完整的一系列的组件以进行数据预处理,并提供了数据帐目,过渡,建模,模式评估和勘探的功能。

 

项目主页: http://orange.biolab.si/

 

NLTK

NLTK(natural language toolkit)是python的自然语言处理工具包。2001年推出,至今发展非常活跃。它的主要作用是为了教学,至今已经在20多个国家60多所高校使用,里面包括了大量的词料库,以及自然语言处理方面的算法实现:分词, 词根计算, 分类, 语义分析等。

项目主页: http://nltk.org/

 

Nupic

 

Nupic是一个开源的人工智能平台。该项目由Grok(原名 Numenta)公司开发,其中包括了公司的算法和软件架构。 NuPIC 的运作接近于人脑,“当模式变化的时候,它会忘掉旧模式,记忆新模式”。如人脑一样,CLA 算法能够适应新的变化。( 详情

 

项目主页: http://numenta.org/nupic.html

 


以上是小编整理的10款人工智能和机器学习领域的开源项目。更多项目可参看这个列表: http://deeplearning.net/software_links/,或查看 Quora中更多网友的精彩回答

[转载]70%的代码跨平台重用,Google Inbox 是如何做到的? | 酷 壳 - CoolShell.cn

mikel阅读(973)

[转载]70%的代码跨平台重用,Google Inbox 是如何做到的? | 酷 壳 – CoolShell.cn.

原文链接《How Google Inbox shares 70% of its code across Android, iOS, and the Web

inbox2-640x264

开发一个移动应用在当下并不是一件容易的事情。如果想要获得最多的用户,你的应用通常需要覆盖 iOS, Android, 和 Web 三大平台。这就意味着同一个应用需要开发三个版本,使用 Objective-C 或者 Swift 开发 iOS 版本,使用 Java 开发 Android 版本,使用 JavaScript/CSS/HTML5 开发 Web 版本。工作量增大的同时也意味着有更多的 bug 需要修复。

这个问题也是 Google 在开发 Google Inbox 时致力要解决的。在最近发布的这款应用中,Google 使用了一些工具实现了70%的代码跨平台复用。

Google Inbox 覆盖 iOS, Android, Web 三个平台,它们使用的是同一个后台代码逻辑,只是前端的用户体验和平台相关特性的实现有所不同。Google 自主开发了一套辅助工具将 Android 版本的 Java 代码逻辑编译为 Objective-C (针对 iOS 平台) 和 JavaScript (针对 Web 浏览器)。 Java 到 JavaScript 的编译由 Google Web Toolkit SDK 完成,Java 到 Objective-C 的编译则由 J2ObjC (j2objc.org)来完成。

J2ObjC 是一个开源项目,由 Google 在2013年发布。Google Sheets (Google Docs 中的电子表格部分) 也使用了 J2ObjC,而 Google Inbox 则是目前使用 J2Objc 最多的 Google 项目。

Google Inbox 复用的代码逻辑包括:对话 (conversations),提醒 (reminders),联系人 (contacts)。还有网络相关功能和离线同步。这些代码逻辑的复用节省了大量的时间和成本。

在产品设计时,Google 将这些可复用功能划分为抽象的逻辑概念,比如:提醒的逻辑放在 “reminder.java” 中,可以被 Android UI 调用。对 iOS 版本而言,J2ObjC 将 “reminder.java” 编译成 Objective-C 代码,再由 iOS UI 调用。

Google 没有跨平台编译 UI 部分的代码,因为不同平台的UI特性各有不同,盲目统一会导致非常糟糕的用户体验。代码复用只是针对可以共享的后台逻辑,前端的UI实现是完全原生 (native) 的。这与 Xamarin (一个基于 Microsoft C# 的跨平台移动开发工具) 提出的概念类似。

跨平台代码复用通常会带来一些性能上的问题。Garrick Toubassi,Engineering Director 和 Google Inbox 项目组成员,对此表示: “性能上的影响如果有的话,也可以说是微不足道的。我们做过大量的性能测试。因为没有加入额外的中间层来处理跨平台兼容性,所有代码最后都是平台原生代 码。J2ObjC 编译生成的目标代码和 Java 源代码拥有大致相同的对象数量和对象图谱复杂度 (object graph complexity) ”。

Google 使用的整套方法解决了跨平台移动开发中的一个很重要的问题,同时也推进了安卓先行 (Android-first) 的移动开发策略。

更多 Google Inbox 文章请猛戳 Gmail 官方博客

[转载]ECSHOP分词搜索模糊分词搜索和商品列表关键字描红功能_Tomener_新浪博客

mikel阅读(1032)

[转载]ECSHOP分词搜索模糊分词搜索和商品列表关键字描红功能_Tomener_新浪博客.

最近在用ECSHOP做一个商城,发现ECSHOP的模糊搜索要求太高,需要加入and、空格、加号等,客户搜索的时候不可能这样操作。所以想对搜 索功能进行改进,可是在网上没有找到这样的插件,有收费的,结果要2000大元。考虑了一下申请经费的麻烦,自己费点儿力气做一个吧。

考虑到工期的问题,采用了织梦的分词算法,搜索效果虽然不是特别理想,但是这么短的时间也只能这样了。

在此分享给没钱又着急的朋友,需要用到的文件在文章末尾提供下载,大家下载后也可以直接覆盖使用。

一、ECSHOP联想下拉框

1、修改page_header.lbi模版文件,将搜索文本框修改为:

<</span>input name="keywords" type="text" id="keyword" value="
ecshop" class="search-input"  onfocus="if(this.value=='ecshop'){this.value='';this.style.color='#000';}"  onblur="closediv();if(this.value==''){this.value='ecshop';this.style.color='#999';}" style="color:#999;"  onkeyup="keyupdeal(event,this.value);" onkeydown="keydowndeal(event);" onclick="keyupdeal(event,this.value);"    />
   <</span>div id="search_suggest" style="display:none;" onmouseover='javascript:_over();' onmouseout='javascript:_out();'></</span>div>

嵌入js文件

<</span>script type="text/javascript" src="/js/suggest.js"></</span>script>

嵌入css文件

<</span>link href="/themes/default/images/css.css" rel="stylesheet" type="text/css">

2、根目录添加php文件search_suggest.php文件

二、分词搜索

根目录增加织梦分词算法函数和词库:lib_splitword_full.php和dededic.csv

1、修改search.php文件第196行

            $arr        = explode(' ', $_REQUEST['keywords']);
            $operator   = " AND ";

改为:

            require("lib_splitword_full.php");
            $sp = new SplitWord();
            $fenci=$sp->SplitRMM($_REQUEST['keywords']);
            $sp->Clear();
            
            $arr        = explode(' ', $fenci);
            $arr        = array_reverse($arr);//将数组倒序排列,并插入完整关键字到数组末尾
            $arr[count($arr)]=$_REQUEST['keywords'];
            $arr        = array_reverse($arr);//再次将数组倒序,使完整关键字可以第一个被检索
            array_pop($arr);//删除织梦分词产生的数组最后一个元素为空格
            $operator   = " and ";//sql检索语句使用union联合检索
            $piaohong = $arr;//$arr数组在飘红的时候已经被产品列表占用了,所以另外赋值给一个数组备用。
            

2、修改search.php文件第382行到403行

 
    $sql   = "SELECT COUNT(*) FROM " .$ecs->table('goods'). " AS g ".
        "WHERE g.is_delete = 0 AND g.is_on_sale = 1 AND g.is_alone_sale = 1 $attr_in ".
        "AND (( 1 " . $categories . $keywords . $brand . $min_price . $max_price . $intro . $outstock ." ) ".$tag_where." )";
    $count = $db->getOne($sql);

    $max_page = ($count> 0) ? ceil($count / $size) : 1;
    if ($page > $max_page)
    {
        $page = $max_page;
    }

    
    $sql = "SELECT g.goods_id, g.goods_name, g.market_price, g.is_new, g.is_best, g.is_hot, g.shop_price AS org_price, ".
                "IFNULL(mp.user_price, g.shop_price * '$_SESSION[discount]') AS shop_price, ".
                "g.promote_price, g.promote_start_date, g.promote_end_date, g.goods_thumb, g.goods_img, g.goods_brief, g.goods_type ".
            "FROM " .$ecs->table('goods'). " AS g ".
            "LEFT JOIN " . $GLOBALS['ecs']->table('member_price') . " AS mp ".
                    "ON mp.goods_id = g.goods_id AND mp.user_rank = '$_SESSION[user_rank]' ".
            "WHERE g.is_delete = 0 AND g.is_on_sale = 1 AND g.is_alone_sale = 1 $attr_in ".
                "AND (( 1 " . $categories . $keywords . $brand . $min_price . $max_price . $intro . $outstock . " ) ".$tag_where." ) " .
            "ORDER BY $sort $order";

修改为:

$select = "(";
    foreach($arr AS $se => $t)
    {

        $select .= "SELECT click_count,goods_sn,is_alone_sale,is_on_sale,is_delete,goods_id, goods_name, market_price, is_new, is_best, is_hot, shop_price AS org_price, shop_price ,promote_price, promote_start_date, promote_end_date, goods_thumb, goods_img, goods_brief, goods_type FROM(select  click_count,goods_sn,is_alone_sale,is_on_sale,is_delete,goods_id, goods_name, market_price, is_new, is_best, is_hot, shop_price AS org_price, shop_price ,promote_price, promote_start_date, promote_end_date, goods_thumb, goods_img, goods_brief, goods_type from".$ecs->table('goods')." where goods_name like '%$t%' order by click_count desc) AS P$se";//第一个关键词是完整关键词
        if($se==0)//插入一个当所有拆分关键词在商品名称中为and时的sql语句
        {
            $select .= " UNION SELECT click_count,goods_sn,is_alone_sale,is_on_sale,is_delete,goods_id, goods_name, market_price, is_new, is_best, is_hot, shop_price AS org_price, shop_price ,promote_price, promote_start_date, promote_end_date, goods_thumb, goods_img, goods_brief, goods_type FROM(select  click_count,goods_sn,is_alone_sale,is_on_sale,is_delete,goods_id, goods_name, market_price, is_new, is_best, is_hot, shop_price AS org_price, shop_price ,promote_price, promote_start_date, promote_end_date, goods_thumb, goods_img, goods_brief, goods_type from".$ecs->table('goods')." where 1  $keywords order by click_count desc) AS Pa";
        }
        if($se<<span style="color: #008080;">count($arr)-1)//在每条select语句后增加union,最后一个不加,所以$se小于元素数量-1
        {
            $select.=" UNION ";
        }
    }
    $select.=")";
    if($select=="()")//当关键词为空时,没有拆分关键词,所以用于union的$select为空,仍需要调用goods表
    {
         $sql   = "SELECT COUNT(*) FROM ".$ecs->table("goods")." AS P " .
            "WHERE is_delete = 0 AND is_on_sale = 1 AND is_alone_sale = 1  " ;
    }
    else
    {
         
        $sql   = "SELECT COUNT(*) FROM $select AS P " .
                "WHERE is_delete = 0 AND is_on_sale = 1 AND is_alone_sale = 1  " ;
    }
    $count = $db->getOne($sql);

    $max_page = ($count> 0) ? ceil($count / $size) : 1;
    if ($page > $max_page)
    {
        $page = $max_page;
    }
    if($select=="()")//当关键词为空时,没有拆分关键词,所以用于union的$select为空,仍需要调用goods表 
    {
         
    $sql = "SELECT click_count,goods_sn,is_alone_sale,is_on_sale,is_delete,goods_id, goods_name, market_price, is_new, is_best, is_hot, shop_price AS org_price, shop_price ,promote_price, promote_start_date, promote_end_date, goods_thumb, goods_img, goods_brief, goods_type ".
            "FROM ".$ecs->table("goods")." AS P " .
            "WHERE is_delete = 0 AND is_on_sale = 1 AND is_alone_sale = 1  " ;
    }
    else
    {
         
            $sql = "SELECT click_count,goods_sn,is_alone_sale,is_on_sale,is_delete,goods_id, goods_name, market_price, is_new, is_best, is_hot, shop_price AS org_price, shop_price ,promote_price, promote_start_date, promote_end_date, goods_thumb, goods_img, goods_brief, goods_type ".
            "FROM $select AS P " .
            "WHERE is_delete = 0 AND is_on_sale = 1 AND is_alone_sale = 1  " ;
    }
   

三、搜索出的产品列表产品关键词飘红功能:

1、修改search.php文件第473行到480行

if($display == 'grid')
        {
            $arr[$row['goods_id']]['goods_name']    = $GLOBALS['_CFG']['goods_name_length'] > 0 ? sub_str($row['goods_name'], $GLOBALS['_CFG']['goods_name_length']) : $row['goods_name'];
        }
        else
        {
            $arr[$row['goods_id']]['goods_name'] = $row['goods_name'];
        }

修改为:

        $tihuan=$row["goods_name"];
        foreach($piaohong AS $ph_count => $ph)
        {

            $tihuan = str_replace($ph,"$ph",$tihuan);
        }       
        $arr[$row['goods_id']]['goods_name'] = $row['goods_name'];//因为前台用到没有替换的商品名称,所以保留goods_name值
           $arr[$row['goods_id']]['tihuan'] = $tihuan;
        

2、修改search.dwt模板文件

将显示商品名称的地方替换为:

 

四、文中所有涉及的修改和要用到的文件,因为没找到上传文件的地方所有放到其他网站了。下载地址:http://download.csdn.net/detail/sun04zh3/6216851 

[转载]使用cuda加速卷积神经网络-手写数字识别准确率99.7% - zhxfl - 博客园

mikel阅读(1884)

[转载]使用cuda加速卷积神经网络-手写数字识别准确率99.7% – zhxfl – 博客园.

cuda:https://github.com/zhxfl/cuCNN-I

C语言版本参考自:http://eric-yuan.me/

针对著名手写数字识别的库mnist,准确率是99.7%,在几分钟内,CNN的训练就可以达到99.60%左右的准确率。

参数配置

网络的配置使用Config.txt进行配置##之间是注释,代码会自动过滤掉,其他格式参考如下:

#Comment#
#NON_LINEARITY CAN = NL_SIGMOID , NL_TANH , NL_RELU#
##
##
##
##

IS_GRADIENT_CHECKING = false;
BATCH_SIZE = 200;
NON_LINEARITY = NL_RELU;

[
LAYER = CONV;
KERNEL_SIZE = 5;
KERNEL_AMOUNT = 10;
WEIGHT_DECAY = 1e-6;
POOLING_DIM = 2;
]

[
LAYER = CONV;
KERNEL_SIZE = 5;
KERNEL_AMOUNT = 20;
WEIGHT_DECAY = 1e-6;
POOLING_DIM = 2;
]

[
LAYER = FC;
NUM_HIDDEN_NEURONS = 256;
WEIGHT_DECAY = 1e-6;
DROPOUT_RATE = 0.5;
]

[
LAYER = FC;
NUM_HIDDEN_NEURONS = 256;
WEIGHT_DECAY = 1e-6;
DROPOUT_RATE = 0.5;
]

[
LAYER = SOFTMAX;
NUM_CLASSES = 10;
WEIGHT_DECAY = 1e-6;
]

使用cuda加速卷积神经网络-手写数字识别准确率99.7%

源码和运行结果

cuda:https://github.com/zhxfl/cuCNN-I

C语言版本参考自:http://eric-yuan.me/

针对著名手写数字识别的库mnist,准确率是99.7%,在几分钟内,CNN的训练就可以达到99.60%左右的准确率。

参数配置

网络的配置使用Config.txt进行配置##之间是注释,代码会自动过滤掉,其他格式参考如下:

按 Ctrl+C 复制代码

按 Ctrl+C 复制代码

1)目前代码支持多个卷积层,多个全链接层。

2)卷积层默认带有池化层,池化算法目前只支持最大值池化。

3)卷积层的卷积核大小只支持奇数。

4)全链接层支持Dropconnect。(配置里面写的是dropout,后面会纠正这个的)

5)weight_decay这个参数如果你不知道是做什么,也可以先不理会,先用这个值就行了。

编译代码

1)代码目前依赖cuda-6.0以及opencv,如果你不想去装opencv,可以将util.cu和util.h所有有关opencv的代码都去掉,整个代码只有这里使用到opencv,而且只是由于我在开发过程中需要显示图片来调试而已。

2)代码直接可以导入nsight然后编译运行。同时也可以再vs2010里面编译运行。

代码特性

1)我们对数据做了处理,每次进行训练之前,都会随机的进行旋转、尺度变换、畸变和裁剪。下图是两个例子,实际上,这样做非常有效,使得我们的准确能够更高

2)整个代码采用cuda进行加速,其中我们用到了cublas.lib和curand.lib两个库,一个是矩阵运算一个是随机数的生成。我一次 性申请了所有需要使用的内存,在程序开始运行之后,就不存在任何CPU和GPU之间的数据交换,事实证明这样非常有效。程序的性能比原来作者C语言版本快 了数十倍左右(如果网络比较大,可以达到一百倍左右的加速比)。我们每个epos使用1600ms,处理了60000张图片,也就是训练一张图片大概是 0.0266ms。

3)实际上,如果训练多个网络,然后进行投票,准确率可以达到99.82%,这个结果是目前为止所有公开发表结果中最好(99.79%)的 。

[转载]PhoneGap+JqueryMob+html5开发跨平台移动app-Android实例教程-eoe 移动开发者论坛 - Powered by Discuz!

mikel阅读(1610)

[转载]PhoneGap+JqueryMob+html5开发跨平台移动app-Android实例教程-eoe 移动开发者论坛 – Powered by Discuz!.

PhoneGap+JQueryMob+html5开发跨平台移动app
一、PhoneGap简介
PhoneGap 是一个用基于HTML,CSS和JavaScript的,创建移动跨平台移动应用程序的快速开发平台。它使开发者能够利用 iPhone,Android,Palm,Symbian,WP7,Bada和Blackberry智能手机的核心功能——包括地理定位,加速器,联系 人,声音和振动等,此外PhoneGap拥有丰富的插件,可以以此扩展很多功能。
PhoneGap 在2011年7月29日发布1.0版本,在2011年10月4日被Adobe公司收购,截止2013年11月29日最新版本为2.9.1。
官方网址为:http://phonegap.com/(官方提供中文的Api)
二、JQuery for mobile简介
JQueryMobile 是一个极好的框架,用于编写移动Web 应用程序。jQuery Mobile 构建于流行的jQuery 和用户界面 (UI) 之上,是一个有效的统一框架,可为您编写移动Web 应用程序。有了 jQuery Mobile,就可以确保外观、感觉和行为在不同移动平台上的一致性。jQueryMobile 基本特性包括:
1、一般简单性和灵活性
该框架易于使用。您可以:
o   主要使用标记驱开发动页面,无需或仅需很少JavaScript
o   使用高级 JavaScript和事件。
o   使用一个 HTML 文件和多个嵌入页面。
o   将应用程序分解成多个页面。
2、逐步强化和全面兼容
尽管 jQuery Mobile 利用最新的HTML5、CSS3 和 JavaScript,但并非所有移动设备都提供这样的支持。jQueryMobile 的理念是同时支持高端和低端设备,比如那些不支持JavaScript 的设备,尽量提供最好的体验。
3、支持触摸屏输入和其他输入方法。
jQuery Mobile 为不同输入方法和事件提供支持:触摸屏、鼠标和基于光标焦点的用户输入。
4、可访问性
jQuery Mobile 在设计时考虑了访问能力,它支持Accessible Rich Internet Applications (WAI-ARIA),以帮助使用辅助技术的残障人士访问Web 页面。
5、轻量级和模块化
该框架属于轻量级,拥有一个大小(版本 1.0.1 进行了缩小和压缩)为24KB 的 JavaScript 库,7KB的 CSS 以及一些图标。
6、主题
该框架还提供一个主题系统,允许您定义自己的应用程序样式。有了这个新的ThemeRoller 应用程序,您就可以轻松地创建您自己的主题。
jQueryMobile 框架包括构建完整移动 Web 应用程序和网站所需的所有UI 组件。页面、对话框、工具栏、不同类型的列表视图,各种表单元素和按钮等。jQueryMobile 构建于 jQuery 内核之上,因此您可以访问关键设备,包括HTML 和 XML 文档对象模型 (DOM) 的遍历操作;事件处理;使用Ajax 服务器通信;以及 Web 页面的动画和图像效果。
有了jQuery Mobile,您就可以轻而易举地编写基础 Web 应用程序。由于jQuery Mobile 是一个非常全面的基础架构,提供了一些高级事件和API,所以您还可以编写高级移动 Web 应用程序和网站
官方网址为:http://jquerymobile.com/(官网有各种效果的列子和代码api)
三、开发环境搭建示例(Android
1、环境说明

 

        本文介绍的开发工具是Eclipse,但也有做前端得使用Dreamweaver5.5
+PhoneGap开发的,但公司装不上PhoneGap没法尝试这样的开发,就先用Eclipse将就一下吧。
2、添加PhoneGap开发包及js

 

     在Eclipse中创建新的Android项目:TestJqueryForMobile,在assets目录下面创建文件夹www,再在www文 件夹下面创建css和js文件夹,将在PhoneGap官网下载的包解压找到cordova.js文件复制到刚才创建的js文件夹中,将 DroidGap-2.9.1.jar文件添加到libs中并buildpath。
3、添加Jqueryfor mobile js库和css

 

    解压在Jquery for mobile官网下载的包,将css下面的文件和文件夹复制到刚才创建的assets/www/css/目录下,将js下面的文件和文件夹复制到刚才创建 的assets/www/js/目录下。到现在我们在Eclipse上开发跨平台应用的环境就已经搭建好了。如下图:
file:///C:\DOCUME~1\yyl\LOCALS~1\Temp\msohtmlclip1\01\clip_image002.jpg

4、
编写一个页面

 

   下面我们通过用Html编写一个Jquery提供的界面风格的程序界面,并通过PhoneGap调用系统本地api拍照,取照片。
        先在assets/www/目录下面创建一个html文件:index.html,并用jquery绘制界面,在项目的 MainActivity.java中继承DroidGap.java(来自于DroidGap-2.9.1.jar)并在onCreate方法中载入 assets/www/index.html文件。
MainActivity.java中的代码段:
    @Override
    public void onCreate(BundlesavedInstanceState)
    {
        super.onCreate(savedInstanceState);
        super.loadUrl(“file:///android_asset/www/index.html”);
    }
Index.html中的代码段:
    <scriptsrc=”js/jquery.js”></script>
//载入jquery的js库
    <scriptsrc=”js/cordova.js”></script>
//载入PhoneGap的js库
    <scriptsrc=”js/jquery.mobile-1.3.2.min.js”></script>
//载入jquery for mobilejs

 

5、效果:

 

file:///C:\DOCUME~1\yyl\LOCALS~1\Temp\msohtmlclip1\01\clip_image004.jpgfile:///C:\DOCUME~1\yyl\LOCALS~1\Temp\msohtmlclip1\01\clip_image006.jpgfile:///C:\DOCUME~1\yyl\LOCALS~1\Temp\msohtmlclip1\01\clip_image008.jpgfile:///C:\DOCUME~1\yyl\LOCALS~1\Temp\msohtmlclip1\01\clip_image010.jpg
     

四、
优劣势分析
优点:

 

1、 上手迅速并支持快速迭代。
2、支持跨平台和跨设备开发。
3、解决系统碎片化,主要针对Android。
缺点:

 

1、比原生程序运行慢。
2、有限的能力。
总结
    总的说来,使用JQueryMobile和HTML5作为手机应用开发平台是可行的。然而,这并不适用于(至少到目前为止)所有类型的应用程序。对于简单的内容显示和数据输入类型的 应用程序(相对的是需要丰富多媒体/游戏程序),它是对原生程序一个有力的增强。
在接下来的1-2年中,随着硬件变得越来越快,手机设备越来越多样化,相信HTML5(JQuery Mobile,PhoneGap, 等等)在手机应用开发中会成为更加重要的技术。

[转载]聊着聊着我就上了你……的微信(两处都可以劫持微信登录的漏洞)_黑客技术

mikel阅读(1328)

[转载]聊着聊着我就上了你……的微信(两处都可以劫持微信登录的漏洞)_黑客技术.

一、mac版客户端登录的劫持

mac版客户端的扫码登录确认页的请求为如下(有些以星号代替了)

http://szsupport.weixin.qq.com/cgi-bin/mmsupport-bin/qrcodelogin?username=*********&key=*************&clientversion=25030133&devicetype=Android-18&lan=zh_CN&uuid=AXBIICc4sUSDsFnefkNP&pass_ticket=DebNjGnP2dJnq1bMvHvgL%2BezqqE70Ry9iWB625%2FRT8RRnwCD3tlq3qxuxG5YPzhx

经过测试可发现,此请求无需用户扫码动作确认,也没有签名保护,其中username和uuid分别是用户的微信号和二维码字符,很容易得到。key无法被攻击者猜出,但是也可以通过别的方式得到,比如如下方式

微 信的公共账号发的文章url为这种:http://mp.weixin.qq.com/s?__biz=**********==& mid=10000001&idx=1&sn=bdc73ae816f2e7097c225b6070b1f2f2&from=singlemessage&isappinstalled=0#rd

在 微信中打开这种链接,最终的目标页会被微信浏览器加上key和pass_ticket参数,这样只要我们能在这篇文章中插入个自定义url的图片即可通过 referer偷到这个key。公众账号发表的文章不可以直接写自定义的IMG,但通过修改http请求里的参数就可以把图片地址换成我们自己服务器上的 url了

这样只要发送给受害者点击,或者欺骗他扫描此链接的二维码,然后就可以得到key,然后拼接那个扫码登录确认页请求,点击确认登录,我们的客户端就可以自动登录了

二、网页版微信登录的劫持

网页版客户端的扫码登录确认页的请求为如下(有些以星号代替了)

http://login.weixin.qq.com/confirm?uuid=e921eed1fbf84e&key=*****************&lang=zh_CN&scan=1406467880&clientversion=25030133&devicetype=Android-18

经过测试可发现,此请求也没有签名保护,但需用户扫码动作确认,其中uuid分别是二维码字符,很容易得到。key的话也可以通过如上方式获得。所以我们需要做的就是再让用户扫下码。

网页版二维码链接原文是这种https://login.weixin.qq.com/l/e921eed1fbf84e,经测试发现,可以直接把这个链接发送给用户访问,也可以达到用户扫描的效果

这样只要给受害者发送两个链接诱惑他点击,或者让他点击一个页面然后诱惑他去扫描内容中的二维码,就可以得到key,并让我们的请求合法。然后再拼接那个扫码登录确认页请求,点击确认登录,我们的网页版就可以自动登录了

漏洞证明:

首先在公众账号的内容中加入自定义图片

QQ20140731-1副本.png

mac客户端劫持:

先发送欺骗她点击

IMG_0962.PNG

然后我会收到

QQ20140731-7@2x.png

然后在浏览器点击确认登录

QQ20140731-6@2x.png

最后登录成功

QQ20140731-5@2x.png

网页版微信劫持:

先聊

1.pic.jpg

然后收到key

QQ20140731-3.png

QQ20140731-2.png

QQ20140731-1.png

修复方案:

如果没有需求,尽量公共账号发的消息文章中不允许有自定义src的图片

保护好get参数key不被referer等泄露,如果可以尽量用post

mac版的扫码登录需要做成和网页版一样,需要用户扫码确认才可以

对登录确认页的参数进行签名校验

等等……

[转载]安卓微信数据库解密 - C/C++代码 - BlackFeather'S Blog

mikel阅读(1059)

[转载]安卓微信数据库解密 – C/C++代码 – BlackFeather’S Blog.

微信聊天记录备份恢复助手正式发布!

微信聊天记录恢复助手 软件下载地址http://www.fenloger.com/  同时支持安卓和苹果设备哦!~

 

刚刚开通了群,欢迎各位加入参与互动讨论与问题反馈!!群号:330726869

///////////////////////////////////////// /////////////////////////////////////////

 

正文开始:

1.uin怎么获取?

这个uin不是登录的帐号,而是属于内部的、程序界面上不可见的一个编号。

至于查看,最简单的方法就是登录web微信后,按F12打开网页调试工具,然后ctrl+F搜索“uin”,可以找到一串长长的URL,里面的uin就是当前登录的微信的uin。

2.串号和uin怎么都正确的怎么还是没办法解密

先 说说串号这个玩意,几个热心的朋友反馈了这个问题,经过博主测试发现不同的手机使用的不一定是IMEI,也可能是IMSI等等,而且串号也不一定是标准的 15位,可能是各种奇葩,比如输入*#06#出来的是一个,但是在微信程序里用的却是另一个非常奇葩的东西,这种情况多在双卡双待和山寨机中出现,经过严 格的测试,现在已经能做到精确识别,那几位热心的朋友也赠与了不同的代码表示鼓励。

3.计算出来了正确的key为什么无法打开数据库文件

微 信这个变态用的不是标准的SQLite数据库,那个帖子也提到了不是数据库加密,是文件的内容加密,其实是SQLcipher。官方上竟然还卖到 149$,不过倒是开放了源码,水平够高的可以自己尝试编译。google还能搜索到SQLcipher for windows这个很好编译,不过博主不知是长相问题还是人品问题,编译出来的无法打开微信的数据库,后来改了这份代码才完成。这里为了方便各位测试查 看,我提供一个小工具:

点击下载:SQLCipher数据库查看器

4.数据库文件内容是加密的,怎么还原

这 个是某些特殊情况下用到的,比如聊天记录删除了数据库中就没了,但是某个网友测试说数据库无法查询出来了,但是在文件中还是有残留的。这个情况我没测试 过,不过想想感觉有这个可能,就跟硬盘上删除了文件其实就是删除了文件的硬盘索引,内容还是残留在硬盘上可以还原一样,sqlite数据库删除的条目只是 抹去了索引,内容还存在这个文件中。

网 上的都是直接打开读取,并没有解密还原这个文件成普通的sqlite数据库,使用sqlcipher的导出方法也只是将可查询的内容导出。后来博主花了时 间通读了内容加密的方式,做了一个小程序将加密的文件内容直接解密,不操作修改任何数据,非数据库转换,直接数据流解密,完全还原出来了原始的未加密数据 库文件,大小不变,无内容损失,可以直接用sqlite admin等工具直接打开。

5.已经删除的聊天内容可以恢复么

通过上述第4的方式还原出原数据后,经测试可以恢复。sqlite的删除并不会从文件中彻底删掉,而是抹掉索引,所以可以通过扫描原始文件恢复。前提是没有重装过微信。。。

各位还有什么问题可以留言继续补充,帮助各位解决问题。

联系博主请点击页面最上方的红色按钮。