Tuesday, December 27, 2016

ThinkPHP SQLSTATE[HY000] [2002] No such file or directory


SQLSTATE[HY000] [2002] No such file or directory

错误位置

FILE: /Users/Hades/Hades/Study/PHP/WebSites/av/ThinkPHP/Library/Think/Db/Driver.class.php  LINE: 117

如图:


解决方案:

我没搞清楚原理,
我将 /application/common/con/config.php配置文件中的 Localhsot 修改成了127.0.0.1
就OK了!




PHPStrom Mutiple difnitions exits for class Controller?


原理:
因为,使用了同名的命名空间,所以,在加载缓存的时候,吧Mode里面其他的Controller
给过滤掉,就可以了!


遇到问题后,上网找了半天,发现没有完美的答案(改源码的能叫完美吗?),后来最后在
http://stackoverflow.com/questions/23066665/multiple-definitions-exist-for-class 找到了相关类似办法。就记下分享给大家。
真正的完美解决办法是,phpstorm->file->Setting->Directorires 里把 ThinkPHP/Model 目录设置为 Excluded ,保存,马上就可以完美提示了。


Saturday, September 24, 2016

我很庆幸自己生活在时代

我感觉,自己算是活在最好的时代了,因为,我真的是太自由了。你要知道,在我之前的2000多年里面,中国,从来没有这样强大过!

是的,我生活在最好的时代。

以前,就算是皇帝,他也没有Mac,也手机,也不能像看什么就看什么?

我现在,真的是过着帝王般的生活吧。哈哈,不愁吃不愁穿的,只要自己的活着就好了。不用还房贷,也不用管太多的事情。很多的事情,只要对自己负责就好了。

我现在的生活,就是以前的帝王也不曾拥有呢!现在的我,几乎完全就是为了自己而活着的。我喜欢自己的世界。似乎,真的有两耳不闻窗外事,一心只读圣贤书呢。

当你,在北京一天挣100元的时候,真的不容易,那样子,你的月薪大概3000元,但是,你的房租就会占你的一半的薪水。生活真的不容易,哎。

现在,想想自己,再想想自己找女朋友的哥们们。内心的,真的只有幸福了。他们找女朋友有的哥们们,似乎真的过得不怎么样呢。不是为了房子,就是家里面的各种事情,虽然,自己喜欢女朋友,但是家里面不喜欢呀。虽然,女朋友喜欢自己,但是,人家的爸妈未必就会喜欢你呀?是不?其实,这个世界真的不容易的。不仅仅如此,女孩子的年龄越来越大了,所以,家里面一直催着结婚,但是,向我们这些刚从大学里面毕业的孩子们?哪里有什么钱结婚呀?是不?



Friday, September 23, 2016

Ubuntu 16.04 iso 的镜像连接




今天。想玩玩 Ubuntu,所以想制作一个 U 盘安装Linux 系统,但是,在官网下载的都是 amd的iso.所以无法制作U盘驱动,下面的是你想要的东西,下载 i386.iso 后缀的镜像就可以使用了。好东西要分享给大家!


https://mirror.umd.edu/ubuntu-iso/16.04/

Saturday, September 10, 2016

fragment的懒加载实现

我们在做应用开发的时候,一个Activity里面可能会以viewpager(或其他容器)与多个Fragment来组合使用,而如果每个fragment都需要去加载数据,或从本地加载,或从网络加载,那么在这个activity刚创建的时候就变成需要初始化大量资源。这样的结果,我们当然不会满意。那么,能不能做到当切换到这个fragment的时候,它才去初始化呢?
答案就在Fragment里的setUserVisibleHint这个方法里。请看关于Fragment里这个方法的API文档(国内镜像地址:Fragment api):
  1. Set a hint to the system about whether this fragment's UI is currently visible to the user. This hint defaults to true and is persistent across fragment instance state save and restore.
  2. An app may set this to false to indicate that the fragment's UI is scrolled out of visibility or is otherwise not directly visible to the user. This may be used by the system to prioritize operations such as fragment lifecycle updates or loader ordering behavior.
  3. Parameters
  4. isVisibleToUser true if this fragment's UI is currently visible to the user (default), false if it is not.

该方法用于告诉系统,这个Fragment的UI是否是可见的。所以我们只需要继承Fragment并重写该方法,即可实现在fragment可见时才进行数据加载操作,即Fragment的懒加载。
代码如下:

  1. /*
  2.  * Date: 14-7-17
  3.  * Project: Access-Control-V2
  4.  */
  5. package cn.irains.access_control_v2.common;
  6. import android.support.v4.app.Fragment;
  7. /**
  8.  * Author: msdx (645079761@qq.com)
  9.  * Time: 14-7-17 下午5:46
  10.  */
  11. public abstract class LazyFragment extends Fragment {
  12.     protected boolean isVisible;
  13.     /**
  14.      * 在这里实现Fragment数据的缓加载.
  15.      * @param isVisibleToUser
  16.      */
  17.     @Override
  18.     public void setUserVisibleHint(boolean isVisibleToUser) {
  19.         super.setUserVisibleHint(isVisibleToUser);
  20.         if(getUserVisibleHint()) {
  21.             isVisible = true;
  22.             onVisible();
  23.         } else {
  24.             isVisible = false;
  25.             onInvisible();
  26.         }
  27.     }
  28.     protected void onVisible(){
  29.         lazyLoad();
  30.     }
  31.     protected abstract void lazyLoad();
  32.     protected void onInvisible(){}
  33. }
在LazyFragment,我增加了三个方法,一个是onVisiable,即fragment被设置为可见时调用,一个是onInvisible,即fragment被设置为不可见时调用。另外再写了一个lazyLoad的抽象方法,该方法在onVisible里面调用。你可能会想,为什么不在getUserVisibleHint里面就直接调用呢?
我这么写是为了代码的复用。因为在fragment中,我们还需要创建视图(onCreateView()方法),可能还需要在它不可见时就进行其他小量的初始化操作(比如初始化需要通过AIDL调用的远程服务)等。而setUserVisibleHint是在onCreateView之前调用的,那么在视图未初始化的时候,在lazyLoad当中就使用的话,就会有空指针的异常。而把lazyLoad抽离成一个方法,那么它的子类就可以这样做:
  1. public class OpenResultFragment extends LazyFragment{
  2.     // 标志位,标志已经初始化完成。
  3.     private boolean isPrepared;
  4.     @Override
  5.     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  6.         Log.d(LOG_TAG, "onCreateView");
  7.         View view = inflater.inflate(R.layout.fragment_open_result, container, false);
  8.         //XXX初始化view的各控件
  9.     isPrepared = true;
  10.         lazyLoad();
  11.         return view;
  12.     }
  13.     @Override
  14.     protected void lazyLoad() {
  15.         if(!isPrepared || !isVisible) {
  16.             return;
  17.         }
  18.         //填充各控件的数据
  19.     }
  20. }
在上面的类当中,我们增加了一个标志位isPrepared,用于标志是否初始化完成。然后在我们所需要的初始化操作完成之后调用,如上面的例子当中,在初始化view之后,设置 isPrepared为true,同时调用lazyLoad()方法。而在lazyLoad()当中,判断isPrepared和isVisible只要有一个不为true就不往下执行。也就是仅当初始化完成,并且可见的时候才继续加载,这样的避免了未初始化完成就使用而带来的问题。
在这里我对fragment的懒加载实现的介绍就到此为止,如果你有兴趣,可以基于此再深入探究,比如写一个带有缓初始化和可见时刷新的特性的Fragment。

我的未来之路 where is My future road ?

最近,内心是纠结的。因为,最近的事情比较的复杂。因为,世界上的每一个人都是不同的,我们每一个人都有自己的想法。一千个人就会有一千个哈姆雷特。年轻的时候,天真的以为自己知道一切了,觉的自己按照自己的想法已经理解了这句话的意思。纸上得来终觉浅,绝知此事要躬行。

古人的智慧,真的是无敌的。

说说我,现在在一家创业公司,本来一切都不错的。但是,前几天去了一趟,白洋淀。因为,我的原因,打牌的消息发错了群。那之后,孙昂就看我不顺眼。看我鼻子不是鼻子,眼睛不是眼睛的。我也是罪恶了。

