some tips

启动界面部分和AccoutnActivity相关,是一个fragmentactivity



主activity是BrowserActivity,但是在显示它之前会跳到AccountActivity中,进行一系列与登录有关的活动,登录成功后会跳回BrowserActivity中


登录时选择服务器的代码在com.seafile.seadroid2.AccountActivity 230行
根据选择的类型设置intent来启动activity


AccountDetailActivity是与登录有关的activity,主要注意login(View view)方法


登录成功后调用AccountDetailActivity的startFileActivity(Account account)方法,将用户名密码以及服务器存入sharedpreference中,数据持久化


libraries starred activity 三个fragment包含在tab_fragment里面,当时找了好久都没找到这三个fragment是怎么渲染出来的。。。


多用户的信息是保存在sqlite中的,上次登录信息是存在sharedpreference里的,以实现下次自动登录。


在account中加入token的步骤是在seafConnection类中的realLogin()方法内,159行的account.token = obj.getString("token");


make的过程是把各种语言写的源码文件,变成可执行文件和各种库文件。make install是把这些编译出来的可执行文件和库文件复制到合适的地方。


ls|more  如果列表太长,一页显示不了,就可能会丢失部分信息,但是用管道+more来显示就可以了


bash 下的各种软件都不需要处理通配符的问题,减少了不必要的重复开发


============================================================================================




在交叉编译之前要指定PKG_CONFIG_PATH,这样编译器才能正确找到lib位置
export PKG_CONFIG_PATH=/home/kylin/crosscompile/mingw32/lib/pkgconfig:/home/kylin/crosscompile/mingw32/i686-w64-mingw32/lib/pkgconfig
(后来去掉了地一个路径,把自己编译安装在第一个路径的库的.pc文件都转移到了第二个路径,不然寻找好像有点问题)
export PKG_CONFIG_PATH极其重要,不然会提示各种错误。。还有export PKG_CONFIG_EXECUTABLE也很重要。
--------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------
checking for event_init in -levent... no
configure: error: *** Unable to find libevent library

是用mxe安装的libevent,但是和以前自己编译的libevent相比,缺少了libevent.dll.a,就提示该错误了。当我把以前编译的libevent.dll.a放入lib中时,就能找到了。


一会找不到Rpc.h 一会又找不到rpc.h,原本include下是rpc.h,然后我又复制了一份改名为Rpc.h就ok了,应该没有问题吧
librpcrt4.a进行了同样的处理,复制了一份了为libRpcrt4.a,好像是因为在win下都是大写,而mingw里是小写,可能识别不了。


 cmake -DCMAKE_TOOLCHAIN_FILE=~/Toolchain-cross-mingw32-pc-linux.cmake -DCMAKE_INSTALL_TYPE=Release(开始是自己手写的.cmake文件,后来在官方文档中发现mxe自带了.cmake文件,可以直接用,而且比自己写的好用,没什么错误,果然要多看官方文档)


修改了/usr/share/cmake-2.8/Modules/CMakeRCInformation.cmake,解决了一个小bug(已发布到csdn博客)


修改了seafile-client-2.2.0/src下的ccnet-init.cpp文件,44行return g_mkdir(dir, 0700);改为return g_mkdir(dir);(后来又改回去了,当然不能随便改源码,报错的原因好像是pkgconfig path以及相关的环境变量没设置好,导致找到了错误的库,于是方法的定义当然不一样)




/home/kylin/crosscp1/mxe/usr/bin/i686-pc-mingw32.static-ld: cannot find -lgobject-2.0
/home/kylin/crosscp1/mxe/usr/bin/i686-pc-mingw32.static-ld: cannot find -lglib-2.0
解决方案:mxe下直接make glib



找不到libevent,好像是因为需要shared library,而mxe默认是make static的lib,所以需要加上make MXE_TARGETS=i686-pc-mingw32.shared libevent ,
mxe会再make一个i686-pc-mingw32.shared目录,于是usr下就有了一个static和一个shared的mingw32.生成的shared libevent在shared目录下的lib里面,是libevent.dll.a。


本次交叉编译的过程中比较难的是qt的交叉编译,非常的麻烦,反正我没搞定,还好找到了mxe这个交叉编译的环境平台,一个make qt就生成了mingw可以用的qt,简直方便。


