在Android APP中运行Native程序

这里指的的Native程序,就是Linux上用C标准库写下来的各种程序

需要在Android上打包运行lighttpd+php-cgi,这就涉及到使用交叉编译出这些程序并运行。

关于交叉编译,主要注意的要点就是使用哪个编译器,一般都是使用arm-none-linux-gnueabi-gcc

Android上没有使用libc,而是使用自家的Bionic,这也就意味着没法调用动态标准库函数,所以交叉编译需要使用静态编译的选项进行编译,不要挂上任何的外部库,才能保证C/C++程序可以独立在Android下运行,并且不会触发Android的PIE机制。 Continue reading “在Android APP中运行Native程序”

修改Android AP的SSID和SharedKey

WifiManager中含有可以修改AP模式下SSID和SharedKey的方法,在源码中可以看到这部分方法被@hide了,也就是被隐藏了,不过只要利用反射即可调用这些方法。

咱在设置SSID和SharedKey时,发现几个需要注意的点:

  1. 写入系统设置的权限,可以通过Intent的方式提示用户给予权限
  2. <uses -permission android:name="android.permission.ACCESS_WIFI_STATE"></uses>
    <uses -permission android:name="android.permission.CHANGE_WIFI_STATE"></uses>
    <uses -permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses>
    <uses -permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses>
    <uses -permission android:name="android.permission.WRITE_SETTINGS"></uses>
  3. 设置AP模式的参数,会同时自动打开AP(无法在关闭AP的情况下,写入设置,这一点,可以从下面的代码看到,当setWifiApEnable的第三个参数为false时,随便填个null,因为设置是不会更新的,所以为了设置AP的各种参数,必须先关闭AP,然后填充WifiConfiguration结构,最后把setWifiApEnable设置为true,设置完成并打开AP。),并且需要提前关闭WIFI,两者不能共存
  4. 有些手机只支持WPA2_PSK加密方式,看了下源码,貌似这种加密方式在WifiConfiguration结构里面并没有看到,然后看到有些人的说法是被隐藏了,具体情况,咱不太清楚,反正源码确实没有看到对应的字段,所以自己一直卡在这里,没法更新AP的密码,后面看到网上有的设置为4,之后便可以使用WPA2_PSK加密方式了。。。。

下面是部分代码片段 Continue reading “修改Android AP的SSID和SharedKey”

获取Android Phone的各种IP

因为要知道AP模式下的Android Phone的IP啊,好让其他连接上的手机可以直接访问这手机上的服务,不过好像AP模式下默认都是192.168.43.1这个IP

所以要想办法拿到各种IP,比如说外网IP(这个是移动网络动态分配的,在这个项目里,完全没看到什么卯月)、还有内网IP(供其它局域网内的手机访问其服务)。

官方提供的接口,好像都是获取自身在GPRS/3G/4G/WIFI下的IP,好像也可以获取AP模式下的IP?

咱这里通过使用shell里的程序来获取我们需要的信息,比如说ifconfig(权限不够,用系统级程序的UID+签名可以破,发布不出去,需要root的话,就没什么卯月了,不过ifconfig里面可以提供的信息真是好丰富啊,还能用它配置网络。)、ip addr(这个没什么权限要求,就是你了!基于AOSP的原生系统来做,不知道会不会有厂商改动这一块的东西,啧啧)这里只提取了局域网IP、局域网广播IP、和移动网络的IP,其他的信息需求,可以自己调用ip addr看下。 Continue reading “获取Android Phone的各种IP”

Android FileObserver里的一些坑

最近在做的东西,也就是在android上搭建一个PHP服务器,然后通过Browser端对手机进行一些简单(复杂)控制。

这个数据/控制流程就是Browser< =>Android Http Server< =>Android App

初步的构想就是使用网上的开源服务器方案,由lighttpd+php+sqlite来搭建一个完整的服务器环境。

因为打算先写个Demo进行尝试,所以没有将服务器直接编译并嵌到Android系统之中,而是直接安装了一个名为KSWEB的App,进行搭建(无需root权限。。

WEB前端跟后端,就是正常的HTML、JS、JQuery、CSS、PHP什么的,跟正常的WEB开发没什么区别。

由于,需求是把Android手机变成一台无线路由器+服务器(硬件设计跟咱没有半毛钱关系),所以一开始WEB端就是把这东西,当作路由器WEB控制面板来设计就对了。 Continue reading “Android FileObserver里的一些坑”