正如那句话,这件事情在我看来并没有什么,但是,在孙总的眼睛里面,似乎并不是我想的那么简单。就因为这件事情,当天晚上吃饭的时候,他直接发火了,让我们滚到旁边的桌子上吃饭。当时的我的直觉,这件事情这么严重?你他妈的有病吧?然后,不管有没有错,我都在自己身上找原因。当时的心态已经炸掉了。真的是很不爽,但是你有不能说出来的!

为什么?原因很简单,我需要靠孙总养着,如果没有孙总的话,我下个月的就没有办法生存了,更不要提生活了?是的,孙总就是我的衣食父母。这个并没有错的。所以,这次大家出来玩的时候,就因为孙总一个人发火,所以,直接导致了大家没有心情玩了!大家出来玩就是为了开心的。如果,没有心情的话,那你他妈的还玩个奶子?第二天,大家都没有心情的随便看了看!

这件事情,都是因为我而起的,在别人看来并没有什么的!我上班的时候,明显感觉到,孙总的距离感。再也没有之前的那种感觉了,之前是可以跟孙总随便开玩笑的。但是,现在,我说话,他直接不屌我了。当时,我是很气愤的。我真的是想一走了之的,但是,我忍住了。我需要等到他发工资。要不然,他就是不给我公司,我一点也没有办法的。所以,就算要辞职也要等到中秋之后,发了工资之后再说。因为,我需要生活。


开始的时候,孙总说过,这家公司我说了算的,如果,我开心什么都可以的。但是,如果我不喜欢你了。对不起,你就应该离开了。

总的来说,我是很喜欢这家公司的氛围。因为,大家对我都很好。我从一个刚毕业的小子,到这家公司,已经一年多了。这一年,我跟大家一起度过了。我对大家已经有感情了。这么快就要说走,真的是内心舍不得。但是,我算是得罪了孙总了。总的来说,是因为,我太傻了。其实,很多的时候,啸天,恋哥,玲姐,娜姐,莹姐,大家都是很照顾我的。说真的,我的脾气也是醉的一逼、傻傻的分不清楚。有的时候,总是由着自己的性子在这里发泄。

是的,我已经长大了,很多的事情。不要说话不过脑子。做事情要三思而行。因为,现在做的事情,后果是要自己的承担的。从回来之后,孙总,从来没有找过我聊天。如果说,对我不满,批评一下,我是很开心的。因为,说你是为了你好的,还把你当做自己的人。但是,如果对你不管不问的,我觉的很不爽。而且,对于我的态度也是飞流直下三千尺。跟我聊天的时候,直接低头看手机。完全的无视我。这个,真的让我受不了的。我有什么办法,只能呵呵了。你做错了事情,你总要承担后果的。不能像川琪那样任性。很多的时候,都是跟自己的想法不同的,事与愿违这才是真理,因为,你长的丑,但是想的美呀。所以,事与愿违才是通常的事件。很多的时候,我们真的是只在乎自己的想法。但是,我们往往忽略了事情的后果,年轻的时候,做错了事情,后果往往是比较轻的,但是等你工作了以后,做错了事情。后果往往是比较严重的。还有一点,永远不要相信,CEO的大饼,只想相信,自己拿到的和看到的东西,其他的事情,都是在吹牛逼,在没有得到之前都是梦幻。之前,孙总说北京他说了算的。但是,实际上的并不是的。因为,他只是一个小老板。后面,他还有大老板。他说了并不算的。他有自己的权限和范围。并不是所有的事情,他都可以拍板。因为,后面的张总会给他压力的。因为,这家公司并不是他一个人的。

