├── tiku.db ├── res └── logo.png ├── jsoup-1.13.1.jar ├── main.js ├── README.md ├── project.json ├── sql.txt ├── tikuCommon.js ├── updateTikuNet.js ├── !floating.js ├── !NO_UI.js ├── LICENSE ├── UI.js ├── !zsyTzAnswer.js └── !xxqg_v3.1.3(fixall).js /tiku.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wanghuisenior/auto_xxqg/HEAD/tiku.db -------------------------------------------------------------------------------- /res/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wanghuisenior/auto_xxqg/HEAD/res/logo.png -------------------------------------------------------------------------------- /jsoup-1.13.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wanghuisenior/auto_xxqg/HEAD/jsoup-1.13.1.jar -------------------------------------------------------------------------------- /main.js: -------------------------------------------------------------------------------- 1 | //engines.execScriptFile("!NO_UI.js"); 2 | //engines.execScriptFile("!floating.js");//可选择浮动菜单启动 3 | engines.execScriptFile("UI.js"); -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # auto_xxqg 2 | ### 2020.01.04 优化 3 | ### 2020.12.30 发现各路大神改的代码都不太好用,我也改了一版,优化了非常多东西,整合了网络题库,同时题库存放在sdcard内无需每次安装都重置了,添加了服务器上传开关及刷题开关(上传到我自己的服务器上,刷题刷到自己tiku),支持多账户一键答题。文章阅读每个账号不干扰。但autojs是平时看的,不太会,所以订阅部分或者其他bug不太好改。正考虑是不是放源码出来 4 | # auto_xxqg 5 | ### Android9 MIUI11.0.3稳定版测试完美42分,app版本v2.14.1,version20200620 6 | ### 7 | ### 发现大神改的更nb一点,直接用人家的了,此版本可能不再更新了 8 | ### 传送门 https://github.com/lolisaikou/LazyStudy 很好用!! 9 | -------------------------------------------------------------------------------- /project.json: -------------------------------------------------------------------------------- 1 | { 2 | "assets": [], 3 | "build": { 4 | "build_id": "99F82FE1-141", 5 | "build_number": 141, 6 | "build_time": 1608281774894 7 | }, 8 | "useFeatures": [], 9 | "icon": "res/logo.png", 10 | "launchConfig": { 11 | "hideLogs": false 12 | }, 13 | "main": "main.js", 14 | "name": "强国助手", 15 | "packageName": "com.auto_xxqg", 16 | "scripts": {}, 17 | "versionCode": 20201218, 18 | "versionName": "2.19.0" 19 | } -------------------------------------------------------------------------------- /sql.txt: -------------------------------------------------------------------------------- 1 | 1、查询问题相同的数据 2 | SELECT 3 | question,answer 4 | FROM 5 | tiku 6 | GROUP BY 7 | question 8 | 9 | HAVING 10 | count( question ) > 1 11 | 12 | 13 | 2、删除表中问题和答案相同的记录,只保留rowid最小的一条 14 | DELETE 15 | FROM 16 | tiku 17 | WHERE 18 | ( tiku.question, tiku.answer ) IN ( SELECT question, answer FROM tiku GROUP BY question, answer HAVING count( * ) > 1 ) 19 | AND rowid NOT IN ( 20 | SELECT 21 | min( rowid ) 22 | FROM 23 | tiku 24 | GROUP BY 25 | question, 26 | answer 27 | HAVING 28 | count( * ) > 1) 29 | 30 | 31 | 3、 把tikuNet表里的数据复制到tiku 32 | INSERT INTO tiku ( question, answer ) SELECT 33 | question, 34 | answer 35 | FROM 36 | tikuNet -------------------------------------------------------------------------------- /tikuCommon.js: -------------------------------------------------------------------------------- 1 | importClass(android.database.sqlite.SQLiteDatabase); 2 | var path=files.path("/sdcard/Download/tiku.db"); 3 | function searchTiku(keyw) { 4 | //表名 5 | var tableName = "tiku"; 6 | var ansArray = searchDb(keyw, tableName, ""); 7 | return ansArray; 8 | 9 | } 10 | 11 | function searchDb(keyw, _tableName, queryStr) { 12 | var tableName = _tableName; 13 | //创建或打开数据库 14 | var db = SQLiteDatabase.openOrCreateDatabase(path, null); 15 | var query = ""; 16 | if (queryStr == "") { 17 | query = "SELECT question,answer FROM " + tableName + " WHERE question LIKE '" + keyw + "%'";//前缀匹配 18 | } else { 19 | query = queryStr; 20 | } 21 | 22 | log(query); 23 | //query="select * from tiku" 24 | //db.execSQL(query); 25 | 26 | var cursor = db.rawQuery(query, null); 27 | cursor.moveToFirst(); 28 | var ansTiku = []; 29 | if (cursor.getCount() > 0) { 30 | do { 31 | var timuObj={"question" : cursor.getString(0),"answer":cursor.getString(1)}; 32 | ansTiku.push(timuObj); 33 | } while (cursor.moveToNext()); 34 | } else { 35 | log("题库中未找到: " + keyw); 36 | } 37 | cursor.close(); 38 | return ansTiku; 39 | 40 | } 41 | 42 | function executeSQL(sqlstr) { 43 | //创建或打开数据库 44 | var db = SQLiteDatabase.openOrCreateDatabase(path, null); 45 | db.execSQL(sqlstr); 46 | toastLog(sqlstr); 47 | db.close(); 48 | } 49 | 50 | 51 | function indexFromChar(str) { 52 | return str.charCodeAt(0) - "A".charCodeAt(0); 53 | } 54 | 55 | function searchNet(keyw) { 56 | var tableName = "tikuNet"; 57 | var ansArray = searchDb(keyw, tableName, ""); 58 | return ansArray; 59 | } 60 | 61 | exports.searchTiku = searchTiku; 62 | exports.searchNet = searchNet; 63 | exports.searchDb = searchDb; 64 | exports.indexFromChar = indexFromChar; 65 | exports.executeSQL = executeSQL; 66 | 67 | 68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /updateTikuNet.js: -------------------------------------------------------------------------------- 1 | // 加载jsoup.jar 2 | runtime.loadJar("./jsoup-1.13.1.jar"); 3 | // 使用jsoup解析html 4 | importClass(org.jsoup.Jsoup); 5 | importClass(org.jsoup.nodes.Document); 6 | //importClass(org.jsoup.nodes.Element); 7 | importClass(org.jsoup.select.Elements); 8 | 9 | importClass(android.database.sqlite.SQLiteDatabase); 10 | /** 11 | * 插入tikuNet表 12 | * @param {} liArray li列表,包含题目和答案 13 | */ 14 | function CreateAndInsert(liArray) { 15 | 16 | var dbName = "/sdcard/Download/tiku.db"; 17 | //文件路径 18 | var path = files.path(dbName); 19 | //确保文件存在 20 | if (!files.exists(path)) { 21 | files.createWithDirs(path); 22 | } 23 | //创建或打开数据库 24 | var db = SQLiteDatabase.openOrCreateDatabase(path, null); 25 | var createTable = "\ 26 | CREATE TABLE IF NOt EXISTS tikuNet(\ 27 | question CHAR(253),\ 28 | answer CHAR(100)\ 29 | );"; 30 | var cleanTable = "DELETE FROM tikuNet"; 31 | db.execSQL(createTable); 32 | db.execSQL(cleanTable); 33 | log("创建打开清空表tikuNet!"); 34 | 35 | var sql = "INSERT INTO tikuNet (question, answer) VALUES (?, ?)"; 36 | db.beginTransaction(); 37 | var stmt = db.compileStatement(sql); 38 | for (var li = 0, len = liArray.size(); li < len; li++) { 39 | //log("题目:"+li.text()); 40 | 41 | var liText = liArray.get(li).text(); 42 | var timuPos = liText.indexOf("】"); 43 | var tiMu = liText.replace(/\s/g, ""); 44 | var tiMu = tiMu.substring(timuPos).replace(/_/g, ""); 45 | var daAn = liArray.get(li).select("b").first().text(); 46 | // log(util.format("题目:%s\n答案:%s"), tiMu, daAn); 47 | stmt.bindString(1, tiMu); 48 | stmt.bindString(2, daAn); 49 | stmt.executeInsert(); 50 | stmt.clearBindings(); 51 | } 52 | db.setTransactionSuccessful(); 53 | db.endTransaction(); 54 | db.close(); 55 | return true; 56 | } 57 | 58 | 59 | /** 60 | */ 61 | function updateTikunet() { 62 | log("开始下载题库数据..."); 63 | var htmlString = Jsoup.connect("https://qg.zyqq.top/tiku/").maxBodySize(0).timeout(10000).get(); 64 | var htmlArray = Jsoup.parse(htmlString); 65 | var liArray = htmlArray.select("li:has(b)"); 66 | //执行更新 67 | log("开始更新数据库..."); 68 | if (CreateAndInsert(liArray)) { 69 | log("数据库更新完毕!"); 70 | log(util.format("题库下载完毕,题目总数:%s"), liArray.size()); 71 | return liArray.size(); 72 | } else { 73 | return -1; 74 | } 75 | } 76 | //updateTikunet(); 77 | module.exports = updateTikunet; 78 | 79 | -------------------------------------------------------------------------------- /!floating.js: -------------------------------------------------------------------------------- 1 | //toastLog(" 请在无障碍中选择本 APP"); 2 | auto.waitFor(); 3 | 4 | let window = floaty.window( 5 | 6 |