• «
  • 1
  • 2
  • »
  • Pages: 1/2     Go
主题 : 在ROM中集成FTP支持 复制链接 | 浏览器收藏 | 打印
级别: 骑士
UID: 29604
精华: 9
发帖: 171
金钱: 1830 两
威望: 366 点
贡献值: 9 点
综合积分: 522 分
注册时间: 2010-10-01
最后登录: 2016-04-13
楼主  发表于: 2012-07-11 10:51

 在ROM中集成FTP支持

管理提醒: 本帖被 xoom 执行加亮操作(2012-10-02)
效果图:






制作步骤
1.    在init.rc中增加如下内容
这步的作用是在根目录创建ftproot文件夹,并把U盘和sd卡的目录链接到这里,因为mnt文件夹里有些不相关的文件夹,此步要配合ftp配置文件才有用
mkdir /ftproot 0775 root system
symlink /mnt/sdcard /ftproot/sdcard
symlink /udisk /ftproot/udisk
2. 把提供的AutoFtp.apk放到/system/app
3. 然后重新制作镜像,重新烧写,启动后就可以在通知栏里看到图标。

如何使用
确保PC机能ping到开发板,开发板最好设置成固定IP,如192.168.1.79。
最好使用FlashXP这类专业的ftp上传下载工具,ftp默认端口2221
AutoFtp.apk提供了2个用户,如果你想从源码编译生成,在之后的文章里会提到如何配置用户信息
1. 匿名用户,可以读取ftproot文件夹,无法写入和删除
2. 用户名admin,密码admin,可以读写或删除ftproot文件夹内容。
如下图所示


或者也可以使用Windows资源管理器(Win7)或IE浏览器(WinXP)
在地址栏输入ftp://admin:admin@192.168.1.79:2221/


主要代码解析
采用的是apache ftp,使用起来简单方便。
1. 首先要先引用apache ftp的jar,共6个文件
2. 然后extends一个Service,比如叫做FtpService
3. 在FtpService的onStart里填入,这些都是固定套路。
FtpServerFactory serverFactory = new FtpServerFactory();
ListenerFactory factory = new ListenerFactory();
// set the port of the listener
int port = 2221;
factory.setPort(port);
// replace the default listener
serverFactory.addListener("default",factory.createListener());
PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory();
// users.properties文件放在src文件夹里就可以被找到,此文件就是配置文件
userManagerFactory.setFile(new File("users.properties"));
serverFactory.setUserManager(userManagerFactory.createUserManager());
// start the server
FtpServer server = serverFactory.createServer();
this.mFtpServer = server;
try {
    server.start();
} catch (FtpException e) {
    e.printStackTrace();
}
4. 配置文件修改
把users.properties放在src目录里,然后看看文件的内容吧
这是管理员账号,第1行密码,是admin这串字符通过MD5算出来的结果
ftpserver.user.admin.userpassword=21232F297A57A5A743894A0E4A801FC3
第2行是ftp根目录位置(改init.rc创建ftproot文件夹的目的就在这里),下面的就不解释了,看文字都能理解其含义
ftpserver.user.admin.homedirectory=/ftproot
ftpserver.user.admin.enableflag=true
ftpserver.user.admin.writepermission=true
ftpserver.user.admin.maxloginnumber=0
ftpserver.user.admin.maxloginperip=0
ftpserver.user.admin.idletime=0
ftpserver.user.admin.uploadrate=0
ftpserver.user.admin.downloadrate=0

关于密码的MD5值计算,可以用HashCalc来计算


匿名用户的配置类似,只是没有密码

5. 然后在FtpService的onCreate里填入,这步是要在任务栏里生成通知,并把服务设置为前台服务
Notification notification = new Notification(R.drawable.ftpicon,"Ftp服务正在启动",System.currentTimeMillis());
        PendingIntent p_intent = PendingIntent.getActivity(this, 0,new Intent(this, AutoFtp.class), 0);
        notification.setLatestEventInfo(this, "Ftp服务" ,"Ftp服务正在运行!",p_intent);
        startForeground(0x1982, notification);
为什么要设置成前台运行呢?
因为后台服务进程优先级太低,在实际使用时,ftp上传下载速度非常低,只有几kb/s。


6. 这里有一篇文章提到android2.2的一个bug
解决android网络异常java.net.SocketException: Bad address family
http://orgcent.com/android-bad-address-family-exception/?utm_source=rss
虽然android2.3可能不会有问题,但不管怎么样,还是加上去了……

7. 然后extends一个BroadcastReceiver用来在开机的时候启动服务,就叫AutoFtp吧
就在onReceive填入如下内容,这些也是固定套路了。
if (intent.getAction().equals(ACTION)) {  
            Intent myintent = new Intent(context, FtpService.class);  
            context.startService(myintent);
        }
8. 最后修改一下AndroidManifest.xml
添加各种权限,有些不是必须的,但加了也没事。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
    </uses-permission>
    <uses-permission android:name="android.permission.INTERNET" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >
    </uses-permission>
    <uses-permission android:name="android.permission.READ_PHONE_STATE" >
    </uses-permission>
    <uses-permission android:name="android.permission.WAKE_LOCK" >
    </uses-permission>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
    </uses-permission>
