首页 > 解决方案 > 将 .java 转换为 .smali

问题描述

如标题中所述,我正在尝试将 java 文件转换为 .smali 文件,因此这些是我尝试从 Android Studio 终端启动的命令:

javac HelloWorld.java

dx --dex --output=classes.dex HelloWorld.class

baksmali classes.dex

但是当我启动第二个命令时,我得到了这个错误:

bash:dx:找不到命令

另外,我尝试将我的文件直接编译为 smali,方法是:Build/compile to smali在 Android Studio 上,这是我得到的错误:

错误:内部错误:(java.lang.ClassNotFoundException) com.google.wireless.android.sdk.stats.IntellijIndexingStats$Index java.lang.ClassNotFoundException: com.google.wireless.android.sdk.stats.IntellijIndexingStats$Index> at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:424) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) 在 com.intellij.util .indexing.counters.IndexCounters.(IndexCounters.java:34) 在 com.intellij.util.indexing.impl.MapReduceIndex.(MapReduceIndex.java:86) 在 org.jetbrains.jps.backwardRefs.index.CompilerReferenceIndex$CompilerMapReduceIndex.( CompilerReferenceIndex.java:214) 在 org.jetbrains.jps.backwardRefs.index.CompilerReferenceIndex.(CompilerReferenceIndex.java:73) 在 org.jetbrains.jps.backwardRefs。JavaCompilerBackwardReferenceIndex.(JavaCompilerBackwardReferenceIndex.java:12) at org.jetbrains.jps.backwardRefs.JavaBackwardReferenceIndexWriter.initialize(JavaBackwardReferenceIndexWriter.java:74) at org.jetbrains.jps.backwardRefs.JavaBackwardReferenceIndexBuilder.buildStarted(JavaBackwardReferenceIndexBuilder.java:40) at org. jetbrains.jps.incremental.IncProjectBuilder.runBuild(IncProjectBuilder.java:358) at org.jetbrains.jps.incremental.IncProjectBuilder.build(IncProjectBuilder.java:178) at org.jetbrains.jps.cmdline.BuildRunner.runBuild(BuildRunner. java:138) 在 org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:302) 在 org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:135) 在 org.jetbrains.jps.cmdline .BuildMain$MyMessageHandler.lambda$channelRead0$0(BuildMain.java:229) 在 org.jetbrains.jps.service.impl.SharedThreadPoolImpl.lambda$executeOnPooledThread$0(SharedThreadPoolImpl.java:42) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 在 java.util.concurrent.FutureTask.run (FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread。运行(Thread.java:745)在 java.lang.Thread.run(Thread.java:745) 处运行(ThreadPoolExecutor.java:617)在 java.lang.Thread.run(Thread.java:745) 处运行(ThreadPoolExecutor.java:617)

关于如何完成这项工作的任何想法?或任何其他将.java 转换为.smali 的工具?

标签: javaandroidsmali

解决方案


这对我有用:

我只需要找到位于~/Android/Sdk/build-tools/$versionLinux 上的命令 dx,但首先确保android-sdk已安装(通常位于~/android/sdkLinux 上)然后使用 dx 运行

./dx --dex --output=classes.dex path_to_source_file.class如果你在同一个目录中dx


推荐阅读