不过,白洋淀这件事情,让恋哥很受伤的。这个事情就是比较的不爽了。真的是,我的内心其实醉的。因为,恋哥夹在中间是很难做人的。很多的事情,我真的是不容易,我喜欢这个地方。但是,天下没有不算的宴席。是的,大家相聚在一起就是一场缘分。至于,自己的能力的问题就是自己的问题了。这样的事情,都是看自己的心了。其他的事情,我们需要做的事情有很多,其他的事情不说了。我是不是应该,请恋哥和啸天吃顿饭呀?这个是可以的,因为,我真的是受了他们照顾呢!真的是很感谢他们的。嘿嘿,很多的时候,我们都要去做,自己不喜欢做的事情。这个件事情,不是我们自己能决定的。我们只能适应这个世界和生活,就是这样的。很多的事情。不会像着自己希望的方向发展的。我不知道到,自己会不会发火,但是,很难说,毕竟我还是很年轻的。很多的时候,我不知道该做什么。其实,我什么也不是,我只不过是刚刚开始的。其他的,我并不在乎的,其实,很多的时候,我们只要有自己一口吃的就好了,其他的事情,我们并不在乎的,世界杯颠覆了又怎么样呢?只要,自己活着就好了。好死不如赖活着。这个世界上还这种人比较多的,事不关己高高挂起的人。多的牛毛。因为,很多的时候,每个人的理念是不一样的。

我不知道,孙总跟娜姐和恋哥,莹姐说了什么?但是,到我这里肯定不会那么简单的。因为,我能感觉到孙总的愤怒。嘿嘿,其实,最坏也不过就是把我辞了。但是,说真的是,我是很喜欢这家公司,我不想走的。但是,这个时候,如果没有办法的话,我会选择离开的。事情。很多的时候,都不是我们能够操控的。因为,孙总对我有恩,我只要不惹他生气。其他的事情,都听他的。很多的时候,我真的是没有脑子。说了很多不该说的话,有的时候,自己就是个傻逼。哎,但是,世界上并不会因为你悔恨就会改变什么。事情,发生了就发生了。其他的事情,你怎么想也是没有用的。因为,我们都在改变着。至于变成什么样子,可能只有到了那个年纪我们才会知道的。现在的我们都只不过是在路上而已。至于摸着石头过河的我,现在也只是刚刚起步。


一路走好


Friday, August 26, 2016

node.js - Gradle "... occurred starting process 'command 'npm''" on Mac

When  you use the react-native  build release APK;

if you meet this question:

node.js - Gradle "... occurred starting process 'command 'npm''" on Mac

you must use this command in the Root Project

react-native start      or   npm start

If the terminal always show:  the error infos:

you must in the android/dir  use this  command:
./gradlew --stop

无法查询北京公积金的余额?

注意:

公积金查询数据每周三、周五更新(16:00——21:00)

怎么说呢?

垃圾!

Thursday, August 25, 2016

Notification using setFullScreenIntent() for BigTextStyle opening Activity automatically


昨天,遇到一个很头疼的问题。收到服务器的推送之后,APP重新启动了。但是,测试里面还不报错。

找了半天,找到问题的根源是因为 Notifacation 的问题:

用了 serFullScreenIntent();

这个方法在Android6.0 以下没有任何的问题。 但是在Android 6.0 中的,小米的手机上面,至于其他的手机,我只测试了三星没有问题。至于其他的手机,没有测过。