增加开机接收通知
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
在application段中添加 android:persistent="true" 防止服务在空闲时资源被系统回收

10.执行如下命令,可以查看进程优先级
adb shell dumpsys activity
普通后台服务(当程序放在/data/app,且默认为后台服务),优先级太低ftp速度慢
Proc # 7: adj=svc  /B 4086ca68 1175:com.bjw.autoftp/10031 (started-services)
前台服务(当程序放在/data/app,且设置为前台运行服务),速度快,但有可能会被系统回收
Proc # 8: adj=prcp /F 407f4540 1335:com.bjw.autoftp/10031 (foreground-service)
最终,当程序放在/system/app,且设置为前台运行
PERS #11: adj=core /F 407fba60 1082:com.bjw.autoftp/10013 (fixed)
这样才能保证程序的高优先级,且空闲时资源不会被系统回收

AutoFtp.apk
AutoFtpapk.rar (526 K) 下载次数:62
大附件上传不了,源代码就放在网盘里了
http://115.com/file/c2ieu212#20120711AutoFtp.rar
115不给力了,增加几个网盘
http://yunpan.cn/lk/67c1drdive[/url]
http://kanboxshare.com/link/1BMfqQaJRBvKzkSEr9XD9iOFWIM6rYumi5nfqQsBr5xJEgukS
http://pan.baidu.com/netdisk/singlepublic?fid=929760_1196360742
http://www.kuaipan.cn/file/id_51739035768455169.htm
[ 此帖被benjaminwan在2012-08-08 14:37重新编辑 ]
自由,自强,共享,共创。
级别: 论坛版主
UID: 12573
精华: 27
发帖: 8881
金钱: 46490 两
威望: 9298 点
贡献值: 27 点
综合积分: 18302 分
注册时间: 2010-01-09
最后登录: 2016-03-18
1楼  发表于: 2012-07-11 11:00
不错,多谢分享!
新手如何向我们反馈有效的信息,以便解决问题,见此贴:
http://www.arm9home.net/read.php?tid-14431.html

[注]: 此处签名链接仅为指引方向,而非解答问题本身.
级别: 风云使者
UID: 36096
精华: 3
发帖: 2536
金钱: 14075 两
威望: 2815 点
贡献值: 3 点
综合积分: 5132 分
注册时间: 2011-01-11
最后登录: 2015-11-15
2楼  发表于: 2012-07-11 15:56
厉害啊
极度缺钱,求捐赠……支付宝兼邮箱:huming2207@qq.com
级别: 新手上路
UID: 74965
精华: 0
发帖: 29
金钱: 145 两
威望: 29 点
贡献值: 0 点
综合积分: 58 分
注册时间: 2012-07-31
最后登录: 2015-03-06
3楼  发表于: 2012-08-02 03:48

 回 楼主(benjaminwan) 的帖子

你好,无法下载115的源代码哦……

未绑定手机禁止分享给大众功能,请联系资源发布者获取资源
级别: 侠客
UID: 78244
精华: 0
发帖: 79
金钱: 395 两
威望: 79 点
贡献值: 0 点
综合积分: 158 分
注册时间: 2012-09-17
最后登录: 2013-09-10
4楼  发表于: 2012-10-02 11:25
很不错哦
级别: 新手上路
UID: 70226
精华: 0
发帖: 35
金钱: 175 两
威望: 35 点
贡献值: 0 点
综合积分: 70 分
注册时间: 2012-05-17
最后登录: 2013-01-22
5楼  发表于: 2012-11-04 19:57
级别: 侠客
UID: 82248
精华: 0
发帖: 52
金钱: 265 两
威望: 53 点
贡献值: 0 点
综合积分: 104 分
注册时间: 2012-11-20
最后登录: 2014-10-07
6楼  发表于: 2012-11-20 13:19
thanks
级别: 侠客
UID: 82248
精华: 0
发帖: 52
金钱: 265 两
威望: 53 点
贡献值: 0 点
综合积分: 104 分
注册时间: 2012-11-20
最后登录: 2014-10-07
7楼  发表于: 2013-01-17 12:13
thank for sharing
级别: 风云使者
UID: 39598
精华: 0
发帖: 2713
金钱: 84685 两
威望: 16937 点
贡献值: 0 点
综合积分: 5426 分
注册时间: 2011-03-10
最后登录: 2017-07-08
8楼  发表于: 2017-07-06 21:57
21世纪,什么最重要——我!
级别: 风云使者
UID: 133551
精华: 0
发帖: 2689
金钱: 13445 两
威望: 2689 点
贡献值: 0 点
综合积分: 5378 分
注册时间: 2017-07-06
最后登录: 2017-07-08
9楼  发表于: 2017-07-07 01:58
任何业绩的质变都来自于量变的积累。误先
  • «
  • 1
  • 2
  • »
  • Pages: 1/2     Go