˵Ã÷:¿ÉÒÔʹÓð²×¿studio ¿ª·¢³öapk,jar,»òÕßdexʹÓô˷½·¨¼ÓÔØÄ£¿é,
×¢Òâ:²å¼þÖ±½Ó·Åµ½²å¼þÎļþ¼ÐÖÐÈ»ºóÉÏ´«µ½ÊÖ»ú
Ó¢ÎÄ·½·¨: loadDex(plugin)£¬¼ÓÔØ²å¼þµ½ÏµÍ³
²ÎÊý£º
plugin:²å¼þÃû³ÆÀýÈçµ¼ÈëµÄ²å¼þΪ p1.dex,Ôò²ÎÊýÃû¾ÍÌîд loadPlugin(¡®p1.dex¡¯)
°¸Àý:
//µ¼ÈëdexÄ£¿é
rhino.loadDex('p1.dex')
//µ¼ÈëapkÄ£¿é
rhino.loadDex('demo.apk')
importClass µ¼Èë²å¼þÖеÄÀà
·½·¨ËµÃ÷:ͨ¹ýÕâ¸ö·½·¨¿ÉÒÔµ¼Èë²å¼þÀï±àдºÃµÄÀà
Ó¢ÎÄ·½·¨:importClass(class);
ÖÐÎÄ·½·¨:µ¼ÈëÀà(ÀàµØÖ·,Àà±ðÃû);
²ÎÊý:
class:ÀàµØÖ· ÀýÈç com.autoapp.pluginsdemo.demo
°¸Àý:
//µ¼Èë²å¼þÎļþ
rhino.loadDex('demo.apk')
//Èç¹ûÐèÒªÒýÓöà¸öapk ÐèÒª¼ÓÉÏÀർÈë
rhino.loadClass("com.autoapp.pluginsdemo.demo")
//ÒýÓÃÀà
importClass(com.autoapp.pluginsdemo.demo);
var demo1=new demo();
printl(demo1.hello());
ʹÓ÷½·¨£º
1.ÏÂÔØ
Á´½Ó: https://www.123pan.com/s/NiUnjv-V8sg3.html
ÌáÈ¡Âë: qhbz
2.ʹÓÃÒÔÏ´úÂëʶ±ðOCR
//¼ÓÔØ²å¼þ
try{
rhino.loadDex('TomatoOCR.apk')
sleep.second(1);
//µ¼ÈëÀà
rhino.loadClass("com.tomato.ocr.aw.OCRApi")
importClass(com.tomato.ocr.aw.OCRApi);
}catch(e){
rhino.clearDex();
rhino.loadDex('TomatoOCR.apk')
sleep.second(1);
importClass(com.tomato.ocr.aw.OCRApi)
}
//³õʼ»¯
var ocr= new OCRApi();
ocr.setContext(context);
//½ØÍ¼ºÍʶ±ð
var img=screen.screenShot(screen.getScreenWidth()/2,screen.getScreenHeight()/2,100)
printl(img)
var res=ocr.ocrBase64(img.toBase64(),-1);
printl(res)
ÒÔÏÂÊÇÍøÓÑÌṩµÄ·â×°°¸Àý
¸´ÖÆvar TM = {};
/*================================== ocrÀà ==================================*/
//¼ÓÔØ²å¼þ
//rhino.loadDex('TomatoOCR.apk',"armeabi-v7a")
rhino.loadDex('TomatoOCR.apk')
//µ¼ÈëÀà
try {
//¶à²å¼þµ÷ÓñØÐëµ¼ÈëÀà
rhino.loadClass('com.tomato.ocr.aw.OCRApi');
importClass(com.tomato.ocr.aw.OCRApi)
} catch (error) {
FZ.printll(error)
}
var ocr = new OCRApi();
let rec_type = "ch-3.0";
//×¢£ºch¡¢ch-2.0¡¢ch-3.0°æ¿ÉÇл»Ê¹Ó㬶Բ¿·Ö³¡¾°¿ÉÊʵ±µ÷Õû
//-- "ch"£ºÆÕͨÖÐÓ¢ÎÄʶ±ð£¬1.0°æÄ£ÐÍ
//-- "ch-2.0"£ºÆÕͨÖÐÓ¢ÎÄʶ±ð£¬2.0°æÄ£ÐÍ
//-- "ch-3.0"£ºÆÕͨÖÐÓ¢ÎÄʶ±ð£¬3.0°æÄ£ÐÍ
//-- "cht"£º·±Ì壬"japan"£ºÈÕÓ"korean"£ºº«Óï
ocr.setContext(context, rec_type);
// ÊÔÓðælicense´ÓȺÖлñÈ¡»òÕßÍøÅÌÖлñÈ¡
let license = "×Ô¼ºÕÒ×÷Õß»ñÈ¡"
let flag = ocr.setLicense(license);
//printl(flag)
// flag= -1: ÎÞЧlicense
// flag= 0 : ¹ýÆÚlicense
// flag= 1 »ò µ½ÆÚÈÕÆÚ : ÊÔÓÃlicense»òÕýʽlicense
ocr.setDetBoxType("rect") // µ÷Õû¼ì²âÄ£Ðͼì²âÎı¾²ÎÊý- ĬÈÏ"rect": ÓÉÓÚÊÖ»úÉϽØÍ¼Îı¾¾ùΪ¾ØÐÎÎı¾£¬´Ó¸Ã°æ±¾Ö®ºó¾ù¸ÄΪrect£¬"quad"£º¿É׼ȷ¼ì²âÇãбÎı¾
ocr.setDetUnclipRatio(1.9) // µ÷Õû¼ì²âÄ£Ðͼì²âÎı¾²ÎÊý - ĬÈÏ1.9: Öµ·¶Î§1.6-2.5Ö®¼ä
ocr.setRecScoreThreshold(0.3) // ʶ±ðµÃ·Ö¹ýÂË - ĬÈÏ0.1£¬Öµ·¶Î§0.1-0.9Ö®¼ä
ocr.setReturnType("json")
// ·µ»ØÀàÐÍ - ĬÈÏ"json": °üº¬µÃ·Ö¡¢×ø±êºÍÎÄ×Ö£»
//"text"£º´¿ÎÄ×Ö£»
//"num"£º´¿Êý×Ö£»
//×Ô¶¨ÒåÊäÈëÏëÒª·µ»ØµÄÎı¾£º".£¤1234567890"£¬½öÖ»·µ»ØÕâЩÄÚÈÝ
var type = 3;
// type ¿É´«¿É²»´«
// type=0 : Ö»¼ì²â
// type=1 : ·½Ïò·ÖÀà + ʶ±ð
// type=2 : ֻʶ±ð
// type=3 : ¼ì²â + ʶ±ð
// Ö»¼ì²âÎÄ×ÖλÖãºtype=0
// È«ÆÁʶ±ð: type=3»òÕß²»´«type
// ½ØÈ¡µ¥ÐÐÎÄ×Öʶ±ð£ºtype=1»òÕßtype=2
/*================================== ocrÀà ==================================*/
/*================================== ocr·â×° ==================================*/
// tmstr="" ʶ±ðµÄÎÄ×Ö
// tmsize=[] ʶ±ð°Ù·Ö±ÈÇøÓò
// tmclick=true/false ÊÇ·ñµã»÷
// tmcoor1, tmcoor2 Æ«ÒÆ×ø±ê·¶Î§
// tmslee µã»÷ºóÐÝϢʱ¼ä
TM.tmocrʶ±ð = function (tmstr, tmsize, tmclick, tmcoor1, tmcoor2, tmslee) {
//ËÄÉáÎåÈëÈ¡Õû£¬°Ù·Ö±È×ø±ê×ªÕæÊµ×ø±ê
var tma = Math.round(tmsize[0] * wdh)
var tmb = Math.round(tmsize[1] * hgt)
//var tmc = Math.round(tmsize[2] * wdh)
//var tmd = Math.round(tmsize[3] * hgt)
//printl(tmsize[0])
//printl(tma)
var img0 = screen.screenShotFull()
sleep.millisecond(10)
//°Ù·Ö±È²Ã¼ô
var img = img0.cutImagePercent(tmsize[0], tmsize[1], tmsize[2], tmsize[3])
sleep.millisecond(10)
//var img = screen.screenShot(screen.getScreenWidth() / 2, screen.getScreenHeight() / 2, 100)
var result3 = ocr.ocrBase64(img.toBase64(), type);
//printl(result3)
try {
if (result3 != "") {
var result3 = JSON.parse(result3)
var point = this.findStrCenter(result3, tmstr)//ʶ±ð
//printl(point[0], point[1])
if (point[0] >= 0) {
FZ.printll(tmstr)
var tme = point[0] + tma
var tmf = point[1] + tmb
printl(tme, tmf)
if (tmclick == true) {
hid.click(tme + rand.randNumber(tmcoor1, tmcoor2), tmf + rand.randNumber(tmcoor1, tmcoor2))
sleep.millisecond(tmslee)
}
img0.recycle()
img.recycle()
return true
} else {
img0.recycle()
img.recycle()
return false
}
}
} catch (err) {
printl(err)
}
}
//ÇøÓòÕÒ×Ö·µ»Ø×ø±ê
TM.tmocrʶ±ð×ø±ê = function (tmstr, tmsize) {
//ËÄÉáÎåÈëÈ¡Õû£¬°Ù·Ö±È×ø±ê×ªÕæÊµ×ø±ê
var tma = Math.round(tmsize[0] * wdh)
var tmb = Math.round(tmsize[1] * hgt)
var img0 = screen.screenShotFull()
sleep.millisecond(10)
//°Ù·Ö±È²Ã¼ô
var img = img0.cutImagePercent(tmsize[0], tmsize[1], tmsize[2], tmsize[3])
sleep.millisecond(10)
//var img = screen.screenShot(screen.getScreenWidth() / 2, screen.getScreenHeight() / 2, 100)
var result3 = ocr.ocrBase64(img.toBase64(), type);
//printl(result3)
try {
if (result3 != "") {
var result3 = JSON.parse(result3)
var point = this.findStrCenter(result3, tmstr)//ʶ±ð
//printl(point[0], point[1])
if (point[0] >= 0) {
FZ.printll(tmstr)
var tme = point[0] + tma
var tmf = point[1] + tmb
printl(tme, tmf)
var poin = [tme, tmf]
img0.recycle()
img.recycle()
return poin
} else {
img0.recycle()
img.recycle()
return false
}
}
} catch (err) {
printl(err)
}
}
TM.findStrCenter = function (result_list, data) {
all_result = []
for (let i = 0; i < result_list.length; i++) {
var words = result_list["words"]
var location = result_list["location"]
var pos = words.indexOf(data);
if (pos >= 0) {
let w_len = words.length
let d_len = data.length
let x1 = location[0][0]
let y1 = location[0][1]
let x2 = location[2][0]
let y2 = location[2][1]
let x = Math.floor((x2 - x1) / w_len * (d_len + 2 * pos) / 2 + x1)
let y = Math.floor((y2 - y1) / 2 + y1)
return [x, y]
}
}
return [-1, -1]
}
//ÄÚ´æÊÍ·Å
//ocr.end()
/*================================== ocr·â×° ==================================*/