Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何以编程方式从Android应用程序生成apk文件?_Java_Android_Apk_Adb - Fatal编程技术网

Java 如何以编程方式从Android应用程序生成apk文件?

Java 如何以编程方式从Android应用程序生成apk文件?,java,android,apk,adb,Java,Android,Apk,Adb,这是一个奇怪的问题。我想知道有没有办法从android应用程序生成apk。让我来解释一下-一个运行cmd命令的android应用程序,可以为另一个应用程序生成apk。有什么可能的办法吗 我已经读到,这可以通过使用Java中的ant来实现。我想知道这在运行的android应用程序上是可能的 谢谢。我认为那是不可能的 因为Android本身不包含编译器。嗯,我想如果你真的想这么做,你可以让服务器生成apk文件,让你的应用程序与服务器连接 希望对您有所帮助:。您可以使用ANT-Jars ANT.jar

这是一个奇怪的问题。我想知道有没有办法从android应用程序生成apk。让我来解释一下-一个运行cmd命令的android应用程序,可以为另一个应用程序生成apk。有什么可能的办法吗

我已经读到,这可以通过使用Java中的ant来实现。我想知道这在运行的android应用程序上是可能的


谢谢。

我认为那是不可能的

因为Android本身不包含编译器。嗯,我想如果你真的想这么做,你可以让服务器生成apk文件,让你的应用程序与服务器连接

希望对您有所帮助:。

您可以使用ANT-Jars ANT.jar和ANT-launcher.jar 在这种情况下,应完全指定build.xml的路径,并通过以下方式从java类调用它:

public class AntTest {
public static void main(String[] args) {
String build = "D:/xampp/htdocs/aud/TempProject/build.xml";
generateApkThroughAnt(build);
}
/*
 * Generate APK through ANT API Method
*/
public static void generateApkThroughAnt(String buildPath) {
File antBuildFile = new File(buildPath);
Project p = new Project();
p.setUserProperty("ant.file", antBuildFile.getAbsolutePath());
DefaultLogger consoleLogger = new DefaultLogger();
consoleLogger.setErrorPrintStream(System.err);
consoleLogger.setOutputPrintStream(System.out);
consoleLogger.setMessageOutputLevel(Project.MSG_INFO);
p.addBuildListener(consoleLogger);
BuildException ex = null;
try {
    p.fireBuildStarted();
    p.init();
    ProjectHelper helper = ProjectHelper.getProjectHelper();
    p.addReference("ant.projectHelper", helper);
    helper.parse(p, antBuildFile);
    p.executeTarget("clean");
    p.executeTarget("release");
  } catch (BuildException e) {
    ex = e;
  } finally {
    p.fireBuildFinished(ex);
  }
}
}
要创建build.xml文件,请转到Eclipse=>Your Project=>Right click=>Export=>General=>Ant Buildfiles,然后需要运行:

android update project --name <project_name> --target <target_ID> --path <path_to_your_project>

也许这是可能的,但您可以通过反向工程方法来实现,所以在获得apk文件的源代码后,使用Android IDE编译它。 apk解码的分步反向工程Strp方法:

步骤1:

创建一个新文件夹,并将.apk文件放入其中,以便解码。现在将这个.apk文件的扩展名重命名为.zip,例如:从filename.apk重命名为filename.zip并保存它。现在您可以看到classes.dex文件等。在这个阶段,您可以看到可绘制的文件,但不能看到xml和java文件,所以继续

步骤2:

现在在同一个文件夹或新文件夹中解压缩此zip apk文件。现在从这个链接下载dex2jar并将其解压缩到同一个文件夹或新文件夹中。现在打开命令提示符并将目录更改为该文件夹或新文件夹。然后编写dex2jar classes.dex并按enter键。现在,您将在同一文件夹中获得classes.dex.dex2jar文件。然后从下载java反编译器,现在双击JDGUI并单击打开文件。然后从该文件夹中打开classes.dex.dex2jar文件。现在您获得类文件并保存所有这些类文件,单击文件,然后单击按src名称在JDGUI中保存所有源。在这个阶段,您可以获得java源代码,但是xml文件仍然无法读取,所以继续

步骤3:

现在打开另一个新文件夹并放置这些文件

放置要解码的.apk文件

下载,两者都可以在同一位置下载并放在同一文件夹中

并不是所有的apk文件都需要framework-res.apk文件

打开命令窗口

导航到APKtool的根目录并键入以下命令:APKtool if framework-res.apk

apktool d fname.apk fname表示要解码的文件名

现在,您在该文件夹中获得了一个文件文件夹,现在您还可以轻松地读取xml文件

步骤4:

这不是任何步骤,只是将两个文件夹的内容都复制到一个文件夹中


现在享受源代码……

脚本可以帮助您。制作一个简单的脚本,运行所有android命令,从编译、打包、创建密钥存储、使用密钥存储签名到发布模式

Android已经提供了所有可以从命令行运行的东西。只需将它们以脚本的形式合并,就可以生成.apk文件


你可以编写简单的PHP脚本或ant脚本。

如果你想在Android设备上构建Android应用程序,请参阅:所以你想要的是可能的,但很难。是的,我想创建类似的东西。这是可能的……你的答案无效。ok@NavdeepSinghBedi我编辑了我的答案,这是可能的。但我认为在这种情况下,逆向工程是一种很好的方法。但是apk不会由应用程序生成,这就是问题所在。嗨,你能这样做吗?你能指导我吗?@Hossein你可以从这个方法得到生成的代码,xml和drawables是一样的,但是Java文件是从apk生成的,与原始文件不同,因此你不能运行代码,如果上述过程对您来说很困难,那么您可以找到一些在线工具,这些工具会要求apk,然后他们会将apk转换为代码,并给您一个zip。@Hossien这里是一个链接,您可以使用它来反编译apkandroid@NavdeepSinghBedi我们可以通过ant和gradle构建apk文件,但是可以通过cmd。在生成.apk之前,您必须使用android update project更新您的项目。@Navdroid您找到这个问题的解决方案了吗?我也陷入了类似的境地。我想制作一个android应用程序,它可以通过膨胀简单数据生成另一个android应用程序。没有找到任何解决方案真正放弃了这个想法。。也许ANT-Jars可以工作…这是最有希望的…祝你好运…一旦你找到解决方案,请在这里发布。