PKG_CONFIG_EXECUTABLE环境变量也非常重要,不能用系统的pkg-config,要用i686mingw32.static自带的pkgconfig,并且要注释掉CMakeList.txt的130行(会调用系统的pkgconfig),不然会有很多库找不到。


就算用mingw32的pkgconfig也会有好几个库找不到,会提示:
/home/kylin/crosscp1/mxe/usr/lib/libccnet.a(libccnet_la-libccnet_utils.o): In function `ccnet_util_gen_uuid':
/home/kylin/crosscp1/mxe/usr/src/ccnet-2.2.0/lib/libccnet_utils.c:345: undefined reference to `UuidCreate@4'
/home/kylin/crosscp1/mxe/usr/src/ccnet-2.2.0/lib/libccnet_utils.c:346: undefined reference to `UuidToStringA@8'
/home/kylin/crosscp1/mxe/usr/src/ccnet-2.2.0/lib/libccnet_utils.c:348: undefined reference to `RpcStringFreeA@4'

这个是和librpcrt4.a以及libuuid有关,有问题还有liblzma和liblcms库,这几个库在lib里都有,而且mingw的pkgconfig也能找到这几个库,.pc文件配置也是正确,但是link的过程中总是提示undefined reference to ...,这个问题困扰了好久,后来发现工程的CMakeFiles/seafile-applet/里有还有个link.txt文件,里面可以修改link的各种参数,里面还真没找到那几个缺少的库链接,但是pc文件配置是对的,还不清楚是什么原因。我直接修改了link.txt文件,加了一些参数,下面是修改过的文件:


/usr/bin/cmake -E remove -f CMakeFiles/seafile-applet.dir/objects.a
/home/kylin/crosscp1/mxe/usr/bin/i686-pc-mingw32.static-ar cr CMakeFiles/seafile-applet.dir/objects.a @CMakeFiles/seafile-applet.dir/objects1.rsp
/home/kylin/crosscp1/mxe/usr/bin/i686-pc-mingw32.static-g++  -O3 -DNDEBUG    -mwindows -Wl,--whole-archive CMakeFiles/seafile-applet.dir/objects.a -Wl,--no-whole-archive  -o seafile-applet.exe -Wl,--out-implib,libseafile-applet.dll.a -Wl,--major-image-version,0,--minor-image-version,0  -L/home/kylin/crosscp1/mxe/usr/i686-pc-mingw32.static/qt/lib  -L/home/kylin/crosscp1/mxe/usr/lib  /home/kylin/crosscp1/mxe/usr/i686-pc-mingw32.static/qt/lib/libQtGui.a -Wl,-Bstatic -lpng -ljpeg -ltiff -llzma -lmng -llcms2 -Wl,-Bdynamic -limm32 -lwinmm /home/kylin/crosscp1/mxe/usr/i686-pc-mingw32.static/qt/lib/libQtNetwork.a /home/kylin/crosscp1/mxe/usr/i686-pc-mingw32.static/qt/lib/libQtCore.a -Wl,-Bstatic -lz -Wl,-Bdynamic -lws2_32 /home/kylin/crosscp1/mxe/usr/i686-pc-mingw32.static/qt/lib/libQtNetwork.a -lssl -lcrypto -lws2_32 -lgdi32 -lcrypt32 -lz -lsqlite3 -ljansson -lsearpc -lgio-2.0 -ldnsapi -liphlpapi -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -ljansson -lz -lffi -lws2_32 -lole32 -lwinmm -lshlwapi -lpcre -lintl -liconv -lccnet -luuid -lrpcrt4 -lsearpc -lgio-2.0 -ldnsapi -liphlpapi -ljansson -lpthread -levent -lgobject-2.0 -lglib-2.0 -lffi -lws2_32 -lole32 -lwinmm -lshlwapi -lpcre -lintl -liconv -lseafile -lsearpc -lgio-2.0 -ldnsapi -liphlpapi -ljansson -lgobject-2.0 -lglib-2.0 -lffi -lws2_32 -lole32 -lwinmm -lshlwapi -lpcre -lintl -liconv -lpsapi -lws2_32 -lshlwapi -lwinmm /home/kylin/crosscp1/mxe/usr/i686-pc-mingw32.static/qt/lib/libQtNetwork.a /home/kylin/crosscp1/mxe/usr/i686-pc-mingw32.static/qt/lib/libQtCore.a -Wl,-Bstatic -lz -Wl,-Bdynamic -lssl -lcrypto -lgdi32 -lcrypt32 -lz -lsqlite3 -ljansson -lsearpc -lgio-2.0 -ldnsapi -liphlpapi -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lffi -lole32 -lpcre -lintl -liconv -lccnet -luuid -lrpcrt4 -lpthread -levent -lseafile -lpsapi -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 

