Android 权限统计

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 权限统计相关的知识,希望对你有一定的参考价值。

参考技术A <uses-permission
android:name="$applicationId.permission.JPUSH_MESSAGE"
android:protectionLevel="signature" /> 激光推送
<uses-permission android:name="android.permission.INTERNET" /> 网络
<uses-permission android:name="android.permission.CALL_PHONE" /> 打电话
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />存储
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />存储
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />这是在sd卡内创建和删除文件权限,添加该权限和
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />允许程序访问Wi-Fi网络状态信息
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />获取网络信息状态,如当前的网络连接是否有效
<uses-permission android:name="android.permission.READ_PHONE_STATE" />访问电话状态
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />允许一个程序访问CellID或WiFi热点来获取粗略的位置
<uses-permission android:name="android.permission.RESTART_PACKAGES" />允许程序重新启动其他程序
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />改变WiFi状态
<uses-permission android:name="android.permission.GET_TASKS" />允许一个程序获取信息有关当前或最近运行的任务,一个缩略的任务状态,是否活动等等
<uses-permission android:name="android.permission.RECORD_AUDIO" />允许程序录制音频
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />允许程序修改全局音频设置
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 允许程序开机自动运行
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />屏幕常亮
<uses-permission android:name="android.permission.WRITE_SETTINGS" />读写系统设置
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 允许一个程序打开窗口使用 TYPE_SYSTEM_ALERT,显示在其他所有程序的顶层
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />获取精确位置
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />访问定位额外命令
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />改变网络状态
<uses-permission android:name="android.permission.READ_LOGS" />读取系统日志
<uses-permission android:name="android.permission.SET_DEBUG_APP" />设置调试程序
<uses-permission android:name="android.permission.GET_ACCOUNTS" />访问账户Gmail列表
<uses-permission android:name="android.permission.USE_CREDENTIALS" />使用证书
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />管理账户
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS" />允许一个应用程序来管理文档的访问,通常是一个文档选择器部分
<uses-permission android:name="android.permission.REAL_GET_TASKS" />允许一个程序获取信息有关当前或最近运行的任务,一个缩略的任务状态,是否活动等等
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />允许程序禁用键盘锁
<uses-permission android:name="android.permission.CAMERA" />请求访问使用照相设备
<uses-permission android:name="android.permission.FLASHLIGHT" />使用闪光灯
照相设备并自动对焦拍照
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

利用神器Nginx + X-Accel,实现PHP大文件下载统计权限判断速度限制

效果图

 

本地域名 http://suibian.com
项目目录 /var/www/suibian.com/

下载地址 http://suibian.com/download.php?path=/apk/shop.apk
指向文件 /var/www/myfiles/apk/shop.apk (项目目录以外)
Nginx的X-Accel别名路径  /var/www/myfiles/

实现功能 下载次数统计、IP记录、IP过滤、下载文件

 

多种方案对比

PHP提供大文件下载控制、统计的办法有以下几个:

1)直连型
例如https://xxx.com/file/shop.apk 
缺点:任何人都可以下载,无法直接统计(除非PHP去读nginx的access日志,捡垃圾一样)和过滤
优点:无脑操作

2)苦力型
后端PHP统计、过滤以后,直接file_get_contents读取文件内容,设置header后疯狂输出
缺点:遇到大文件时就歇菜,半天传不完,还占着nginx服务器的连接池,后面堵车严重
优点:控制一流

3)智取型 (本文重点)
后端PHP判断与过滤,再发出指令给web服务器来传输静态文件
PHP + nginx(配合X-Accel-Redirect机制) 
缺点:需要nginx配置权限,另外PHP无法知道传完了没有,没有后续操作空间
优点:传输快,服务器IO低,PHP不会崩溃

主要步骤

  1. 启用nginx的x-accel
  2. 用户访问php脚本
  3. 各种过滤、统计
  4. php使用header("X-Accel-Redirect:  /file/$fileName");唤起nginx
  5. nginx接力提供文件传输

详细步骤

1. Nginx配置某个站点
在server 里面添加:

location /xyz
    internal;
    alias /var/www/myfiles;

其中别名xyz可以自定义,到时php脚本需要用一样的别名;
alias是这个别名指向的本地文件夹

2.重启nginx
3.创建php下载脚本 http://suibian.com/download.php

<?php


    // 机制配置(仅限当前站点)
    $nginx_x_accel_key = 'xyz';


    // 获取下载文件的相对路径
    if (!isset($_GET['path'])) 
        die('缺少参数path');
    

    $file_path = $_GET['path'];         // 相对路径,从nginx的internal的自定义别名xyz的路径开始
    $file_name = $file_path;            // 文件名

    if (stripos($file_path, '\\\\') !== false) 
        $parts = explode('\\\\', $file_path);
        $file_name = array_pop($parts);
    
    if (stripos($file_path, '/') !== false) 
        $parts = explode('/', $file_path);
        $file_name = array_pop($parts);
    
    


    // 下载统计
    $theData = array(
        'access_time'    => time(),                         // 时间戳
        'access_date'    => date("Y-m-d H:i:s", time()),    // 日期
        'access_url'    => $_SERVER['REQUEST_URI'],         // 当前访问网址
        'referer_url'    => $_SERVER['HTTP_REFERER'],       // HTTP来源地址(可伪造)
        'ip_address'    => $_SERVER['REMOTE_ADDR']          // 客户IP地址
    );

    //print_r($theData);die();
    // Array
    // (
    //     [access_time] => 1659420862
    //     [access_date] => 2022-08-02 06:16:50
    //     [access_url] => /download.php?path=/onedir/shop.apk
    //     [referer_url] => http://suibian.com/
    //     [ip_address] => 180.149.130.16
    // )


    // 各种过滤
    // ...  ip黑名单
    // ...  referer域名限制
    // ...  同IP一小时以内的下载次数 ...
    // ...  


    // 各种统计操作
    // ...
    // ...


    // 是否使用Nginx缓存,默认yes
    header("X-Accel-Buffering", "yes");

    // 下载限速 - 字节 -   1024 字节 = 1 千字节(KB)
    header("X-Accel-Limit-Rate", 1024*1024);

    // 逻辑处理完毕,允许下载 --- 记得header前不要有任何的输出!
    header('Content-type: application/octet-stream');
    header("Content-Disposition: attachment; filename=" . $file_name);
    header("X-Accel-Redirect: " . "/$nginx_x_accel_key/" . $file_path);

4.ok!访问一下即可下载,可以修改php脚本进行下载统计、各种过滤,限速等限制

 


X-accel官网介绍

https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/

P.s.

PHP的统计访问自己补充吧


相关:

PHP如何实现静态文件下载的权限控制
php控制文件下载速度的方法
php – 控制对可供下载的文件的访问
PHP 利用nginx的X-sendfile控制下载,提高下载效率

推荐

无广告的绿色版百度首页,手机效果棒棒滴~ 

baidu.rudon.cn

 

 


 

以上是关于Android 权限统计的主要内容,如果未能解决你的问题,请参考以下文章

Android开发 UsageStatsManager应用使用情况管理

Android中ActivityLifecycleCallbacks使用

android 怎么接入腾讯云直播

Android中常见的权限

Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )

Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )