At||(wiS}`ByiM76gf@2w$nDJ{5i@0srk9dzD;hdVhzIJ-<8gf
zT9FnZlcugV9O#B1#5znR<-4o?cng`N&ACE};rg-3+p4Q}0-+@jw!F6;!5XoyG6f@J
zGjds~SYjQ`YSe`wz;b4XAOJwjRJXS4C4S5i4O7Gn&4AE?4^EB*&$**1ONf>jHcfEL
zIZis!hM1guO|vL8(k0XiOR@vON$Gw|6B7g{c#BhrZ)P|ddk|Iq(UvIf2olRZ03fAV
zaUw}tL!6z{8l?RoEC=ION?J`By12di$!k8}`j<9FM#qmVRDbhTs6#&+Y6Y7mgQiTF
zH8*L*7SBQbRw7gCk*Kw3>550kB}f?X~iH3
zG?F8sx#j^dca=44N091_0>p|{rL?xYg#so9nP^T3f?cm3I#KdTg*fIs5%j`E7Ns+k
zQYz`**6mhWH)~k$-VtiQsG|TOl;BqORYKcI)-Tu1)Di2DdLY(yowk(o3H=galcfcu
z0%@D$z+#6M@6`SSky0!|#l*T3f2G+rBLcL72ts4xG62a!S!9Pyjmmr~)4JiDrZ~zw
z^CGKrNLoD%TS`ZO%$jNA%rq0gJmi^F&sckP?YC}YB+P);k-^IhK~mb1EQ6|PtEJ)F
znRC__W{4ndkcpE{#2OkQs++jfw-W0oZnefakyD5PW`foxO+1Am8lzMBL!b(ND%7D0
z*`yi>Af|wbtZJQH=hADsFarc>k4-!Qk_0441PJR^T5OVPtx@(}T}@!M?~{!*(Ph_S
z&BmyqmQjl6e~JmqNI7XCL==Z+B4#3xIVT_?NyPdEO_Haj@iBeqh9Jz$geH+NHN=Bq
z0G1GzfU(pXSw9Fp3^*t7)#u-&h$NY7I?(k|AL+CpDJ(^hB*=<{Tk_qS6&N9x{UX+G
zdmn=IkPtG3P=T0P5&@bSlE@O03$)Ql2R7AmY|VC#}bpJ2^uL5VQ%kWH)u^8#>)rb`UMCQ@QNBix!#U96Pi%y
zz%Bo&gJc6_YUqj}9Muv|eNFsXGwG4oA^{Ra!dT|96pug?%DxLPEOmp@5kaXu!Jb#9
ztRui0a3_^wO;$WBtSBI28?_643SuPw*Xb&bpi7Z8wbNOT@D36kD<}4iI-9HUYX7Sy7Q&
zBNsF)&}7Gn1VL*KnK;F@GA%MYNhmz{)ID@??m^nyh~+bLL;VmBDtxqbmJ
z7`#Bg_=P_KHI$aP{shM^62Pn#D-Z+;AoRH`SdK^wgHs1PTmM4nzWlwbe2A_Ilyy^N
zPzmG+Mq1hyE7C-e^;L_ez$~4UkjE2>BML!TqaxsB9GN4P0
z{+@xvDJ=zu8Kj8_U=1i`o@^8X&0qRb&QIp||mJx>A<7QrF`X$hp#67IM{P&Sd)%4i5RGTpQ+2%PN^NTq?=YD(6C
z&xHQIxlP=`%sk-^nMdaYpc$-{5m~|lLQfx*896C!f>vhCjRkZG)8G87?oNDlXJx5Q
zTW`25nnY;
z{`jU@ArO_-1cWrkfKrjY5Q#(;@I)B!xR3;;>Wdt@S@TNGB8PaM4yF!jCR$K;~JD$%$as$;ueT?ndFU!I$&pvcqvb6!vQUl
z!8Lcm5)S&a$2FZRdE@ZaBw0d&h@lNJA_EwZT9)qn&aTHUe8W6<{-Sgy40J;e$qsM~
zPFiAkzgzn8cXmIFF5aln4M6~4bnBBN-#+2Q+($?dxC;v+latu7Wn$l*-+1Onuf4Ya
zuec*?t=^(x&5$WVx>ulFh=@Y{prHD9)ECTE6hCm@i3+uaVG?c8&Lo2m*y)-M9aiZ+~g~{{@ioO6rh~bJvNta?Rg_vuu2pbdNxJQh}QuJT)s_YmKy(
zCdbY;wK3@)W{p4y$^w8673(;fphJc`!9xJV-d*nAJHNc+%Kvfo@~_Y}0QN6xYd2c9eW8y*_I`AZ+$^lymXB{FeP?Fl??h&?66hqzMR(iqNXV_6}c
zm+)hqg2+{jS2{Fo%BYl;X$tU-xVxCiY+J+((h4$m{(>@d;ZU$In#j~6_YXZ$EChf3
z#&<5icG)TUm-Wp_Aq;fI2^GSOckGalr`ApU*Ec@B^%J|Fo!l9Xw}k5BY%^+QX_#%d
zT>$xwkBn^j&?CRP{2kZ4@C~cZnDgerCE1nvUfbC4A!B&I8|>Xt{K=2++WpmE-hW^n
zjFsa72n$2uhz_}Ir72ynhm6U~te~_)l#KvK+%AMfZIK;E8%U&b0=5ILR3}E-AXEYR
z^NS&+m7qgLB#CNBL~%rR0YG!f9hPGeK}rCejgO3M-T27JyI*(t(pRj$VBVV-9G5;P
zo3|a!fLjc_gL~bFAAjJ`H`m^=`vI7Ri|F0}U2NIZEkP8_q!P@=`o*u_@Y}BgxaX3;
zS$5v?Q~S?w9N9BD=Iwj@mxq4&@cjp#j1Y=fN(exYAK(dQl!%b7?EsaCuFW=btaJd)
z3X&`cA)$1cSa1|Lq3V4A(mfKSHN28W%nVv9WK#pw7&ZX_*DJ6fK|}=2(8`D`5hZrc9pitoghhbIH)$y43zu=
z)*N@Ky6l|KAXGj=9l#PPlET96zq*DWJ8+lGXL_Rz_Ngien32vCG!y)i@l}{LGFD&W
zV2a@|3n{3g$21941B;WxTZ%{R<
z1upU7NAqT(>TJgENQuW8*4)<>Oot$`u^x9CzpO=~euLq7b;Spxy7z~t0*o~}xy*oI
ziNoVV&`PtA^^v)(-HV{C;f^b$dju?}*6A>=Y+uC~)w2-bequBI>y^ubn_c|jR|P==GL
zC&7#+=WdF-3wd}
zR2jlC`>KQi0@m!XH1RO@`EWF*#*lrjglIP>(}I~OC2jVQroNT|a8T64O%Ks9AV{L*
z6}VU)M^CQ5Zs1E7ti(;1|BQylc46!O^}K1%1H5_PdKwzp3~x~ygXtB#YVO&*yzgba
zD0c?t<(3mA6jhYG5iY9&GQtEFLq)dX4Kvri&%>x1CR2@h#^Gqc&;^J_?U#61tD0Yc
zC}$#2^b0iZ4)Y+EHr-4_G&ryfg9FRx!c}iV5c>Sg&<2sqX2f9cO4!nATX<9SM@XSe
zf-;c|(ufN!bO;1452K!=j~W~^f+!D#IAd7v8WI!-R4h+))R=9hXyx(ebd{DX2SsQO
z<1$xPVU!dkqkn=D#%pjrs&F(3Qm5>S6RM#6s;68@p9%m{^Y-U9^6AIDf)c_|(+33<
z3yPoFw?PYwB?%*?bj?FPIt08D7f@B`N2H{?g=57b*4PepPzCJTY08)wm>Dw>A(zS1
z+Ko5jiLDRn74y%=sY}nMlNPVS{JHa}TZ{u27&^3h&PCAZyqE8
z25YUENkj_XV}I;9?;yI^<7y`1n2D@CTfK=jI#(c3ExeA)fh@~{XBTPH_&v0K*WHj0
z_3&Wta-4GfS^BhP=VR5l(wKoZc*;|DkE5&SnI2mqjXfIMgvD;1g)<F^*FHYepo31+aXBX5TBW#nTeuEFPI9W&rvx-^Y>bZ#J~XHd7jIR
zNzq^v#d{ut7$gbW0;H3Ile6GWGE}Ik93H~P1OG)&?EL{8k>^EyC+fbrK23zXh=otK
zZ6Vd;px^F=v8L|L=vuVp4&NK@}6
z;!Q0jK}rS$7|iUJNNWvC2qUtBK##x#2xENzTbR87;D-VBkl^}LQLK;+lbBj8HlihE
z0ai-DFKUE715D7c;3$i8y+WsR=4o;vO|hGhT({Gy)?lSsmrBg#GPvx5{D5r|)m(`3
zu?HqLm-I&IS%+h#LrnfC2mrPNvQt19vi3u0
zufTB2fbRi8NP^iU8%1O^7!gG<$wY?lG7jwwCr0<^&8YW5jw*EJ;m%Nh1d~6>0Laci
z**bCA8t3e}OYF0AbH$mNUb#FwN5D#%G9#@_sptEZyhQUK?mE3;=xT++peszemScTM$r
zT>2T;0SjTa3uk8dB}Qpfjksg_H{<)%V?&$6$G1OJeg?oH7`>rk@*pm%?@ynRx36^y
z$ATaxrDw#YQ*)$HzrSrdw?Hm>!TIS^=Pk9)>RljKJAGnBey+4FC-NUcj;h@akwVW<
zN<>dnDW6ds(V;h~w@(~Y8%B4BkM4Zf-!y(u?T49k5gl=o&8s<%%KOtB;aCs^sAk*Z
zG^mYgTGX!j1gcwg_Z|O7sbx#fa8?g2mTPhY;>DSMu`tsoi~=VDD@Ngv!sKB!?2hV<
zV+Yjwy-x*?@BOvE6TleE1jjj!IOSTKcC9^*Ix&D_N07Mhm|NmQMu%1NX``C2j}3xU
zI*$d*&&!@NxKf_gyU<$01W_1L8xC#@)@}Q_yTvPF2xg_n#E;Xjjd}0*IO6o{Ou(@u
zNNxYra3m3^k%Qt%W&pXUonp=XjON0FS|T(~ek~D>2{C|UPmo%mgwICe#JZ=JgBneD
zg{pPbSOHR-7jK;WV@8Bpcs>!N7Ggi3ws4{qf#L(G7dvsKOD!RQ`iXyD5TO?SKk`*O
UJGB#Mx&QzG07*qoM6N<$f~gD%_W%F@
literal 0
HcmV?d00001
diff --git a/inrt/src/main/assets/project/main.js b/inrt/src/main/assets/project/main.js
new file mode 100644
index 00000000..988f41e7
--- /dev/null
+++ b/inrt/src/main/assets/project/main.js
@@ -0,0 +1,32 @@
+"ui";
+
+ui.layout(
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+);
+
+ui.change_img.click(()=>{
+ ui.rounded_img.setSource("http://www.autojs.org/assets/uploads/profile/1-profilecover.jpeg");
+});
\ No newline at end of file
diff --git a/inrt/src/main/assets/project/project.json b/inrt/src/main/assets/project/project.json
new file mode 100644
index 00000000..2e6c09bf
--- /dev/null
+++ b/inrt/src/main/assets/project/project.json
@@ -0,0 +1,10 @@
+{
+ "name": "Hello World",
+ "versionName": "1.0.0",
+ "versionCode": 1,
+ "packageName": "org.autojs.example",
+ "main": "main.js",
+ "assets" : [
+ "auto.js.png"
+ ]
+}
\ No newline at end of file
diff --git a/inrt/src/main/assets/script.js b/inrt/src/main/assets/script.js
deleted file mode 100644
index 1236e54b..00000000
--- a/inrt/src/main/assets/script.js
+++ /dev/null
@@ -1,2 +0,0 @@
-auto();
-toast(files.read("/sdcard/1.txt"));
\ No newline at end of file
diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/App.java b/inrt/src/main/java/com/stardust/auojs/inrt/App.java
index 8ab66bef..1fe428f4 100644
--- a/inrt/src/main/java/com/stardust/auojs/inrt/App.java
+++ b/inrt/src/main/java/com/stardust/auojs/inrt/App.java
@@ -1,10 +1,9 @@
package com.stardust.auojs.inrt;
import android.app.Application;
-import android.app.Fragment;
-import com.stardust.auojs.inrt.rt.AutoJs;
-import com.stardust.auojs.inrt.rt.GlobalKeyObserver;
+import com.stardust.auojs.inrt.autojs.AutoJs;
+import com.stardust.auojs.inrt.autojs.GlobalKeyObserver;
/**
* Created by Stardust on 2017/7/1.
diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/MainActivity.java b/inrt/src/main/java/com/stardust/auojs/inrt/MainActivity.java
index cd80b364..10142a42 100644
--- a/inrt/src/main/java/com/stardust/auojs/inrt/MainActivity.java
+++ b/inrt/src/main/java/com/stardust/auojs/inrt/MainActivity.java
@@ -11,11 +11,10 @@ import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
-import com.stardust.auojs.inrt.rt.AutoJs;
+import com.stardust.auojs.inrt.autojs.AutoJs;
+import com.stardust.auojs.inrt.launch.AssetsProjectLauncher;
import com.stardust.autojs.core.console.ConsoleView;
import com.stardust.autojs.core.console.StardustConsole;
-import com.stardust.autojs.script.StringScriptSource;
-import com.stardust.pio.PFiles;
import java.util.ArrayList;
import java.util.Arrays;
@@ -46,15 +45,7 @@ public class MainActivity extends AppCompatActivity {
private void runScript() {
- new Thread(() -> {
- try {
- String js = PFiles.read(getAssets().open("script.js"));
- StringScriptSource source = new StringScriptSource("main", js);
- AutoJs.getInstance().getScriptEngineService().execute(source);
- } catch (Exception e) {
- AutoJs.getInstance().getGlobalConsole().log(e);
- }
- }).start();
+ new Thread(() -> new AssetsProjectLauncher("project", this).launch()).start();
if (!Pref.shouldShowMainActivity()) {
finish();
}
diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/rt/AccessibilityService.java b/inrt/src/main/java/com/stardust/auojs/inrt/autojs/AccessibilityService.java
similarity index 94%
rename from inrt/src/main/java/com/stardust/auojs/inrt/rt/AccessibilityService.java
rename to inrt/src/main/java/com/stardust/auojs/inrt/autojs/AccessibilityService.java
index 0ad09430..007fd70a 100644
--- a/inrt/src/main/java/com/stardust/auojs/inrt/rt/AccessibilityService.java
+++ b/inrt/src/main/java/com/stardust/auojs/inrt/autojs/AccessibilityService.java
@@ -1,4 +1,4 @@
-package com.stardust.auojs.inrt.rt;
+package com.stardust.auojs.inrt.autojs;
import android.accessibilityservice.AccessibilityServiceInfo;
diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/rt/AccessibilityServiceTool.java b/inrt/src/main/java/com/stardust/auojs/inrt/autojs/AccessibilityServiceTool.java
similarity index 97%
rename from inrt/src/main/java/com/stardust/auojs/inrt/rt/AccessibilityServiceTool.java
rename to inrt/src/main/java/com/stardust/auojs/inrt/autojs/AccessibilityServiceTool.java
index 174bb84c..ceae8d6b 100644
--- a/inrt/src/main/java/com/stardust/auojs/inrt/rt/AccessibilityServiceTool.java
+++ b/inrt/src/main/java/com/stardust/auojs/inrt/autojs/AccessibilityServiceTool.java
@@ -1,4 +1,4 @@
-package com.stardust.auojs.inrt.rt;
+package com.stardust.auojs.inrt.autojs;
import android.accessibilityservice.AccessibilityService;
import android.content.Context;
diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/rt/AutoJs.java b/inrt/src/main/java/com/stardust/auojs/inrt/autojs/AutoJs.java
similarity index 94%
rename from inrt/src/main/java/com/stardust/auojs/inrt/rt/AutoJs.java
rename to inrt/src/main/java/com/stardust/auojs/inrt/autojs/AutoJs.java
index 9c7dd2ba..8d727c1b 100644
--- a/inrt/src/main/java/com/stardust/auojs/inrt/rt/AutoJs.java
+++ b/inrt/src/main/java/com/stardust/auojs/inrt/autojs/AutoJs.java
@@ -1,9 +1,7 @@
-package com.stardust.auojs.inrt.rt;
+package com.stardust.auojs.inrt.autojs;
import android.app.Application;
import android.content.Context;
-import android.widget.CheckBox;
-import android.widget.CompoundButton;
import com.stardust.auojs.inrt.App;
import com.stardust.auojs.inrt.Pref;
diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/rt/GlobalKeyObserver.java b/inrt/src/main/java/com/stardust/auojs/inrt/autojs/GlobalKeyObserver.java
similarity index 98%
rename from inrt/src/main/java/com/stardust/auojs/inrt/rt/GlobalKeyObserver.java
rename to inrt/src/main/java/com/stardust/auojs/inrt/autojs/GlobalKeyObserver.java
index e720f924..0c8f7c66 100644
--- a/inrt/src/main/java/com/stardust/auojs/inrt/rt/GlobalKeyObserver.java
+++ b/inrt/src/main/java/com/stardust/auojs/inrt/autojs/GlobalKeyObserver.java
@@ -1,4 +1,4 @@
-package com.stardust.auojs.inrt.rt;
+package com.stardust.auojs.inrt.autojs;
import android.util.Log;
import android.view.KeyEvent;
diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/launch/AssetsProjectLauncher.java b/inrt/src/main/java/com/stardust/auojs/inrt/launch/AssetsProjectLauncher.java
new file mode 100644
index 00000000..e31a3aec
--- /dev/null
+++ b/inrt/src/main/java/com/stardust/auojs/inrt/launch/AssetsProjectLauncher.java
@@ -0,0 +1,55 @@
+package com.stardust.auojs.inrt.launch;
+
+import android.content.Context;
+
+import com.stardust.auojs.inrt.autojs.AutoJs;
+import com.stardust.autojs.execution.ExecutionConfig;
+import com.stardust.autojs.project.ProjectConfig;
+import com.stardust.autojs.script.JavaScriptFileSource;
+import com.stardust.pio.PFiles;
+
+import java.io.File;
+
+/**
+ * Created by Stardust on 2018/1/24.
+ */
+
+public class AssetsProjectLauncher {
+
+ private String mAssetsProjectDir;
+ private String mProjectDir;
+ private File mMainScriptFile;
+ private ProjectConfig mProjectConfig;
+ private Context mContext;
+
+ public AssetsProjectLauncher(String projectDir, Context context) {
+ mAssetsProjectDir = projectDir;
+ mContext = context;
+ mProjectDir = new File(context.getFilesDir(), "project/").getPath();
+ mProjectConfig = ProjectConfig.fromAssets(context, ProjectConfig.configFileOfDir(mAssetsProjectDir));
+ mMainScriptFile = new File(mProjectDir, mProjectConfig.getMainScriptFile());
+ }
+
+ public void launch() {
+ prepare();
+ try {
+ JavaScriptFileSource source = new JavaScriptFileSource(mMainScriptFile);
+ AutoJs.getInstance().getScriptEngineService().execute(source, new ExecutionConfig()
+ .executePath(mProjectDir));
+ } catch (Exception e) {
+ AutoJs.getInstance().getGlobalConsole().error(e);
+ }
+ }
+
+ private void prepare() {
+ if (mMainScriptFile.exists()) {
+ return;
+ }
+ PFiles.copyAsset(mContext, PFiles.join(mAssetsProjectDir, mProjectConfig.getMainScriptFile()),
+ mMainScriptFile.getPath());
+ for (String asset : mProjectConfig.getAssets()) {
+ PFiles.copyAsset(mContext, PFiles.join(mAssetsProjectDir, asset), PFiles.join(mProjectDir, asset));
+ }
+ }
+
+}