所以这个地方昨个版本判断就好了:
if(Build.VERSION.SDK_INT < 23){
    //Android 6.0 一下的版本没什么问题。 可以正常弹窗    mBuilder.setFullScreenIntent(pendingIntent, true);}else{
    //Android 6.0 小米貌似做了深度的定制,然后会重新启动APP. 三星的没有问题, 其他的机型不详}


待优化:   这个地方,这样做有点暴力。应该是,那个版本有问题就解决那个,我现在是把Android6.0 一棒子全部打死了。你可以尝试自己写一个工具类: 判定用户的手机是不是小米的手机, 如果是小米的手机,就不设置serFullScreenIntent();

解决问题很简单,但是,时间基本上都花在了寻找问题上。定位问题上面了!


很多的时候,都是这个样子。解决起来很快,但是定位问题比较的麻烦!

Wednesday, August 24, 2016

android how to resolve compile release APK, Proguard error: "Warning:"


  今天在打正式包的时候,突然报错了。 让我有点懵逼了。然后, 打正式包的时候报错了。

解决方案:
就是在代码混淆的时候,去掉这些 waring:


例如 :
# android 6.0 SDK 23 start-dontwarn com.nhaarman.listviewanimations.** { *; }
-dontwarn com.solok.datetime.** { *; }
-dontwarn com.tencent.connect.avatar.** { *; }
-dontwarn com.viewpagerindicator.LinePageIndicator.** { *; }
-dontwarn uk.co.senab.photoview.** { *; }



# android 6.0 SDK 23 end


OK 你看一下你的报错的信息里面,需要注释的 warning 一一添加就可以了!

这里解析一下:
因为,我把编译的版本提高了23,所以,就会出现一些工具方法过时的问题。因为, Android 6.0 废弃了很多没有用的方法。所以,导致了我们在适配6.0 的时候,很多依赖的第三方可能还没有适配6.0 ,所以出现了这么多的warning!

其实,很多的第三方的一些类,我们根本没有用到。这里直接在混淆文件里面直接 使用 dontwarn  就可以了,但是,如果自己的写的依赖库, 可能用到了 过时的方法。这个时候,我们就要手动的去修改依赖库的代码了!


这样说吧:
--dontwarn  只是不报错,只是治标不治本
修改原生代码,  根治这个问题


error info:

Initializing...
Note: the configuration refers to the unknown class 'com.google.vending.licensing.ILicensingService'
Note: the configuration refers to the unknown class 'com.android.vending.licensing.ILicensingService'
Note: the configuration refers to the unknown class 'com.facebook.react.uimanager.UIProp'
Note: the configuration refers to the unknown class 'sun.misc.Unsafe'
Note: the configuration refers to the unknown class 'com.eallcn.rentagent.orm.SugarRecord'
      Maybe you meant the fully qualified name 'com.orm.SugarRecord'?
Note: the configuration refers to the unknown class 'com.eallcn.chow.entity.RepTrend'
      Maybe you meant the fully qualified name 'com.eallcn.rentagent.entity.common.RepTrend'?
Note: the configuration refers to the unknown class 'com.nhaarman.listviewanimations.itemmanipulation.dragdrop.DynamicListViewTestActivity'
Note: the configuration refers to the unknown class 'com.nhaarman.listviewanimations.itemmanipulation.swipedismiss.SwipeTouchListenerTestActivity'
Note: the configuration refers to the unknown class 'se.emilsjolander.stickylistheaders.StickyListHeadersListView'
      Maybe you meant the fully qualified name 'com.eallcn.rentagent.widget.sticky.StickyListHeadersListView'?
Warning: com.nhaarman.listviewanimations.appearance.StickyListHeadersAdapterDecorator: can't find superclass or interface se.emilsjolander.stickylistheaders.StickyListHeadersAdapter
Warning: com.nhaarman.listviewanimations.appearance.StickyListHeadersAdapterDecorator: can't find referenced class se.emilsjolander.stickylistheaders.StickyListHeadersAdapter
Warning: com.nhaarman.listviewanimations.appearance.StickyListHeadersAdapterDecorator: can't find referenced class se.emilsjolander.stickylistheaders.StickyListHeadersAdapter
Warning: com.nhaarman.listviewanimations.appearance.StickyListHeadersAdapterDecorator: can't find referenced class se.emilsjolander.stickylistheaders.StickyListHeadersAdapter
Warning: com.nhaarman.listviewanimations.appearance.StickyListHeadersAdapterDecorator: can't find referenced class se.emilsjolander.stickylistheaders.StickyListHeadersAdapter
Warning: com.nhaarman.listviewanimations.appearance.StickyListHeadersAdapterDecorator: can't find referenced class se.emilsjolander.stickylistheaders.StickyListHeadersListView
Warning: com.nhaarman.listviewanimations.appearance.StickyListHeadersAdapterDecorator: can't find referenced class se.emilsjolander.stickylistheaders.StickyListHeadersListView
Warning: com.nhaarman.listviewanimations.util.StickyListHeadersListViewWrapper: can't find referenced class se.emilsjolander.stickylistheaders.StickyListHeadersListView
Warning: com.nhaarman.listviewanimations.util.StickyListHeadersListViewWrapper: can't find referenced class se.emilsjolander.stickylistheaders.StickyListHeadersListView
Warning: com.nhaarman.listviewanimations.util.StickyListHeadersListViewWrapper: can't find referenced class se.emilsjolander.stickylistheaders.StickyListHeadersListView
Warning: com.nhaarman.listviewanimations.util.StickyListHeadersListViewWrapper: can't find referenced class se.emilsjolander.stickylistheaders.StickyListHeadersListView
Warning: com.nhaarman.listviewanimations.util.StickyListHeadersListViewWrapper: can't find referenced class se.emilsjolander.stickylistheaders.StickyListHeadersListView
Warning: com.nhaarman.listviewanimations.util.StickyListHeadersListViewWrapper: can't find referenced class se.emilsjolander.stickylistheaders.StickyListHeadersListView
Warning: com.nhaarman.listviewanimations.util.StickyListHeadersListViewWrapper: can't find referenced class se.emilsjolander.stickylistheaders.StickyListHeadersListView
Warning: com.nhaarman.listviewanimations.util.StickyListHeadersListViewWrapper: can't find referenced class se.emilsjolander.stickylistheaders.StickyListHeadersListView
Warning: com.nhaarman.listviewanimations.util.StickyListHeadersListViewWrapper: can't find referenced class se.emilsjolander.stickylistheaders.StickyListHeadersListView
Warning: com.nhaarman.listviewanimations.util.StickyListHeadersListViewWrapper: can't find referenced class se.emilsjolander.stickylistheaders.StickyListHeadersListView
Warning: com.nhaarman.listviewanimations.util.StickyListHeadersListViewWrapper: can't find referenced class se.emilsjolander.stickylistheaders.StickyListHeadersListView
Warning: com.nhaarman.listviewanimations.util.StickyListHeadersListViewWrapper: can't find referenced class se.emilsjolander.stickylistheaders.StickyListHeadersListView
Warning: com.nhaarman.listviewanimations.util.StickyListHeadersListViewWrapper: can't find referenced class se.emilsjolander.stickylistheaders.StickyListHeadersListView
Warning: com.nhaarman.listviewanimations.util.StickyListHeadersListViewWrapper: can't find referenced class se.emilsjolander.stickylistheaders.StickyListHeadersListView
Warning: com.solok.datetime.WheelImageView: can't find referenced method 'float ceil(float)' in library class android.util.FloatMath
Warning: com.solok.datetime.WheelView: can't find referenced method 'float ceil(float)' in library class android.util.FloatMath
Warning: com.tencent.connect.avatar.c: can't find referenced method 'float sqrt(float)' in library class android.util.FloatMath
Warning: com.viewpagerindicator.LinePageIndicator: can't find referenced method 'float ceil(float)' in library class android.util.FloatMath
Warning: uk.co.senab.photoview.PhotoViewAttacher: can't find referenced method 'float sqrt(float)' in library class android.util.FloatMath
Warning: uk.co.senab.photoview.gestures.CupcakeGestureDetector: can't find referenced method 'float sqrt(float)' in library class android.util.FloatMath
Note: android.support.v4.media.IMediaBrowserServiceCallbacksAdapterApi21: can't find dynamically referenced class android.service.media.IMediaBrowserServiceCallbacks
Note: android.support.v4.media.IMediaBrowserServiceCallbacksAdapterApi21: can't find dynamically referenced class android.content.pm.ParceledListSlice
Note: android.support.v4.media.IMediaBrowserServiceCallbacksAdapterApi21$Stub: can't find dynamically referenced class android.service.media.IMediaBrowserServiceCallbacks$Stub
Note: android.support.v4.media.ParceledListSliceAdapterApi21: can't find dynamically referenced class android.content.pm.ParceledListSlice
Note: android.support.v4.text.ICUCompatApi23: can't find dynamically referenced class libcore.icu.ICU
Note: android.support.v4.text.ICUCompatIcs: can't find dynamically referenced class libcore.icu.ICU
Note: android.support.v7.widget.DrawableUtils: can't find dynamically referenced class android.graphics.Insets
Note: com.alibaba.fastjson.parser.ParserConfig: can't find dynamically referenced class java.awt.Point
Note: com.alibaba.fastjson.parser.ParserConfig: can't find dynamically referenced class java.awt.Font
Note: com.alibaba.fastjson.parser.ParserConfig: can't find dynamically referenced class java.awt.Rectangle
Note: com.alibaba.fastjson.parser.ParserConfig: can't find dynamically referenced class java.awt.Color
Note: com.alibaba.fastjson.serializer.SerializeConfig: can't find dynamically referenced class java.awt.Color
Note: com.alibaba.fastjson.serializer.SerializeConfig: can't find dynamically referenced class java.awt.Font
Note: com.alibaba.fastjson.serializer.SerializeConfig: can't find dynamically referenced class java.awt.Point
Note: com.alibaba.fastjson.serializer.SerializeConfig: can't find dynamically referenced class java.awt.Rectangle
Note: com.baidu.location.b.d$a: can't find dynamically referenced class android.os.SystemProperties
Note: com.baidu.location.b.e: can't find dynamically referenced class android.os.storage.StorageVolume
Note: com.baidu.platform.comapi.util.e: can't find dynamically referenced class android.os.storage.StorageVolume
Note: com.facebook.common.webp.WebpSupportStatus: can't find dynamically referenced class com.facebook.webpsupport.WebpBitmapFactoryImpl
Note: com.facebook.imagepipeline.animated.factory.AnimatedFactoryProvider: can't find dynamically referenced class com.facebook.imagepipeline.animated.factory.AnimatedFactoryImplSupport
Note: com.facebook.imagepipeline.animated.factory.AnimatedFactoryProvider: can't find dynamically referenced class com.facebook.imagepipeline.animated.factory.AnimatedFactoryImpl
Note: com.facebook.imagepipeline.nativecode.WebpTranscoderFactory: can't find dynamically referenced class com.facebook.imagepipeline.nativecode.WebpTranscoderImpl
Note: com.google.common.util.concurrent.MoreExecutors: can't find dynamically referenced class com.google.appengine.api.ThreadManager
Note: com.google.common.util.concurrent.MoreExecutors: can't find dynamically referenced class com.google.apphosting.api.ApiProxy
Note: com.google.gson.internal.UnsafeAllocator: can't find dynamically referenced class sun.misc.Unsafe
Note: com.hyphenate.chat.EMPushHelper: can't find dynamically referenced class com.google.android.gms.common.GooglePlayServicesUtil
Note: com.hyphenate.chat.EMPushHelper: can't find dynamically referenced class com.xiaomi.mipush.sdk.MiPushClient
Note: com.parse.ParseHttpClient: can't find dynamically referenced class com.squareup.okhttp.OkHttpClient
Note: com.sina.weibo.sdk.utils.AidTask: can't find dynamically referenced class android.os.SystemProperties
Note: com.tencent.mm.sdk.platformtools.NetStatusUtil: can't find dynamically referenced class android.app.ActivityManagerNative
Note: com.tencent.mm.sdk.platformtools.NetStatusUtil: can't find dynamically referenced class android.net.NetworkPolicyManager
Note: de.devland.esperandro.Esperandro: can't find dynamically referenced class de.devland.esperandro.serialization.GsonSerializer
Note: okhttp3.internal.platform.AndroidPlatform: can't find dynamically referenced class com.android.org.conscrypt.SSLParametersImpl
Note: okhttp3.internal.platform.AndroidPlatform: can't find dynamically referenced class org.apache.harmony.xnet.provider.jsse.SSLParametersImpl
Note: okhttp3.internal.platform.Platform: can't find dynamically referenced class sun.security.ssl.SSLContextImpl
Note: org.jivesoftware.smack.XMPPConnection: can't find dynamically referenced class sun.security.pkcs11.SunPKCS11
Note: org.jivesoftware.smack.compression.JzlibInputOutputStream: can't find dynamically referenced class com.jcraft.jzlib.ZOutputStream
Note: org.jivesoftware.smack.compression.JzlibInputOutputStream: can't find dynamically referenced class com.jcraft.jzlib.ZInputStream
Note: there were 9 references to unknown classes.
      You should check your configuration for typos.
      (http://proguard.sourceforge.net/manual/troubleshooting.html#unknownclass)
Note: there were 38 unresolved dynamic references to classes or interfaces.
      You should check if you need to specify additional program jars.
      (http://proguard.sourceforge.net/manual/troubleshooting.html#dynamicalclass)
Warning: there were 21 unresolved references to classes or interfaces.
         You may need to add missing library jars or update their versions.
         If your code works fine without the missing classes, you can suppress
         the warnings with '-dontwarn' options.
         (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass)
Warning: there were 6 unresolved references to library class members.
         You probably need to update the library versions.
         Alternatively, you may have to specify the option
         '-dontskipnonpubliclibraryclassmembers'.
         (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedlibraryclassmember)
Warning: Exception while processing task java.io.IOException: Please correct the above warnings first.
:app:transformClassesAndResourcesWithProguardForMlwRelease FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:transformClassesAndResourcesWithProguardForMlwRelease'.
> java.io.IOException: Please correct the above warnings first.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED


Thursday, August 18, 2016

react native 的原理解析

最近,学习了React Native ,开始的时候,真的是一头雾水的感觉。丈二和尚摸不到头脑,今天总结一下,这几天学到的东西。

我觉的,react-native 

实现目的: 热更新

1  这里Node.js 作为服务,开启一个本地的Socket流, 监听本地的8081 端口。 当你使用 react-native start 或者  npm start.  他就像是一个依赖仓库一样,她不会主动的更新,当你不发起请求的时候,她是不会更新的。 尽管,你本地的 js 代码已经更新了。 
奥, 原理,Node.js  把你本地写的js 文件,当做组件(相当于Android 里面jcenter 的依赖库),当你用户出发更新到时候, node 会自动的更新组件库。


Android “Could not get BatchedBridge, make sure your bundle is packaged properly”

今天,刚把项目集成到 React-Native  里面,安装的时候没什么问题。但是,打开的时候,出现了问题,
如图:




如何解决:
参考:


针对Mac:
第一步: 
打开你的terminal
进入你的ReactNative 初始化的根目录里面。
然后, 运行下面这行命令



curl "http://localhost:8081/index.android.bundle?platform=android" -o "android/app/src/main/assets/index.android.bundle"

这行命令是把你本地的 jsBundle 下载到你的 android/app/src/main/assets/index.android.bundle

如果没有 assets目录的自己新建一个就可以了!

当你再次打包的时候,就把你的本地的Js打包进去了。这个时候,你就可以进行测试了!


本人测试没什么问题!



















Wednesday, August 17, 2016


Android React Native: com.android.ddmlib.InstallException: Failed to establish session at com.android.ddmlib.Device.installPackages(Device.java:894)

今天集成 React_Native 的时候,初始化了项目之后,使用使用react-native run-android 命令老是报错:
如下:



如标题, adb  无法连接你的真机。

其实,react-native run-android   并不实用。 因为,我们可能需要一套代码去实现多个APP. 这个时候,就好用了!

我在Github 上找到参考资料:
https://github.com/facebook/react-native/issues/2720






解决方案:  

不要使用它的命令。

1  开启 react-native server 使用这个命令
react-native start  or   npm start.

注意,这个要在你的 react-native 的根目录里面而不是 android目录下奥!

2   进入你的android  dir

先不要打包,这个时候,你要先把react-native server 的jsBundle 下载下来,才可以打包,要不然会出现下面的问题:




在你的根目录下面先执行:
curl "http://localhost:8081/index.android.bundle?platform=android" -o "android/app/src/main/assets/index.android.bundle"


使用 gradlew  命令打包。把你的包安装到 手机上之后。


3  这个时候,你打开APP.  找到你的app.  打开设置界面。 找到的APP 给APP一个权限。

APP设置界面:



点击权限管理:




显示悬浮穿给到权限: 就可以了!

进入的你写的Demo.

晃动你的手机,就会出现:



点击 Dev Setting 

点击最下面的Item 会出现:




配置你的电脑的IP地址,和端口

IP:PORT

注意,这里的port 端口是 react-native server 端口, 如果你没有修改的话,默认的是8081 端口!

这个时候就可以了,当你修改了 js 代码的时候,晃动一下手机,就会弹出:



当你 点击Reload 的时候,就会从react-native server 端把你修改的Js 代码,自动更新下来的。从而更新View.


FQ:

1  当你 react-native start or  nom start 
不成功的时候,有可能你的已经开启了服务。或者你的电脑的8081 端口已经被占用了!

查看端口是否被占用,方式自己搜搜
Mac:

lsof -n -i4TCP:8081 | grep LISTEN



这里如果现实 node,说明的你的服务已经开起来了。 不需要重复开启了。 如果是其他的 不是node,你需要干掉这个进程。在开启就没有问题了!