实现在安卓系统上完美运行EXE格式文件办法
安卓运行exe最快的方法
安卓运行exe最快的方法
在安卓设备上运行exe文件是不可能直接的,因为exe文件是Windows操作系统上的可执行文件,无法直接在安卓设备上运行。
但是,你可以通过以下方法实现在安卓设备上运行exe文件:
1. 使用模拟器:使用安卓模拟器,如Bluestacks、NoxPlayer等,在模拟器上安装Windows操作系统的镜像,并在模拟器中运行exe文件。
2. 虚拟机:在安卓设备上安装虚拟机软件,如VirtualBox、VMware等,然后在虚拟机中安装Windows操作系统,并在虚拟机中运行exe文件。
3. 使用Wine:Wine是一个能在Unix-like系统上运行Windows程序的兼容层,可用于安卓设备。
要在安卓设备上使用Wine,需要在设备上安装Termux 等终端模拟器应用,并按照Wine的安装和配置要求进行操作。
以上这些方法都相对复杂,可能需要一定的技术知识,并且在安卓设备上运行Windows程序的性能可能不如在Windows设备上运行。
因此,如果你只是需要运行某个特定的exe程序,可能需要考虑其他解决方案,如寻找相应的安卓应用或者在手机上寻找类似的功能实现。
使用exe4j将java项目打成exe执行程序
使⽤exe4j将java项⽬打成exe执⾏程序使⽤exe4j将java项⽬打成exe执⾏程序最近⽤Java写了⼀个⼩⼯具,想将它达成exe执⾏⽂件,到时候直接放某个⽬录下,⼀执⾏就能跑啦。
⽤到的⼯具:1、写好的项⽬:可以是java项⽬,也可以是java web项⽬2、能够打jar的⼯具:我⽤的MyEclipse开发,他们有⾃带的⼯具,我就直接⽤这个了4、jre:java项⽬的运⾏离不开jre,也不能要求客户⾃⼰去装JDK,所以还是给它带个⽐较保险。
(JDK安装之后,有jdk和jre两个⽬录,可以直接复制这个jre⽂件夹,也可以复制jdk⽂件夹下的jre。
我这⾥⽤的jdk是1.6的)。
5、⼀张后缀名为ico的图标⽂件,作为exe执⾏程序的图标。
也可以没有。
下⾯开始弄。
⼀、将项⽬中的src加压成jar包:1、我的⽬录结构:2、在项⽬名称上右击(或者在左侧的空⽩处右击),选择"Export",也就是导出⽂件,在弹出框⾥⾯找到“Java---JAR file”,如图,然后“Next"。
3、去掉除了src以外的其他⽂件的勾选状态,只选择src⽂件夹,如图。
然后选择当前jar要保存的位置。
最后的三个Options默认的第⼀个是勾选的,后⾯的两个是不勾选的。
咱们这⼉⼀并勾上吧,⽆⾮就是要是选的⽂件夹不存在就新建⽂件夹,要是在已经存在就直接覆盖。
要是不勾选检测到指定⽬录下有指定⽂件时会弹出框问你是否覆盖。
上⾯三点弄完之后,点击“Next”。
4、使⽤默认设置,点击“Next”。
5、往后的步骤,⼀路默认⼀路Next就成。
期间可能会遇到⼀个问题,如下图。
这是两个warnings。
⽆关痛痒,可以不⽤去管它。
你要是觉得不舒服不想要有的话,查⽹上的资料,说将第四部的两个勾都给去掉就不会有这个警告了。
(我试了试,的确没有警告了,但是在后⾯⽣成exe执⾏程序之后,却报错说被警告的两个⽂件找不到了。
实现在安卓系统上完美运行EXE格式文件办法
实现在安卓系统上完美运行EXE格式文件办法在安卓系统上运行EXE格式文件并不是一个简单的任务,因为EXE是Windows系统上的可执行文件格式,而安卓系统是基于Linux内核的。
然而,有几种方法可以尝试在安卓设备上运行EXE文件。
下面将介绍其中几种方法。
1.使用模拟器:安卓系统上最常用的方式是使用模拟器来模拟Windows环境并运行EXE文件。
模拟器是一个能够在安卓设备上模拟其他操作系统的应用程序。
最著名的安卓模拟器之一是Bluestacks,它可以模拟一个完整的Android环境,并允许用户在其中运行Windows应用程序。
安装Bluestacks后,用户可以在其内部运行EXE文件。
2. 使用Wine应用程序:Wine是一个开源的兼容层软件,可以在Linux系统上运行Windows应用程序。
虽然安卓系统并不是Linux系统,但可以使用Wine的安卓版本来模拟Linux环境,并在其中运行EXE文件。
用户需要安装安卓设备上的Wine应用程序,并在其中安装所需的Windows环境和软件依赖项。
然后,用户可以通过Wine应用程序运行EXE文件。
3.使用虚拟机:另一个方法是在安卓设备上安装虚拟机,并在虚拟机中安装Windows操作系统。
虚拟机是一个能够在主操作系统上虚拟出一个完整的操作系统的软件。
用户可以在虚拟机中运行Windows操作系统,并在其中安装和执行EXE文件。
一些常见的安卓虚拟机应用程序包括VirtualBox和VMware。
4.使用移植工具:最后一种方法是将EXE文件转换为安卓设备可识别的格式。
有一些工具可以将Windows应用程序移植到安卓设备上,并将其封装成安卓应用程序的格式(如APK)。
这样一来,用户可以直接在安卓设备上安装和运行EXE文件。
常用的移植工具包括Wineskin和Crossover。
需要注意的是,尽管这些方法可以在安卓设备上运行EXE文件,但并不能保证所有EXE文件都能完美运行。
从内存中加载并启动一个exe
windo ws似乎只提供了一种启动进程的方法:即必须从一个可执行文件中加载并启动。
而下面这段代码就是提供一种可以直接从内存中启动一个exe的变通办法。
用途嘛, 也许可以用来保护你的exe,你可以对要保护的exe 进行任意切分、加密、存储,只要运行时能将e xe的内容正确拼接到一块内存中,就可以直接从内存中启动,而不必不安全地去生成一个临时文件再从临时文件启动进程。
另外这段代码也提供了一种自己写exe外壳的简单途径,如果能配合其它各种外壳技术就更好地保护你的exe文件。
原理很简单:就是“借尸还魂”,启动一个僵尸进程(N T下可以是自身程序启动的另一个进程),然后在它运行前将其整个替换成内存中的exe内容,待正式运行后执行的就是你的目标代码了。
不过代码中还有一些不尽人意的地方,比如在98下运行会留一个僵尸程序的壳在硬盘上(其实那个僵尸程序本身就是一个完整的可执行程序,直接运行的话只显示一条错误信息然后就退出了)。
另外由于客观条件限制,代码没有经过充分测试,只在X P下进行了一些初步测试:普通e xe都能正常运行,u px压缩过的exe绝大多数情况下都能运行,只有在不能卸载僵尸外壳时才有问题(up x压缩过的exe没有重定向表,无法加载到其它地址运行)。
如果有b ug望告之,如果有更好的方法特别是能解决98下的遗留尾巴的话希望不吝赐教。
{ ******************************************************* }{ * 从内存中加载并运行exe * }{ ******************************************************* }{ * 参数:}{ * Buff er: 内存中的ex e地址}{ *Len:内存中ex e占用长度 }{* Cmd Param: 命令行参数(不包含exe文件名的剩余命令行参数)}{* Pro cessI d: 返回的进程Id }{* 返回值:如果成功则返回进程的Han dle(P roces sHand le), }{如果失败则返回INVA LID_H ANDLE_VALU E }{ ******************************************************* }unit PEUn it;inter faceuses wind ows;func tionMemEx ecute(cons t ABu ffer; Len: Inte ger;CmdPa ram:strin g; va r Pro cessI d: Ca rdina l): C ardin al;imple menta tion{$RExeSh ell.r es} // 外壳程序模板(98下使用)t ypeT Image Secti onHea ders= arr ay [0..0]of TI mageS ectio nHead er;P Image Secti onHea ders= ^TI mageS ectio nHead ers;{ 计算对齐后的大小 }f uncti on Ge tAlig nedSi ze(Or igin, Alig nment: Car dinal): Ca rdina l;be ginr esult := (Origi n + A lignm ent - 1) d iv Al ignme nt *Align ment;end;{ 计算加载pe并对齐需要占用多少内存,未直接使用Opt ional Heade r.Siz eOfIm age 作为结果是因为据说有的编译器生成的exe这个值会填0}fun ction Calc Total Image Size(MzH:PImag eDosH eader; Fil eLen: Card inal; peH:PIma geNtH eader s;peSec H: PI mageS ectio nHead ers): Card inal;vari: In teger;beg in{计算pe头的大小}r esult := G etAli gnedS ize(P eH.Op tiona lHead er.Si zeOfH eader s,Pe H.Opt ional Heade r.Sec tionA lignm ent);{计算所有节的大小}fo r i := 0 t o peH.File Heade r.Num berOf Secti ons - 1 doif peSe cH[i].Poin terTo RawDa ta +peSec H[i].SizeO fRawD ata > File Len t hen // 超出文件范围 begi n resu lt := 0; ex it; endels e ifpeSec H[i].Virtu alAdd ress<> 0then//计算对齐后某节的大小 ifpeSec H[i].Misc.Virtu alSiz e <>0 the n resu lt := GetA ligne dSize(peSe cH[i].Virt ualAd dress + pe SecH[i].Mi sc.Vi rtual Size, PeH.Optio nalHe ader.Secti onAli gnmen t) els e resu lt := GetA ligne dSize(peSe cH[i].Virt ualAd dress + pe SecH[i].Si zeOfR awDat a,Pe H.Opt ional Heade r.Sec tionA lignm ent)els e ifpeSec H[i].Misc.Virtu alSiz e < p eSecH[i].S izeOf RawDa ta th en res ult := res ult + GetA ligne dSize(peSe cH[i].Size OfRaw Data,peH.Optio nalHe ader.Secti onAli gnmen t)elser esult := r esult + Ge tAlig nedSi ze(pe SecH[i].Mi sc.Vi rtual Size,PeH.Optio nalHe ader.Secti onAli gnmen t);end;{ 加载pe到内存并对齐所有节 }f uncti on Al ignPE ToMem(cons t Buf; Len: Int eger; varPeH:PImag eNtHe aders;v ar Pe SecH: PIma geSec tionH eader s; va r Mem: Poi nter; varImage Size: Card inal):Boo lean;varSrcMz: PIm ageDo sHead er; //DOS头SrcPe H: PI mageN tHead ers; // P E头Sr cPeSe cH: P Image Secti onHea ders; //节表i: Int eger;l: C ardin al;P t: Po inter;beg inre sult:= fa lse;SrcMz := @Buf;if Le n < s izeof(TIma geDos Heade r) th en ex it;i f Src Mz.e_magic <> I MAGE_DOS_S IGNAT URE t hen e xit;if Le n < S rcMz._lfan ew+Si zeof(TImag eNtHe aders) the n exi t;Sr cPeH:= po inter(Inte ger(S rcMz)+SrcM z._lf anew);if(SrcP eH.Si gnatu re <> IMAG E_NT_SIGNA TURE) then exit;if(SrcP eH.Fi leHea der.C harac teris ticsand I MAGE_FILE_DLL <> 0)or (Sr cPeH.FileH eader.Char acter istic s and IMAG E_FIL E_EXE CUTAB LE_IM AGE = 0) or (Src PeH.F ileHe ader.SizeO fOpti onalH eader<> S izeOf(TIma geOpt ional Heade r)) t hen e xit;SrcPe SecH:= Po inter(Inte ger(S rcPeH)+Siz eOf(T Image NtHea ders));Im ageSi ze := Calc Total Image Size(SrcMz, Len, Src PeH,SrcPe SecH);ifImage Size= 0 t hen exit;Mem := V irtua lAllo c(nil, Ima geSiz e, ME M_COM MIT,PAGE_EXECU TE_RE ADWRI TE);// 分配内存if Mem<> ni l the nbeg in// 计算需要复制的PE头字节数l := S rcPeH.Opti onalH eader.Size OfHea ders;fo r i := 0 t o Src PeH.F ileHe ader.Numbe rOfSe ction s - 1 do if (Src PeSec H[i].Point erToR awDat a <>0) an d (Sr cPeSe cH[i].Poin terTo RawDa ta <l) th en l := Src PeSec H[i].Point erToR awDat a;Move(SrcMz^, Me m^, l);PeH := Poi nter(Integ er(Me m) +PImag eDosH eader(Mem)._lfa new);Pe SecH:= Po inter(Inte ger(P eH) + size of(TI mageN tHead ers));Pt := Poin ter(C ardin al(Me m) +GetAl igned Size(PeH.O ption alHea der.S izeOf Heade rs, P eH.Op tiona lHead er.Se ction Align ment));for i := 0 to P eH.Fi leHea der.N umber OfSec tions - 1dobegin// 定位该节在内存中的位置i f PeS ecH[i].Vir tualA ddres s <>0 the n Pt := Poi nter(Cardi nal(M em) + PeSe cH[i].Virt ualAd dress); if PeSe cH[i].Size OfRaw Data<> 0thenb egin// 复制数据到内存M ove(P ointe r(Car dinal(SrcM z) +PeSec H[i].Point erToR awDat a)^,pt^,PeSec H[i].SizeO fRawD ata);if pe SecH[i].Mi sc.Vi rtual Size< peS ecH[i].Siz eOfRa wData then pt:= po inter(Card inal(pt) + GetA ligne dSize(PeSe cH[i].Size OfRaw Data,PeH.Optio nalHe ader.Secti onAli gnmen t)) el sep t :=point er(Ca rdina l(pt) + Ge tAlig nedSi ze(pe SecH[i].Mi sc.Vi rtual Size,peH.Optio nalHe ader.Secti onAli gnmen t));// pt定位到下一节开始位置end el se pt:= po inter(Card inal(pt) +GetA ligne dSize(PeSe cH[i].Misc.Virt ualSi ze, P eH.Op tiona lHead er.Se ction Align ment)); end;res ult := Tru e;en d;en d;t ypeT Virtu alAll ocEx= fun ction (hPr ocess: THa ndle; lpAd dress: Poi nter; dw Size, flAl locat ionTy pe: D WORD; flPr otect: DWO RD):Point er; s tdcal l; v arMy Virtu alAll ocEx: TVir tualA llocE x = n il;funct ion I sNT:Boole an;b eginresul t :=Assig ned(M yVirt ualAl locEx);en d;{生成外壳程序命令行 }fu nctio n Pre pareS hellE xe(Cm dPara m: st ring; Base Addr, Imag eSize: Car dinal): st ring; varr, h, sz:Cardi nal;p: Po inter;fid, l:Integ er;b uf: P ointe r;pe H: PI mageN tHead ers;peSec H: PI mageS ectio nHead ers;beginif I sNT t hen{ NT 系统下直接使用自身程序作为外壳进程 } resu lt := Para mStr(0)+Cm dPara mels e beg in//由于98系统下无法重新分配外壳进程占用内存,所以必须保证运行的外壳程序能容纳目标进程并且加载地址一致//此处使用的方法是从资源中释放出一个事先建立好的外壳程序,然后通过修改其PE头使其运行时能加载到指定地址并至少能容纳目标进程r := F indRe sourc e(HIn stanc e, 'S HELL_EXE', RT_R CDATA);h :=LoadR esour ce(HI nstan ce, r);p :=LockR esour ce(h);l := S izeOf Resou rce(H Insta nce,r); GetM em(Bu f, l);M ove(p^, Bu f^, l); // 读到内存FreeR esour ce(h);p eH := Poin ter(I ntege r(Buf) + P Image DosHe ader(Buf)._lfan ew);peS ecH := Poi nter(Integ er(pe H) +sizeo f(TIm ageNt Heade rs));pe H.Opt ional Heade r.Ima geBas e :=BaseA ddr; //修改PE头重的加载基址i f peH.Opti onalH eader.Size OfIma ge <Image Sizethen// 目标比外壳大,修改外壳程序运行时占用的内存beg in sz:= Im agesi ze -peH.O ption alHea der.S izeOf Image; Inc(peH.O ption alHea der.S izeOf Image, sz); // 调整总占用内存数Inc(p eSecH[peH.FileH eader.Numb erOfS ectio ns-1].Misc.Virt ualSi ze, s z); // 调整最后一节占用内存数en d; // 生成外壳程序文件名,为本程序改后缀名得到的// 由于不想 use s Sys Utils (一旦use 了程序将增大80K左右), 而且偷懒,所以只支持最多运行11个进程,后缀名为.da t, .d a0~.d a9resul t :=Param Str(0);resul t :=copy(resul t, 1, leng th(re sult) - 4) + '.dat';r:= 0;wh ile r < 10 do begi n fid:= Cr eateF ile(p char(resul t), G ENERI C_REA D orGENER IC_WR ITE,0, ni l,CR EATE_ALWAY S, FI LE_AT TRIBU TE_NO RMAL, 0);i f fid < 0thenb eginr esult := c opy(r esult, 1,lengt h(res ult)-3)+'d a'+Ch ar(r+Byte('0')); inc(r); en d else begi n //Se tFile Point er(fi d, Im agesi ze, n il, 0); //S etEnd OfFil e(fid); //S etFil ePoin ter(f id, 0, nil, 0);Write File(fid,Buf^, l, h, nil); //写入文件Close Handl e(fid); bre ak; en d;end;res ult := res ult + CmdP aram; // 生成命令行Fre eMem(Buf);end;end;{ 是否包含可重定向列表}fun ction HasR eloca tionT able(peH:PImag eNtHe aders): Bo olean;beg inre sult:=(p eH.Op tiona lHead er.Da taDir ector y[IMA GE_DI RECTO RY_EN TRY_B ASERE LOC].V irtu alAdd ress<> 0)and (peH.O ption alHea der.D ataDi recto ry[IM AGE_D IRECT ORY_E NTRY_BASER ELO C].Size <> 0);en d;t ypeP Image BaseR eloca tion= ^TIm ageBa seRel ocati on;T Image BaseR eloca tion= pac ked r ecordVi rtual Addre ss: c ardin al; Size OfBlo ck: c ardin al;e nd;{ 重定向PE用到的地址 }proce dureDoRel ocati on(pe H: PI mageN tHead ers;OldBa se, N ewBas e: Po inter);va rDel ta: C ardin al;p: PIm ageBa seRel ocati on;p w: PW ord;i: In teger;beg inDe lta := Car dinal(NewB ase)- peH.Opti onalH eader.Imag eBase;p := poi nter(cardi nal(O ldBas e) +peH.O ption alHea der.D ataDi recto ry[IM AGE_D IRECT ORY_E NTRY_BASER ELOC].Vi rt ualAd dress);wh ile (p.Vir tualA ddres s + p.Size OfBlo ck <> 0) d obeg inpw := poin ter(I ntege r(p)+ Siz eof(p^));for i := 1 to (p.S izeOf Block - Si zeof(p^))div 2 do begi n if p w^ an d $F000 =$3000 thenInc(P Cardi nal(C ardin al(Ol dBase) + p.Virt ualAd dress + (p w^ an d $0F FF))^, Del ta);i nc(pw);end;p := Poi nter(pw);end;end;typeTZwU nmapV iewOf Secti on =funct ion (Handl e, Ba seAdr: Car dinal): Ca rdina l; st dcall; {卸载原外壳占用内存}fun ction Unlo adShe ll(Pr ocHnd, Bas eAddr: Car dinal): Bo olean;varM: H Modul e;Zw Unmap ViewO fSect ion:TZwUn mapVi ewOfS ectio n;be ginr esult := F alse;m := Load Libra ry('n tdll.dll');ifm <>0 the nbeg inZwUnm apVie wOfSe ction := G etPro cAddr ess(m, 'Zw Unmap ViewO fSect ion');i f ass igned(ZwUn mapVi ewOfS ectio n) th en res ult := (Zw Unmap ViewO fSect ion(P rocHn d, Ba seAdd r) =0); Free Libra ry(m);end;end;{创建外壳进程并获取其基址、大小和当前运行状态 }funct ion C reate Child(Cmd: stri ng; v ar Ct x: TC ontex t; va r Pro cHnd, Thrd Hnd,ProcI d,Ba seAdd r, Im ageSi ze: C ardin al):Boole an;v arsi: TSt artUp Info;pi:TProc essIn forma tion;Old: Card inal;MemI nfo:TMemo ryBas icInf ormat ion;p: Po inter;beg inFi llCha r(si, Size of(si), 0);Fil lChar(pi,SizeO f(pi), 0);si.c b :=sizeo f(si);res ult := Cre atePr ocess(nil, PCha r(Cmd), ni l, ni l, Fa lse,CREAT E_SUS PENDE D, ni l, ni l, si, pi); //以挂起方式运行进程if re sultthenbeginPr ocHnd := p i.hPr ocess;T hrdHn d :=pi.hT hread;P rocId := p i.dwP roces sId;{获取外壳进程运行状态,[ctx.Ebx+8]内存处存的是外壳进程的加载基址,ct x.Eax存放有外壳进程的入口地址 }ctx.Cont extFl ags := CON TEXT_FULL;Ge tThre adCon text(ThrdH nd, c tx);Rea dProc essMe mory(ProcH nd, P ointe r(ctx.Ebx+8), @BaseA ddr,SizeO f(Car dinal),Ol d); // 读取加载基址 p := Poin ter(B aseAd dr);{计算外壳进程占有的内存 } whil e Vir tualQ ueryE x(Pro cHnd, p, M emInf o, Si zeof(MemIn fo))<> 0dobeginif Me mInfo.Stat e = M EM_FR EE th en bre ak; p:= Po inter(Card inal(p) +MemIn fo.Re gionS ize);en d;Image Size:= Ca rdina l(p)- Car dinal(Base Addr);end;end;{创建外壳进程并用目标进程替换它然后执行}fun ction Atta chPE(CmdPa ram:strin g; pe H: PI mageN tHead ers;peSec H:PI mageS ectio nHead ers;Ptr: Poi nter; Imag eSize: Car dinal; var Proc Id: C ardin al):Cardi nal;vars: str ing;Addr, Size: Car dinal;ctx: TCo ntext;Old: Car dinal;p:Point er;T hrd:Cardi nal;beginresu lt := INVA LID_H ANDLE_VALU E;s:= Pr epare Shell Exe(C mdPar am, p eH.Op tiona lHead er.Im ageBa se, I mageS ize);if C reate Child(s, c tx, r esult, Thr d, Pr ocId, Addr, Siz e) th enbe gin p := nil;if (peH.Opti onalH eader.Imag eBase = Ad dr) a nd (S ize >= Ima geSiz e) th en //外壳进程可以容纳目标进程并且加载地址一致b eginp := P ointe r(Add r); Vi rtual Prote ctEx(resul t, p, Size, PAG E_EXE CUTE_READW RITE, Old);e ndelseif Is NT th en // 98 下失败beginif Un loadS hell(resul t, Ad dr) t hen // 卸载外壳进程占有内存 //重新按目标进程加载基址和大小分配内存 p:= My Virtu alAll ocEx(Resul t, Po inter(peH.Optio nalHe ader.Image Base), Ima geSiz e, ME M_RES ERVEor ME M_COM MIT,PAGE_EXECU TE_RE ADWRI TE);i f (p= nil) and hasR eloca tionT able(peH)then// 分配内存失败并且目标进程支持重定向begin// 按任意基址分配内存 p := MyV irtua lAllo cEx(r esult, nil, Ima geSiz e, ME M_RES ERVEor ME M_COM MIT,PAGE_EXECU TE_RE ADWRI TE);i f p <> nil then DoR eloca tion(peH,Ptr,p); // 重定向end;end;i f p <> nil thenbe gin Wr itePr ocess Memor y(Res ult,Point er(ct x.Ebx+8),@p, S izeof(DWOR D), O ld);// 重置目标进程运行环境中的基址 peH.Opti onalH eader.Imag eBase := C ardin al(p); if W riteP roces sMemo ry(Re sult, p, P tr, I mageS ize,Old)then// 复制PE数据到目标进程b eginc tx.Co ntext Flags := C ONTEX T_FUL L; ifCardi nal(p) = A ddr t henctx.E ax := peH.Optio nalHe ader.Image Base+peH.Opti onalH eader.Addr essOf Entry Point // 重置运行环境中的入口地址 else ctx.Eax:= Ca rdina l(p)+ peH.Opti onalH eader.Addr essOf Entry Point; SetT hread Conte xt(Th rd, c tx);// 更新运行环境R esume Threa d(Thr d); // 执行Close Handl e(Thr d); en d else begi n //加载失败,杀掉外壳进程 Term inate Proce ss(Re sult, 0);C loseH andle(Thrd); Clo seHan dle(R esult); Res ult := INV ALID_HANDL E_VAL UE; en d;end else begi n //加载失败,杀掉外壳进程 Term inate Proce ss(Re sult, 0);C loseH andle(Thrd); Clo seHan dle(R esult); Res ult := INV ALID_HANDL E_VAL UE; end;end;end;fun ction MemE xecut e(con st AB uffer; Len: Int eger; CmdP aram: stri ng; v ar Pr ocess Id: C ardin al):Cardi nal;varp eH: P Image NtHea ders;peSe cH: P Image Secti onHea ders;Ptr: Poin ter;peSz: Card inal;begi nres ult := INV ALID_HANDL E_VAL UE;i f ali gnPET oMem(ABuff er, L en, p eH, p eSecH, Ptr, peS z) th enb eginres ult := Att achPE(CmdP aram, peH, peSe cH, P tr, p eSz,Proce ssId);V irtua lFree(Ptr, peSz, MEM_DECO MMIT);//Virt ualFr ee(Pt r, 0, MEM_RELEA SE);end;end;init ializ ationMyVi rtual Alloc Ex :=GetP rocAd dress(GetM odule Handl e('Ke rnel32.dll'), 'Virtu alAll ocEx');e nd.写了一个简单程序测试通过:)pro gramTest;//{$APPT YPE C ONSOL E}u sesS ysUti ls,C lasse s,PE Unitin 'P EUnit.pas';va rABu ffer: arra y ofbyte;Stre am: T FileS tream;Pro cessI d: Ca rdina l;be ginS tream:=TFi leStr eam.C reate('Tar get.e xe',fmOpe nRead); tr yS etLen gth(A Buffe r, St ream.Size);S tream.Read Buffe r(ABu ffer[0], S tream.Size);MemEx ecute(ABuf fer[0], St ream.Size, '',Proce ssId);fin allyStr eam.F ree;end;end.。
安卓软件安装与刷机教程
Android软件安装Android软件一般后缀名都是apk,如果不是的话,看是否是rar格式的压缩文件,或者更改下后缀名就可以了。
安装Android软件的方法也很简单,有以下几种方法进行安装:1.使用Android手机自带的谷歌Android Market在线软件店,进入后选择想要下载的软件就可以直接付费下载安装,试用后如果不喜欢还是可以退货的。
2.也可以直接将下载安装文件存放在手机的SD卡中,然后直接在文件管理器中点击安装。
3.可以在PC端安装APK安装器,然后将Android手机连接电脑后,利用APK安装器批量的安装应用程序。
智能手机能与PC间进行联系和实时更新相关信息,使手机与PC的相关信息随时保持一致,这样不管走到哪里,可以确保你的手机的资料和相关信息都与PC上是相同的。
PC 上的信息资料, 如Outlook联系人/日程安排,日记、日历、任务和邮件等等,都可以同步到手机上,这样就可以让手机充当私人助理的角色,无需打开电脑进行相关的工作了,经常外出的商务人士有了这样的功能是很方面的。
Android系统是使用Linux打造的,所以与Windows的PC 是不能直接相连的,必须使用第三方的软件进行协调。
目前HTC手机可使用自己的HTC Sync同步软件,目前的最新版本是2.0.33。
这里要注意的是,如果手机使用的是1.5的固件,那使用H TC Sync2.0.18是没有问题的,如果手机是2.1固件的,就一定要用HTC Sync2.0.25以上的版本才行。
电脑系统要求:WindowsXP/2000/Vista/7,内存至少512M,硬盘空间至少50M,USB要支持2.0标准1. 检查之前是否安装过其他版本的HTC Sync,如果是,请先卸载(方便的话,卸载完后先重启一下,目的是为了保证系统最大限度的兼容性和稳定性)2. 下载最新版本的HTC Sync2.0.33到电脑上http://www. /tw/SupportViewNews.aspx?dl_id=933&news_id= 631复制代码官方下载地址3. 安装最新版本的HTC Sync2.0.33到电脑上(注意:如果电脑有杀毒软件或防火墙正在运行,需先关闭这些)安装完毕后,电脑屏幕右下方会新增一个HTC Sync的图标。
安卓软件安装到安卓系统的手机或mp4的三种方法(附具体操作详细说明)
Android软件一般后缀名都是apk,如果不是的话,看是否是rar格式的压缩文件,或者更改下后缀名就可以了。
安装Android软件的方法也很简单,有以下几种方法进行安装:概括说明:1.使用Android手机自带的谷歌Android Market在线软件店,进入后选择想要下载的软件就可以直接付费下载安装,试用后如果不喜欢还是可以退货的。
2.也可以直接将下载安装文件存放在手机的SD卡中,然后直接在文件管理器中点击安装。
3.可以在PC端安装APK安装器,然后将Android手机连接电脑后,利用APK安装器批量的安装应用程序。
详细说明:方法一使用Android系统的手机最简单的软件安装方法是进入件Market或者也叫电子市场(如果提示需要设置Gmail的话请参看链接)中下载安装。
使用非常简单,只需用手指拖出程序菜单,点击Market(或者叫电子市场)图标进入该程序。
然后在搜索框(search)中填写你需要的软件名称搜索即可,或者在软件分类和推荐软件列表中找到你要安装的软件点击下载安装即可,如果是免费软件会显示为“Free”,如果是收费软件的话会提示软件的费用为“$xx”。
利用Market下载和安装都非常方便,但是此方法的缺点是非常浪费流量(就算软件是免费的,但是网络流量还是要收费的哦!),所以此法只推荐在连接Wifi(如果你Wifi不会设置的话,可以参看该链接)的情况下使用。
另外如果你想安装收费软件,但是又不想花钱那么你可以按照下边的方法安装你在论坛或网站下载的以“.apk”为后缀名的破解版软件。
方法二如果你的手机所刷的固件是安卓自制的固件话,那么你的的手机中可能已经集成了“APK安装器”,你只需要把要安装的文件用读卡器拷贝到内存卡中。
然后在在手机程序菜单中点“设置”进入,然后点击“应用程序”选项,拖动菜单到下端可以看到“APK安装器”,点击进入。
安装器会自动搜索你内存卡中的安装程序,你只需选择要安装的程序名称点击安装即可。
Android 各种文件打开方式
Android打开文件,具体还是看代码吧,代码最能说明问题。
AndroidFileUtil.javapublic static Intent openFile(String filePath){File file = new File(filePath);if(!file.exists()) return null;/* 取得扩展名*/String end=file.getName().substring(file.getName().lastIndexOf(".") + 1, file.getName().length()).toLowerCase();/* 依扩展名的类型决定MimeType */if(end.equals("m4a")||end.equals("mp3")||end.equals("mid")||end.equals("xmf")||end.equals("ogg")||end.equals("wav")){return getAudioFileIntent(filePath);}else if(end.equals("3gp")||end.equals("mp4")){return getAudioFileIntent(filePath);}else if(end.equals("jpg")||end.equals("gif")||end.equals("png")||end.equals("jpeg")||end.equals("bmp")){return getImageFileIntent(filePath);}else if(end.equals("apk")){return getApkFileIntent(filePath);}else if(end.equals("ppt")){return getPptFileIntent(filePath);}else if(end.equals("xls")){return getExcelFileIntent(filePath);}else if(end.equals("doc")){return getWordFileIntent(filePath);}else if(end.equals("pdf")){return getPdfFileIntent(filePath);}else if(end.equals("chm")){return getChmFileIntent(filePath);}else if(end.equals("txt")){return getTextFileIntent(filePath,false);}else{return getAllIntent(filePath);}}//Android获取一个用于打开ALL文件的intentpublic static Intent getAllIntent( String param ) {Intent intent = new Intent();intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setAction(android.content.Intent.ACTION_VIEW);Uri uri = Uri.fromFile(new File(param ));intent.setDataAndType(uri,"*/*");return intent;}//Android获取一个用于打开APK文件的intentpublic static Intent getApkFileIntent( String param ) {Intent intent = new Intent();intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setAction(android.content.Intent.ACTION_VIEW);Uri uri = Uri.fromFile(new File(param ));intent.setDataAndType(uri,"application/vnd.android.package-archive");return intent;}//Android获取一个用于打开VIDEO文件的intentpublic static Intent getVideoFileIntent( String param ) {Intent intent = new Intent("android.intent.action.VIEW");intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);intent.putExtra("oneshot", 0);intent.putExtra("configchange", 0);Uri uri = Uri.fromFile(new File(param ));intent.setDataAndType(uri, "video/*");return intent;}//Android获取一个用于打开AUDIO文件的intentpublic static Intent getAudioFileIntent( String param ){Intent intent = new Intent("android.intent.action.VIEW");intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);intent.putExtra("oneshot", 0);intent.putExtra("configchange", 0);Uri uri = Uri.fromFile(new File(param ));intent.setDataAndType(uri, "audio/*");return intent;}//Android获取一个用于打开Html文件的intentpublic static Intent getHtmlFileIntent( String param ){Uri uri = Uri.parse(param ).buildUpon().encodedAuthority("com.android.htmlfileprovider").scheme("conte nt").encodedPath(param ).build();Intent intent = new Intent("android.intent.action.VIEW");intent.setDataAndType(uri, "text/html");return intent;}//Android获取一个用于打开图片文件的intentpublic static Intent getImageFileIntent( String param ) {Intent intent = new Intent("android.intent.action.VIEW");intent.addCategory("android.intent.category.DEFAULT");intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);Uri uri = Uri.fromFile(new File(param ));intent.setDataAndType(uri, "image/*");return intent;}//Android获取一个用于打开PPT文件的intentpublic static Intent getPptFileIntent( String param ){Intent intent = new Intent("android.intent.action.VIEW");intent.addCategory("android.intent.category.DEFAULT");intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);Uri uri = Uri.fromFile(new File(param ));intent.setDataAndType(uri, "application/vnd.ms-powerpoint");return intent;}//Android获取一个用于打开Excel文件的intentpublic static Intent getExcelFileIntent( String param ){Intent intent = new Intent("android.intent.action.VIEW");intent.addCategory("android.intent.category.DEFAULT");intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);Uri uri = Uri.fromFile(new File(param ));intent.setDataAndType(uri, "application/vnd.ms-excel");return intent;}//Android获取一个用于打开Word文件的intentpublic static Intent getWordFileIntent( String param ){Intent intent = new Intent("android.intent.action.VIEW");intent.addCategory("android.intent.category.DEFAULT");intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);Uri uri = Uri.fromFile(new File(param ));intent.setDataAndType(uri, "application/msword");return intent;}//Android获取一个用于打开CHM文件的intentpublic static Intent getChmFileIntent( String param ){Intent intent = new Intent("android.intent.action.VIEW");intent.addCategory("android.intent.category.DEFAULT");intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);Uri uri = Uri.fromFile(new File(param ));intent.setDataAndType(uri, "application/x-chm");return intent;}//Android获取一个用于打开文本文件的intentpublic static Intent getTextFileIntent( String param, boolean paramBoolean){Intent intent = new Intent("android.intent.action.VIEW");intent.addCategory("android.intent.category.DEFAULT");intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);if (paramBoolean){Uri uri1 = Uri.parse(param );intent.setDataAndType(uri1, "text/plain");}else{Uri uri2 = Uri.fromFile(new File(param ));intent.setDataAndType(uri2, "text/plain");}return intent;}//Android获取一个用于打开PDF文件的intentpublic static Intent getPdfFileIntent( String param ){Intent intent = new Intent("android.intent.action.VIEW");intent.addCategory("android.intent.category.DEFAULT");intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);Uri uri = Uri.fromFile(new File(param ));intent.setDataAndType(uri, "application/pdf");return intent;}。
S900各种格式软件安装方法
第三种、绿色软件安装
这种安装软件方法是最为简单的,直接就是一个以.exe结尾的文件直接拷贝到Windows Mobile中,然后直接点击运行就行了。那么如何分辨哪种是直接安装哪种是绿色安装程序呢?一般情况是这样的,我们在台式机上看到的Windows Mobile软件如果是可执行文件.exe结尾的能够在台式机上运行的一般都是直接安装程序,如果不行出现一个对话框,说不是有效的win32程序这个时候一般这个程序您就可以直接放到Windows Mobile中运行就行了。在Windows Mobile中找到您所拷进去的文件,直接点击系统自动开始运行。
运行程序会出现安装提示,确认后继续安装,出现主程序画面,直接使用。
为了方便使用,建一个程序快捷方式放入windows“开始”菜单程序里(同步时在PC端直接建了拖到程序文件夹或者在PPC端点菜单编辑复制,
然后去程序文件夹里点菜单编辑复制快捷方式,重命名),就可以直接点开始程序,运行程序。删除的话,直接把程序文件夹删除即可。
2、EXE格式
这种软件是最正规的软件,类似于电脑上的软件,跟大部分软件的安装方法近似。
1.通过ActiveSync联机
2.找到安装(.exe)文件,然后运行这个exe可执行文件。电脑就会提示你如何操作安装,然后会提示你按照手机的提示接着安装(基本上只要按“下一步”就OK了)。
3.安装的时候有一个询问框,问你是否要安装到默认的路径(默认路径是指主内存,一般安装在/Windows和/Program File文件夹中),如果你不想装到本来就很有限的RAM里,你可以选“否”,有些软件必须装在主内存,如一些系统管理软件,和一些输入法,在软件的说明中会告诉你,大部分软件都可以安装在存储卡中。
Android命令行启动应用方法
< activity android:name="Calculator"
android:theme="@android:style/Theme.Black">
< intent-filter>
< action android:name="android.intent.action.Mt-filter>
< /activity>
< /application>
< /manifest>
由此它的Android命令行启动程序方法为:
# am start -n com.example.android.helloactivity/
com.example.android.helloactivity.HelloActivity
Browser(浏览器)的Android命令行启动程序方法为:
# am start -n com.android.browser/com.android.browser.BrowserActivity
一般情况希望,一个Android应用对应一个工程。值得注意的是,有一些工程具有多个活动(activity),而有一些应用使用一个工程。例如:在Android界面中,Music和Video是两个应用,但是它们使用的都是packages/apps/Music这一个工程。而在这个工程的AndroidManifest.xml文件中,有包含了不同的活动(activity)。
其他的一些应用启动命令,如下所示:
calendar(日历)的启动方法为:
ab.exe用法 -回复
ab.exe用法-回复ab.exe是一个Apache HTTP服务器的性能测试工具,它可以用来模拟并发请求、测量服务器的响应性能以及检测服务器的负载能力。
在这篇文章中,我们将详细介绍ab.exe的用法,并一步一步回答有关它的一些常见问题。
第一步:下载和安装ab.exe要使用ab.exe,首先需要下载和安装Apache HTTP服务器。
在下载页面中,您可以选择适合您操作系统的版本。
一旦下载完成,您可以按照安装向导的指示,将Apache HTTP服务器安装到您的计算机上。
第二步:在命令行中使用ab.exe一旦安装完成,您可以在命令行中使用ab.exe来进行性能测试。
打开命令行窗口,输入"ab"并按Enter键,您将看到一些有关ab.exe的基本用法的说明。
接下来,我们将介绍一些常见的使用方式:1. 测试单个URL:如果您想测试单个URL的性能,可以使用以下命令:ab -n [请求次数] -c [并发请求数] [URL]其中,[请求次数]代表您想发送的请求数量,[并发请求数]代表同时发送的请求数量,[URL]是您要测试的URL地址。
2. 测试多个URL:如果您想测试多个URL的性能,可以创建一个包含URL 的文本文件,并使用以下命令:ab -n [请求次数] -c [并发请求数] -L [URL文件]其中,[请求次数]代表您想发送的请求数量,[并发请求数]代表同时发送的请求数量,[URL文件]是包含URL的文本文件名。
3. 指定请求方法:默认情况下,ab.exe使用GET请求方法。
如果您想使用其他请求方法,可以使用"-k"参数,如下所示:ab -n [请求次数] -c [并发请求数] -L -k [URL]其中,"-k"参数表示使用Keep-Alive连接。
4. 输出结果:默认情况下,ab.exe将在命令行窗口中输出结果。
如果您想将结果保存到文件中,可以使用"-g"参数,并指定要保存的文件名,如下所示:ab -n [请求次数] -c [并发请求数] -g [输出文件] [URL]第三步:解读ab.exe的输出结果当您运行ab.exe完成测试后,您将在命令行窗口中看到类似于以下的输出结果:Server Software: ApacheServer Hostname: localhostServer Port: 80Document Path: /Document Length: 127 bytesConcurrency Level: 1Time taken for tests: 0.132 secondsComplete requests: 5Failed requests: 0Total transferred: 860 bytesHTML transferred: 635 bytesRequests per second: 47.26 [#/sec] (mean)Time per request: 21.86 [ms] (mean)Time per request: 21.86 [ms] (mean, across all concurrent requests)Transfer rate: 6.38 [Kbytes/sec] receivedConnection Times (ms)min mean[+/-sd] median maxConnect: 0 0 0.0 0 0 Processing: 22 22 0.0 22 22Waiting: 22 22 0.0 22 22Total: 22 22 0.0 22 22Percentage of the requests served within a certain time (ms)50 2266 2275 2280 2290 2295 2298 2299 22100 22 (longest request)在输出结果中,您可以找到有关测试的各种统计信息,如并发请求数、请求时间、传输速率等。
java桌面程序制作可执行exe以及制作安装文件教程
java桌面程序弄成可安装执行程序1、将桌面程序编译为可执行文件.jar注:不同Eclipse版本或者MyEclipse,可能稍有差异1)通过导出Runnable JAR file 方式导出jar使用Eclipse的“Export”(导出)功能就可以了。
在应用上点击右键,选择“Export”。
接下来,选择导出类型为Runnable JAR file后,Next选择应用运行启动类(即写有main函数的类文件),以及导出的目标路径和JAR 文件名,可通过点击“Brows。
”按钮选择路径。
点击finish结束2)通过导出JAR file 方式导出jarA.通过配置文件(MANIFEST.MF)导出jar文件Manifest-Version:1.0//版本号Main-Class:com.lym.client.LoginFrame//启动类这个很重要Class-Path: .libs/xpp3_min-1.1.4c.jar libs/xstream-1.4.2.jar //程序中引用的外部jar文件(比较重要),不过在下一步制作exe文件时还是会打包进去的。
Create-Path:sjl//作者选择好了,点击finish就能生成可执行的jar文件了,查看是否能执行通过cmd命令进入命令行,然后使用命令java –jar D:\im.jar,然后回车看程序是否能运行。
B. 通过主类方式导出jar文件2、使用exe4j生成exe可执行文件(版本不同可能会有差异)注意:exe4j安装完成后可输入序列号(点击“Change License”),然后用户名、公司名可随意填写;运行exe4jx出现界面如下图所示点击Next接着选择类型:选择“Regular mode",可以使程序仍具有跨平台的特性。
选择”JAR in EXE“,可以把程序完全编译成exe文件,可以更好的保护你的程序不被反编译。
选择任何一种都可以达到我们的需求,选择后,NEXT。
怎样将java程序打成exe文件运行在无java环境的机器上-图文详解
怎样将java程序打成exe文件运行在无java环境的机器上对于作Java桌面应用来说,比较烦人的就是安装部署问题,客户端是否安装有jre、jre版本问题、jre去哪下载、如何用jre启动你的Java应用?不要说刚接触电脑的人,就算是比较熟悉电脑,如果没有接触过Java,面对一个Java应用,如何在Windows下启动它,估计都会折腾半天。
最好的方式莫过于带着JRE,让用户轻松点击就能运行。
带着JRE运行,JRE的大小应该是最让人头疼的,我默认安装的jre6大小达到80M,而程序只有200-300k左右,感觉非常不合理,分发与网络传输过程也会大受影响!因此针对自己程序精简jre非常必要,关于jre的精简问题请参考其他文章,本文在此不做说明。
针对windows平台,让用户一键式安装,双击使用,使用工具exe4j+Inno Setup,这两个工具都可以在网上找到,下面通过一个实例进行说明。
第一步:将自己的java程序打包成“可执行的jar包”,可以采用eclipse等IDE工具打包。
下面以eclipse为例进行说明:上面截图应该注意的是:第一步是要求你选择你的java程序的引导类,下面是输出路径,类文件的处理上我们选择第二种,即将该java程序所需的jar包一起打包进来,最后点击finish。
完成后最好双击一下导出的可执行jar包,确保可正确运行。
第二步:准备打包文件夹。
1.在任意路径下新建文件夹,文件夹的命名可以使用项目的名字,如此例的项目名takephoto。
将在第一步中生成的jar包复制进来。
2.将精简以后的jre文件包复制进来,如果尚不掌握精简方法,可以暂时采用安装的庞大jre,如下图:将上图的jre复制进去即可。
3.在takephoto文件夹下新建lib文件夹,将项目所需的jar包,如数据库驱动等复制进去。
4.可以在准备一个ico文件夹,存放一个或几个ico图标或图片。
经以上几步后,文件结构应该是:第三步:使用exe4j工具生成exe文件:直接下一步,这一步要求选择类型,我们选择第一个,这样可以保证程序仍具有跨平台的特性。
android应用程序开发-选择题填空题
选择题1.下列不是手机操作系统的是( D )。
A AndroidB Window MobileC Apple IPhone IOSD Windows Vista2.下列选项哪个不是 Activity 启动的方法 ( B )A startActivityB goToActivityC startActivityForResultD startActivityFromChild3.下列哪个不是 Activity 的生命周期方法之一(B )A onCreateB startActivityC onStartD onResume4.下列哪个可做 Android 数据存储( A )A SQliteB MySqlC OracleD DB25.下列哪个可做EditText编辑框的提示信息( D )A android:inputTypeB android:textC android:digitsD android:hint6.Math.ceil(99.1) 的结果是(B )ceil 向上取整A 99B 100C 99.1D 99.07.android 中下列属于Intent的作用的是(C)A 实现应用程序间的数据共享B 是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失C 可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带D 处理一个应用程序整体性的工作8.关于 res/raw 目录说法正确的是 AA 这里的文件是原封不动的存储到设备上不会转换为二进制的格式B 这里的文件是原封不动的存储到设备上会转换为二进制的格式C 这里的文件最终以二进制的格式存储到指定的包中D 这里的文件最终不会以二进制的格式存储到指定的包中9.Math.round(11.5)等于多少(). Math.round(-11.5)等于多少( C)A 11 ,-11B 11 ,-12C 12 ,-11D 12 ,-1210.我们都知道Hanlder是线程与Activity通信的桥梁,如果线程处理不当,你的机器就会变得越慢,那么线程销毁的方法是(A )A onDestroy()B onClear()C onFinish()D onStop()11.下列哪个属性是专用于相对布局的(D)A.android.orientation verticalB.android:stretchColumnsC.android:layout_alignParentRightD.android:layout_toRightOf12.定义LinearLayout垂直方向布局时设置的属性( D )A.android:layout_heightB.android:gravityC.android:layoutD. android:orientation vertical13.为了使android适应不同分辨率的机型,布局时字体单位应用( D )A.dpB.dip 像素C.pxD.sp14.下面属于android的动画分类的有( AB)A.TweenB.FrameC.DrawD.Animation Property Animation15.android 关于service生命周期的onCreate()和onStart()说法正确的是( AD )A.当第一次启动的时候先后调用onCreate()和onStart()方法B.当第一次启动的时候只会调用onCreate()方法C.如果service已经启动,将先后调用onCreate()和onStart()方法D.如果service已经启动,只会执行onStart()方法,不再执行onCreate()方法16.在android中使用Menu时可能需要重写的方法有 (AC)A、onCreateOptionsMenu() 三种菜单:选项菜单、上下文菜单、子菜单B、onCreateMenu()C、onOptionsItemSelected()D、onItemSelected()17.Intent传递数据时,下列的数据类型哪些可以被传递(ABCD)A.Serializable B、charsequence C、Parcelable D、Bundle18. java.io包中的( A )和( B )类主要用于对对象Object的读写。
将应用设置为系统级别的方法
将应用设置为系统级别的方法将应用设置为系统级别是指将应用程序的权限提升至系统级别,使其具有更高的操作权限和系统资源的访问权限。
这种设置可以实现一些特殊的功能需求,例如在系统启动时自动运行、访问系统级别的文件或配置信息等。
本文将介绍将应用设置为系统级别的方法。
一、使用AndroidManifest.xml文件AndroidManifest.xml文件是Android应用程序的配置文件,我们可以通过对该文件进行修改来实现将应用设置为系统级别。
具体步骤如下:1. 在AndroidManifest.xml文件中添加以下权限声明:```<uses-permissionandroid:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permissionandroid:name="android.permission.SYSTEM_ALERT_WINDOW" />```第一个权限声明`RECEIVE_BOOT_COMPLETED`是指在系统启动时接收一个广播,用于实现应用在系统启动时自动运行的功能;第二个权限声明`SYSTEM_ALERT_WINDOW`是指创建一个悬浮窗口,用于实现应用显示在其他应用上方的功能。
2. 在AndroidManifest.xml文件中添加以下标签声明:```<receiver android:name=".BootCompletedReceiver"><intent-filter><actionandroid:name="android.intent.action.BOOT_COMPLETED" /></intent-filter></receiver>```其中,`BootCompletedReceiver`是一个继承自`BroadcastReceiver`的类,用于接收系统启动完成的广播。
两种方法让Windows10也能运行Android应用
两种方法让Windows10也能运行Android应用2021 年微软正式推出了Windows 11 桌面操作系统,相比于旧版本,Windows 11 除了在系统界面上有着相当大的变化之外,更多的变化在于其加入了对Android 子系统的支持,从而将移动端最大的生态系统融入其中。
但微软对可以升级到 Windows 11 的设备硬件做出限制,这导致市面上绝大多数的可以支持 Windows 10 的设备无法升级到 Windows 11,也就无法体验到 Windows 11 带来的诸多新功能特性。
但经过一年时间的迭代,即便属于支持末期的Windows 10,在这几次年度功能更新后也获得了 Windows 11 才有的新特性,比如通过 WSLg 已经可以让 Windows 10 可以运行图形化的 Linux 应用,作为 Windows 11 独占的 WSA 在 Windows 10 上运行自然也变得不再遥远。
相比直接使用虚拟机或者模拟器在 Windows 10 上运行 Android 应用,通过WSA 运行Android 应用显得效率更高:依赖Windows 自身的虚拟化引擎,无需先启动虚拟机从而资源占用更低,对于Android 应用的系统架构无要求,最重要的是可以完全窗口化运行从而可以和当前的Windows 生态充分融合。
而目前就有两种方法让Windows 10 运行WSA,适用于不同的系统场景,如果你有在Windows 10 上运行 Android 应用需求不妨「按需索取」。
将 Windows 11 的 WSA 移植到 Windows 10:WSAPatch •优点:基于 WSA 原生打造,兼容性最好。
•缺点:仅支持 Windows 10 22H2 最新版,对系统版本有要求WSAPatch 顾名思义就是让 Windows 10 也能运行 WSA 的补丁,通过一系列该项目中提供了两个补丁文件,我们可以让Windows 10 也可以安装上 WSA。
JAR文件用exe4j软件生成可执行的exe文件
JAR文件用exe4j软件生成可执行exe文件
俞海鹏编写2017/12/12
启动exe4j
1.欢迎页
单击Next
2.选择项目类型,单击JAR in EXE mode
单击Next
3.应用程序信息
Short name of your application:(输入项目名)096 Output directory:(输出目录)E:\JAR
单击Next
4.可执行文件信息
单击Console application
Executable name:(输入可执行文件名)ASCII 单击Next
5.配置Java引用
(1)单击绿色十字
Entry Type 单击Archive
Archive:(用“…”按钮找到生成文件的源文件)E:\JAR\ASCII.jar 单击OK
(2)返回前页
单击Main class右侧的“…”按钮
(3)显示选择主类窗口
单击OK
(4)配置完成
单击Next
6配置JRE.
如图输入最小、最大版本号单击Next
7.单击Next
8.单击Next
9.单击Next
10.exe4j已经完成
单击Click Here to Start the Application 按钮,测试成功与否?
(1)成功执行了应用程序:
(2)测试具体数据:
完全正确,关闭应用程序,返回
(3)单击Save As 按钮,保存.exe4j 文件
单击“保存(S)”按钮,退出exe4j软件。
单击OK
单击Exit。
QT生成可执行的EXE程序
QT⽣成可执⾏的EXE程序Qt 官⽅开发环境使⽤的动态链接库⽅式,在发布⽣成的exe程序时,需要复制⼀⼤堆 dll,如果⾃⼰去复制dll,很可能丢三落四,导致exe在别的电脑⾥⽆法正常运⾏。
因此 Qt 官⽅开发环境⾥⾃带了⼀个⼯具:windeployqt.exe。
集成开发环境 QtCreator ⽬前⽣成图形界⾯程序 exe ⼤致可以分为两类:Qt Widgets Application 和 Qt Quick Application。
下⾯分别介绍这两类exe 的发布⽅式。
1、Qt Widgets Application可执⾏程序发布⽅式⾸先⽤ QtCreator 新建⼀个 Qt Widgets Application 项⽬,直接⽤默认的 QMainWindow 程序就可以了,项⽬名字假定是 001_Hello。
然后以 Release ⽅式编译⽣成 exe 程序:⽣成的程序运⾏正常之后,找到项⽬的⽣成⽬录,⽐如项⽬源码路径:E:\002_QT_TEST\001_Hello它的项⽬⽣成⽬录是E:\002_QT_TEST\build-001_Hello-Desktop_Qt_6_1_1_MinGW_64_bit-Release进⼊这个⽂件夹,在进⼊它的⼦⽂件夹 release ⾥⾯,找到 001_Hello.exe ,将这个001_Hello.exe 复制到⼀个新的单独的⽂件夹⾥⽤于发布,⽐如存到E:\002_QT_TEST\000run⽂件夹⾥⾯。
复制windeployqt.exe⽂件到E:\002_QT_TEST\000run⽂件夹⾥⾯。
windeployqt.exe的⽬录是E:\Qt\6.1.1\mingw81_64\bin然后从开始菜单打开 Qt 命令⾏,输⼊命令:cd /d E:\002_QT_TEST\000run然后使⽤ windeployqt ⼯具命令:windeployqt hellomw.exe然后可以在 D:\hellomw ⽂件夹⾥看到 windeployqt ⼯具⾃动复制的插件⽂件夹和 dll⽂件、qm⽂件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实现在安卓系统上完美运行EXE格式文件办法
需要东西:
1网上下载Bochs模拟器主程序(就是一个apk程序文件)
2配置文件(已经打包好在附件里)
3系统镜像
操作步骤
步骤1:安装模拟器主程序(这个就不用多说了,和普通安卓应用一样)
步骤2:将装有配置文件的SDL文件夹拷贝到机身内存根目录中(没有机身内存的手机请拷贝到SD卡中,不清楚拷贝到哪里的就用RE管理器拷贝到手机根目录显示sdcard的文件夹里)
步骤3:将系统镜像文件改名为c.img,拷贝到步骤2中的SDL文件夹(要用什么系统就拷贝相应的镜像)
步骤4:运行安装好的模拟器主程序,没有问题的话就会开机运行操作系统了
教程只是个初级傻瓜教程,要想实现模拟系统实现更多的功能(优化虚拟机性能、增加磁盘等)请翻阅XDA的帖子。
传送
门:h t t p: // /showthread.php?t= 1459153
想要自己制作磁盘镜像来安装自己所需操作系统的请参阅这个帖子(希望能有人试试win7之类的系
统):h t t p: // /showt hread.php?t=1465365
最后放出用的工具和镜像
模拟器主程序+配置文件(配置文件已装在SDL文件夹,直接将SDL文件夹拷贝到内存根目录就行):/file/c2bqgy19#
win98磁盘镜像:/file/dpy6g3eq#
winxp磁盘镜像:/file/c2bqgit0#
bochs的主页有一些linux和UNIX类的系统磁盘镜像,有需要的可以翻翻:
h t t p:///diskimages.html。