(红色标记的是我添加的参数)


缺什么就加什么,终于编译成功了!


这次编译的难度主要来自于qt和cmake的相关问题,cmake的各种设置以及参数是非常复杂的。它貌似只是生成平台相关的makefile,但是为什么其他的文件(如cmakefile目录下的一些配置文件)在编译中还会有影响,而且link的过程在makefile里根本没找到,cmake和make之间到底是什么关系还需要进一步学习。


附编译其他依赖库的shell脚本

#!/bin/bash -ue

# Dependencies (list might be incomplete):
# src/libevent-2.0.21-stable.tar.gz
# src/libsearpc (I used git f022c6509cff2eb604024c003eb60bcda975c0b1)
# src/ccnet (with Nicolas' patches, I used 3495a78466add16cfa9eddfb35a312bb9ce55264)
# src/seafile (with Nicolas' patches, I used 59eb918655dfa5f1328ec72be00681c6192f523d)
#
# Toolchain:
# vala (vala-0.18.1-1.fc18.x86_64)
# mingw32-gcc (mingw32-gcc-4.7.2-7.fc18.x86_64)
# mingw32-pkg-config (mingw32-pkg-config-0.27-1.fc18.x86_64)
# mingw32-glib2 (mingw32-glib2-2.34.3-2.fc18.noarch)
# mingw32-pthreads (mingw32-pthreads-2.8.0-22.20110511cvs.fc18.noarch)
# mingw32-sqlite (mingw32-sqlite-3.7.13-1.fc18.noarch)
# mingw32-openssl (mingw32-openssl-1.0.1e-1.fc18.noarch)

HOST=i686-pc-mingw32
BUILD=x86_64-redhat-linux-gnu
TARGET=i686-pc-mingw32

PREFIX=`pwd`

export PATH=$PREFIX/bin:$PATH
export CC=i686-pc-mingw32.static-gcc
export CXX=i686-pc-mingw32.static-g++
#export PKG_CONFIG=i686-pc-mingw32.static-pkg-config
# Not sure adding /usr/... is required. It shouldn't be.
# Same for CPPFLAGS and LDFLAGS. But none of this should do any harm.
export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig:$PREFIX/i686-pc-mingw32.static/lib/pkgconfig
export CPPFLAGS="-I$PREFIX/include -I$PREFIX/i686-pc-mingw32.static/include"
export LDFLAGS="-L$PREFIX/lib -L$PREFIX/i686-pc-mingw32.static/lib"


#-------------------------------------------------------------------------------
echo "Checking for jansson..."
if ! test -f $PREFIX/include/jansson.h; then
        echo "Building jansson"
       	pushd src/jansson-2.3.1
        ./configure --prefix=$PREFIX --host=$HOST
        make
        make install
        popd
fi
#------------------------------------------------------------------------------
echo "Checking for libsearpc..."
if ! test -f $PREFIX/bin/searpc-codegen.py; then
        echo "Building libsearpc"
        pushd src/libsearpc
        bash autogen.sh
        ./configure --host=$HOST --prefix=$PREFIX
        make
        make install
        popd
fi
#------------------------------------------------------------------------------
echo "Checking for ccnet..."
if ! test -d $PREFIX/include/ccnet; then
       	echo "Building ccnet"
       	pushd src/ccnet-2.2.0
        bash autogen.sh
       	./configure --host=$HOST  --prefix=$PREFIX 
        make
        make install
        popd
fi
#------------------------------------------------------------------------------
echo "Checking for seafile..."
if ! test -f $PREFIX/bin/seafile-applet.en.exe; then
        echo "Building seafile"
        pushd src/seafile-2.2.0
        bash autogen.sh
        ./configure --host=$HOST --prefix=$PREFIX --disable-python
        export CC=$TARGET-gcc
        export RC=$TARGET-windres
        make
	make install
	popd
fi


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值