安卓端编译生成j2me的jar软件,可以在真机运行
j2me吧
全部回复
仅看楼主
level 1
一共需要三个jar包。
eclipse-ecj-4.6.1.jar是用来编译java代码生成class文件的,proguard-3.4.jar是用来预审核class文件的,能不能在真机上运行就要看有没有预审核了,j2me_api.jar是编译j2me需要的类库文件,前两个直接在mvnrepository仓库就能下载到,注意,一定要用我给出的版本才能正常使用,不然出了问题我也不知道怎么处理,j2me的api类库可能有点难找,后面我在给出怎么把它弄到手的方法。
2023年03月22日 14点03分 1
level 1
就是这个网址,可以下载jar类库。
2023年03月22日 14点03分 2
level 1
一共只需要不到一百行代码,两个class文件,也可以只用一个,你随意。
2023年03月22日 14点03分 3
level 1
这是代码入口类文件,注释都写上了,看注释就行。
package com.jar.Compiler;
import java.util.*;
public class Main
{
public static void main(String[] args)
{
编译器 编译=new 编译器();
编译.编译java(
"/sdcard/A/java",//这个是java源代码目录
"/sdcard/A/class",//这个是class输出目录
"/sdcard/A/java/Midlet.java",//这个是代码入口类文件,调用ECJ编译一定要指定入口类文件
"/sdcard/0-AIDE工程/J2ME生成器/JAR/j2me_api.jar");//j2me的api类库文件
编译.预审核class(
"/sdcard/A/class",//这个是上面编译出来的没有经过预审核的class文件目录
"/sdcard/A/class2");//这个是经过预审核后的class输出目录
}
}
2023年03月22日 14点03分 4
level 1
我把编译和预审核写到同一个类文件里了,反正也没多少代码。需要再次说明的就是一定要用eclipse-ecj-4.6.1.jar和proguard-3.4.jar这两个版本的类库,因为我用的就是这个,别的版本不一定能用这些代码,反正我是怕了,改个类库连使用的代码都变了,直接给我一堆报错[冷][冷][冷],这里放不下所有代码了,代码放在下一楼。
2023年03月22日 14点03分 5
level 1
import java.io.*;
import proguard.*;
public class 编译器
{
public boolean 编译java(String 输入java目录, String 输出class目录, String 入口类绝对路径, String 类库jar路径)
{
boolean 是否成功=true;
try
{
File file = new File(输出class目录);
file.mkdirs();
File[] listOfFiles = file.listFiles();
for(File fil : listOfFiles)
{
if(fil.isFile())
{//清空文件夹内的文件
fil.delete();
}
}
ByteArrayOutputStream 编译信息=new ByteArrayOutputStream(); //编译信息
ByteArrayOutputStream 错误信息=new ByteArrayOutputStream(); //错误信息
org.eclipse.jdt.internal.compiler.batch.Main 编译=new org.eclipse.jdt.internal.compiler.batch.Main(new PrintWriter(编译信息), new PrintWriter(错误信息), false);
String[] 命令数组 = {
"-verbose",
"-bootclasspath", 类库jar路径,
"-classpath", 输入java目录,
"-1.4",
"-target", "1.4",
"-proc:none",
"-d", 输出class目录,
入口类绝对路径
};
是否成功 = 编译.compile(命令数组);
if(是否成功)
{
//获得编译信息字符串
String 正常编译=编译信息.toString();
System.out.println(正常编译);
}
else
{
//如果失败请打印此信息
//获得错误信息字符串
String 编译错误=错误信息.toString();
System.out.println("ECJ编译java出错:"+编译错误);
}
}
catch(Exception 异常)
{
return false;
}
return 是否成功;
}
public boolean 预审核class(String 输入class目录, String 输出class目录)
{
String[] 命令数组 = new String[]
{
"-dontobfuscate", // 禁用混淆
"-dontwarn",// 禁用警告
"-keepattributes *",
"-keep class **", // 保留所有类
"-keepclassmembers class ** {*;} ", // 保留所有类成员
"-injars " + 输入class目录, // 输入class目录
"-outjars " + 输出class目录// 输出class目录
};
Configuration configuration = new Configuration();
try
{
ConfigurationParser configurationParser = new ConfigurationParser(命令数组);
configurationParser.parse(configuration);
new ProGuard(configuration).execute();
configurationParser.close();
}
catch(Exception e)
{
System.out.println("预审核出错:" + e.toString());
return false;
}
return true;
}
}
2023年03月22日 14点03分 6
level 1
一共就这么点代码,很简单,预审核后的class文件和其他资源文件一起用jar软件的方式压缩起来,其实就是一个zip文件改成jar的后缀名,接下来就可以在真机或者模拟器上运行了,嫌麻烦又懂编程的人可以写个压缩jar的代码出来,我懒得搞了,至于刚才说的j2me的api类库,其实这个吧里就有,找找看。实在找不到再来找我,因为发文件很麻烦[委屈][委屈]
2023年03月22日 14点03分 7
level 1
或者戳这个人@大坏蛋呀呀 来捧个场
2023年03月22日 14点03分 8
level 1
吧里置顶帖就是他,很容易找到
2023年03月22日 14点03分 9
level 1
看看能不能发链接,能用的话直接从里面扣出三个jar文件合并成一个就行
2023年03月22日 14点03分 10
level 1
2023年03月22日 14点03分 11
level 14
厉害了
2023年03月25日 04点03分 12
呀,大佬真的还在啊[乖][乖][乖][乖]
2023年03月27日 00点03分
https://github.com/tengge1/j2me-tutorial/ 大佬,请问能不能想办法把j2me端的jar软件改成可以被调用的jar库?因为这个工程给出的工具是真的很小,编译和预审核的jar加起来才500kb,比我发的这个小太多了[泪][泪][泪]
2023年03月27日 00点03分
@第二个昵称 好久不搞这玩意儿了…
2024年05月02日 12点05分
@大坏蛋呀呀 我也是,早就忘到脑后了……
2024年05月03日 01点05分
level 1
[阴险][阴险][阴险][阴险]
2025年07月31日 18点07分 14
level 3
请问楼主,j2me在安卓系统上只能通过模拟器内的按键玩吗,能否改为触屏玩
2025年12月29日 06点12分 15
是否支持触屏要看游戏支不支持,游戏本身不支持触屏的话只能用虚拟按键玩。
2026年01月08日 13点01分
@第二个昵称 安卓系统上,通过触屏可以按下屏幕上的虚拟按键,这也是那个apk自己的功能是吗
2026年01月08日 14点01分
@箭雨花落地 对,相当于在安卓手机上模拟一个支持j2me的老手机,再用这个老手机运行j2me游戏。
2026年01月11日 23点01分
现在的手机ai软件很多,下载个 kimi 或者 豆包 ,问这些ai就行了,回复的比我快多了。
2026年01月11日 23点01分
1