有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓将ADB添加到我的Java PC应用程序

我开发了一个Java应用程序。应用程序以编程方式连接到安卓设备,以将一些文件传输到安卓设备

在我的应用程序中,我添加了adb路径,以便它可以使用它连接到设备

我想知道是否可以将其打包到应用程序中?或者只是将adb复制到应用程序目录中?因为我想让谁下载这个应用程序,不需要下载adb或Android sdk就可以让应用程序工作

可能吗


共 (2) 个答案

  1. # 1 楼答案

    在做了一些研究之后,您可以将exe打包到jar文件中,但每次运行应用程序时都必须提取exeFollowing TofuBear's example here我能够将adb封装在jar文件中。您需要包括AdbWinApi。dll(或等效的linux库)

    import java.io.BufferedReader;
    import java.io.Closeable;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.URI;
    import java.net.URISyntaxException;
    import java.net.URL;
    import java.security.CodeSource;
    import java.security.ProtectionDomain;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipException;
    import java.util.zip.ZipFile;
    
    public class Sandbox
    {
        public static void main(final String[] args)
            throws URISyntaxException,
                   ZipException,
                   IOException
        {
            final URI uri;
            final URI exe;
    
            uri = getJarURI();
            // Extract the adb application
            exe = getFile(uri, "adb.exe");
            // Extract the AdbWinApi dll file.
            getFile(uri, "AdbWinApi.dll");
            System.out.println(exe);
        }
    
        private static URI getJarURI()
            throws URISyntaxException
        {
            final ProtectionDomain domain;
            final CodeSource       source;
            final URL              url;
            final URI              uri;
    
            domain = Sandbox.class.getProtectionDomain();
            source = domain.getCodeSource();
            url    = source.getLocation();
            uri    = url.toURI();
    
            return (uri);
        }    
    
        private static URI getFile(final URI    where,
                                   final String fileName)
            throws ZipException,
                   IOException
        {
            final File location;
            final URI  fileURI;
    
            location = new File(where);
    
            // not in a JAR, just return the path on disk
            if(location.isDirectory())
            {
                fileURI = URI.create(where.toString() + fileName);
            }
            else
            {
                final ZipFile zipFile;
    
                zipFile = new ZipFile(location);
    
                try
                {
                    fileURI = extract(zipFile, fileName);
                }
                finally
                {
                    zipFile.close();
                }
            }
    
            return (fileURI);
        }
    
        private static URI extract(final ZipFile zipFile,
                               final String  fileName)
            throws IOException
        {
            final File         tempFile;
            final ZipEntry     entry;
            final InputStream  zipStream;
            OutputStream       fileStream;
    
            //tempFile = File.createTempFile(fileName,     Long.toString(System.currentTimeMillis()));
            tempFile = new File(System.getProperty("java.io.tmpdir") + File.separator + fileName);
    
            tempFile.deleteOnExit();
            entry    = zipFile.getEntry(fileName);
    
            if(entry == null)
    
            {
                throw new FileNotFoundException("cannot find file: " + fileName + " in archive: " + zipFile.getName());
            }
    
            zipStream  = zipFile.getInputStream(entry);
            fileStream = null;
    
            try
            {
                final byte[] buf;
                int          i;
    
                fileStream = new FileOutputStream(tempFile);
                buf        = new byte[1024];
                i          = 0;
    
                while((i = zipStream.read(buf)) != -1)
                {
                    fileStream.write(buf, 0, i);
                }
            }
            finally
            {
                close(zipStream);
                close(fileStream);
            }
    
            return (tempFile.toURI());
        }
    
        private static void close(final Closeable stream)
        {
            if(stream != null)
            {
                try
                {
                    stream.close();
                }
                catch(final IOException ex)
                {
                    ex.printStackTrace();
                }
            }
        }
    }
    

    我必须更改ToBubear示例中的文件创建,这样exe的文件名就不会更改。它仍在临时文件夹中创建,将在退出时删除。我留下了原始代码作为注释

    编辑:似乎我被它的技术可能性吸引住了,我忘记了它的法律后果。一直以来,{a2}禁止重新分发sdk的任何部分。其中包括亚洲开发银行

  2. # 2 楼答案

    使用Java本机chimpchat连接到设备应该更容易