精华内容
下载资源
问答
  • apk-info-action-源码

    2021-05-30 12:35:33
    Apk 信息操作 这个 GitHub Actions 获取 Android apk 文件的信息。 用法 指定 apk 文件到apk-path输入apk-path ,例如app/build/outputs/...- name : Get apk path id : apk-path run : | path=$(find **/build/ou
  • Android代码-apk-parser

    2019-08-06 04:33:42
    Get apk-parser Usage 1. Apk info 2. Get binary xml and manifest xml file 3. Get dex classes 4. Get Apk Sign info 5. Locales Open Issue Features Retrieve apk meta info, such as title, icon, package...
  • apk-technicaltest-源码

    2021-04-19 17:45:45
    APK技术测试 该测试的目的是使用Nginx以对接方式实现满足以下条件的Flask服务的ReverseProxy: -如果将请求发送到/ api /,则应将请求发送到Flask服务。...单击GET到http://本地主机将带您进入http://本地主机/ api。
  • apk-parse脚手架 apk-parse脚手架链接: 插件下载地址 <dependency> <groupId>net.dongliu</groupId> <artifactId>apk-parser</artifactId> <version>2.6.10</version>...

    apk-parse脚手架

    apk-parse脚手架链接: 插件下载地址

    
    <dependency>
        <groupId>net.dongliu</groupId>
        <artifactId>apk-parser</artifactId>
        <version>2.6.10</version>
    </dependency>
    
    

    废话不多说直接上代码 这是最早的写法

    public R apkParser(@RequestParam("file") MultipartFile multipartFile){
            // 获取文件名
            String fileName = multipartFile.getOriginalFilename();
            // 获取文件后缀
            String prefix=fileName.substring(fileName.lastIndexOf("."));
            if (!prefix.equals(".apk")){
                return R.error("请上传.apk文件");
            }
            Map<String, Object> map = new HashMap<>();
            try {
                File excelFile = new File(fileName);
                FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), excelFile);
                ApkFile apkFile = new ApkFile(excelFile);
                ApkMeta apkMeta = apkFile.getApkMeta();
                map.put("appName", apkMeta.getLabel());
                map.put("appId", apkMeta.getPackageName());
                map.put("versionCode", apkMeta.getVersionCode());
                map.put("versionName", apkMeta.getVersionName());
                map.put("sice",(double) (excelFile.length() * 100 / 1024 / 1024) / 100 + " MB");
            } catch (Exception e) {
                e.printStackTrace();
            }
            return R.ok(map);
    
        }
    

    封装工具类

    import com.dd.plist.NSDictionary;
    import com.dd.plist.NSString;
    import com.dd.plist.PropertyListParser;
    import net.dongliu.apk.parser.ApkFile;
    import net.dongliu.apk.parser.bean.ApkMeta;
    
    import java.io.*;
    import java.net.URL;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipInputStream;
    
    public class ApkAndIpaUtil {
    
        /**
         * 解析Apk文件
         *
         * @param file Apk的文件路径
         * @return
         */
        public static Map<String, Object> parseApk(File file) {
            Map<String, Object> map = new HashMap();
            try {
                // File file = new File(url);
                ApkFile apkFile = new ApkFile(file);
                ApkMeta apkMeta = apkFile.getApkMeta();
                map.put("appName", apkMeta.getLabel());
                map.put("appId", apkMeta.getPackageName());
                map.put("versionCode", apkMeta.getVersionCode());
                map.put("versionName", apkMeta.getVersionName());
                map.put("packetSize", (double) (file.length() * 100 / 1024 / 1024) / 100 + " MB");
            } catch (Exception e) {
                e.printStackTrace();
            }
            return map;
        }
    
    
        /**
         * 解析ipa文件
         *
         * @param file ipa的文件路径
         * @return
         */
        public static Map<String, Object> parseIpa(File file) {
            Map<String, Object> map = new HashMap();
            try {
                // File file = new File(url);
                InputStream is = new FileInputStream(file);
                ZipInputStream zipIns = new ZipInputStream(is);
                ZipEntry ze;
                InputStream infoIs = null;
                while ((ze = zipIns.getNextEntry()) != null) {
                    if (!ze.isDirectory()) {
                        String name = ze.getName();
                        if (null != name && name.toLowerCase().contains(".app/info.plist")) {
                            ByteArrayOutputStream _copy = new ByteArrayOutputStream();
                            int chunk = 0;
                            byte[] data = new byte[1024];
                            while (-1 != (chunk = zipIns.read(data))) {
                                _copy.write(data, 0, chunk);
                            }
                            infoIs = new ByteArrayInputStream(_copy.toByteArray());
                            break;
                        }
                    }
                }
    
                NSDictionary rootDict = (NSDictionary) PropertyListParser.parse(infoIs);
    
                //如果想要查看有哪些key ,可以把下面注释放开
    //            for (String keyName : rootDict.allKeys()) {
    //                System.out.println(keyName + ":" + rootDict.get(keyName).toString());
    //            }
    
                // 应用包名CFBundleDisplayNameCFBundleIdentifier
                NSString parameters = (NSString) rootDict.get("CFBundleIdentifier");
                map.put("appId", parameters.toString());
                // 应用版本名
                parameters = (NSString) rootDict.objectForKey("CFBundleShortVersionString");
                map.put("versionName", parameters.toString());
                // 应用版本号
                parameters = (NSString) rootDict.get("CFBundleVersion");
                map.put("versionCode", parameters.toString());
                parameters = (NSString) rootDict.get("CFBundleDisplayName");
                map.put("appName", parameters.toString());
                map.put("packetSize", (double) (file.length() * 100 / 1024 / 1024) / 100 + " MB");
                infoIs.close();
                is.close();
                zipIns.close();
    
            } catch (Exception e) {
                System.out.println("ipa包解析异常!");
            }
            return map;
        }
    
        /**
         * String url = "https://img.cheguakao.com/prodimg/20200927/__UNI__99584F9_0106120442.ipa";
         * 网络资源下载到项目
         *
         * @param url
         * @return
         */
        public static File openStream(String url) {
            //对本地文件命名
            String fileName = url.substring(url.lastIndexOf("."), url.length());
            File file = null;
            URL urlfile;
            InputStream inStream = null;
            OutputStream os = null;
            try {
                file = File.createTempFile("net_url", fileName);
                //下载
                urlfile = new URL(url);
                inStream = urlfile.openStream();
                os = new FileOutputStream(file);
    
                int bytesRead = 0;
                byte[] buffer = new byte[8192];
                while ((bytesRead = inStream.read(buffer, 0, 8192)) != -1) {
                    os.write(buffer, 0, bytesRead);
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (null != os) {
                        os.close();
                    }
                    if (null != inStream) {
                        inStream.close();
                    }
    
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            //可返回File  对象  这里只返回文件的路径
            return file;
        }
    
    }
    
    

    调用信息

    public R apkParser(String url) {
            // 获取文件名
            String fileName = url.substring(url.lastIndexOf("."), url.length());
            // 获取文件后缀
            String prefix = fileName.substring(fileName.lastIndexOf("."));
            File file = ApkAndIpaUtil.openStream(url);
            Map<String, Object> map = null;
            if (prefix.equals(".apk")) {
                map = ApkAndIpaUtil.parseApk(file);
            } else if (prefix.equals(".ipa")) {
                map = ApkAndIpaUtil.parseIpa(file);
            } else {
                return R.error("请上传.apk /.ipa文件");
            }
            // 判断是否存在,存在删除
            if (file.exists()) {
                file.delete();
            }
            return R.ok(map);
        }
    

    我们使用的是oss 在pc直接上传到oss之后返回的url去做解析

    展开全文
  • 您可以手动获取它们(例如,在Debian中使用apt-get ),也可以运行scripts/download.py Python 3脚本,该脚本将自动下载所需的工具。 另外,在Linux上,您可能需要对libsecret密码存储后端的可选支持。 为了启用它...
  • Xenotix-APK-Reverser Xenotix APK Reverser 是一个开源 Android 应用程序包 (APK) 反编译器和反汇编器,由 dex2jar、baksmali 和 jd-core 提供支持,在 Apache 许可... Ubuntu:sudo apt-get install python-wxgtk2.8
  • apkinfo.get('/absolute/path/to/the/file.apk', function(error, info) { if (error) { return console.log(error); } console.log(info); //e.g. /* { appName: 'My app', packageName: '...
  • apk-parser地址: https://github.com/hsiafan/apk-parser 1.获取版本号等信息: try (ApkFile apkFile = new ApkFile(new File(filePath))) { ApkMeta apkMeta = apkFile.... System.out.println(apkMeta.get...

    apk-parser地址:
    https://github.com/hsiafan/apk-parser

    1.获取版本号等信息:

    try (ApkFile apkFile = new ApkFile(new File(filePath))) {
        ApkMeta apkMeta = apkFile.getApkMeta();
        System.out.println(apkMeta.getLabel());
        System.out.println(apkMeta.getPackageName());
        System.out.println(apkMeta.getVersionCode());
        for (UseFeature feature : apkMeta.getUsesFeatures()) {
            System.out.println(feature.getName());
        }
    }
    

    2.若获取application节点下的自定义变量 TING_CHANNEL的值
    在这里插入图片描述

    我这里为了简单,使用正则匹配出TING_CHANNEL,示例代码如下:

    String manifestXml = apkFile.getManifestXml();
    System.out.println(manifestXml);
    String text = MacherUtil.matcher("<meta-data android:name=\"TING_CHANNEL\" android:value=\".+\"", manifestXml);
    text = MacherUtil.matcher("value=\".+\"", text).replaceFirst("value=\"", "").replaceAll("\"", "");
    System.out.println(text);
    

    打印:_91

    完!

    展开全文
  • Android中使用apk-parser解析apk

    千次阅读 2019-09-29 14:32:03
    Apk Parser是一个优秀的解码二进制文件与获取apk各种信息的开源库,具备众多实用的特性: 获取apk各种元数据信息,比如应用名、图标、包名、版本号等 解析二进制XML文件并将其转换为文本格式 从dex文件获取类信息,...

    一、前言

    Apk Parser是一个优秀的解码二进制文件与获取apk各种信息的开源库,具备众多实用的特性:

    • 获取apk各种元数据信息,比如应用名、图标、包名、版本号等
    • 解析二进制XML文件并将其转换为文本格式
    • 从dex文件获取类信息,比如:类名、修饰符等
    • 获取apk签名信息,包括v1、v2签名

    不过, Apk Parser无论是该开源库的作者或者是网上有的教程,都只是说java se怎么使用这个开源库,并没有android使用该依赖库的教程,所以,这或许是全网独一份android调用 Apk Parser来解析apk的教程哦

    二、Apk Parser需要修改的部分

    1、获取apk-parser依赖库
    • 通过gradle来获取
      从开源库作者提供的maven central repo下载链接:
    <dependency>
        <groupId>net.dongliu</groupId>
        <artifactId>apk-parser</artifactId>
        <version>2.6.9</version>
    </dependency>
    

    可以总结出,在Android Studio使用gradle构建系统下载该依赖库的配置: implementation 'net.dongliu:apk-parser:2.6.9'

    -或者 直接从github上把整个项目下载下来,集成到你的项目里去
    因为apk-parser还需要依赖到以下两个库,需要加进去:

       implementation 'org.bouncycastle:bcprov-jdk15on:1.58'
       implementation 'org.bouncycastle:bcpkix-jdk15on:1.58'
    
    2、把整个项目从github上download下来之后,把/src/main/resources/目录下的两个.ini文件拷贝到assets目录下

    在这里插入图片描述

    3、修改Apk-parser对这两份.ini的读取方式,全局检索,可以搜索到是在net.dongliu.apk.parser.utils.ResourceLoader这个类中,将原代码:
     private static BufferedReader toReader(String path) {
            return new BufferedReader(new InputStreamReader(
                    ResourceLoader.class.getResourceAsStream(path)));
        }
    

    修改为:

       private static BufferedReader toReader(String path) {
            InputStream inputStream = null;
            try {
                Context context = ActivityLifecycle.curActivityRef.get();
                if(context != null){
                    inputStream = context.getAssets().open(path);
                }
    
            } catch (IOException e) {
                e.printStackTrace();
            }
            return new BufferedReader(new InputStreamReader(inputStream));
        }
    

    经过上述步骤的配置,android项目就能正常跑了

    三、使用教程

    1、获取apk元数据
    ApkFile apkFile = new ApkFile(apkInfo.getApkPath());
    apkFile.setPreferredLocale(Locale.SIMPLIFIED_CHINESE);
    ApkMeta apkMeta = apkFile.getApkMeta();
    apkInfo.setLabel(apkMeta.getLabel());
    apkInfo.setPackageName(apkMeta.getPackageName());
    apkInfo.setVersionName(apkMeta.getVersionName());
    apkInfo.setVersionCode(String.valueOf(apkMeta.getVersionCode()));
    apkInfo.setTargetSdkVersion(apkMeta.getTargetSdkVersion());
    apkInfo.setMinSdkVersion(apkMeta.getMinSdkVersion());
    
    2、解析并获取AndroidManifest.xml与其他xml资源文件的内容
    try (ApkFile apkFile = new ApkFile(new File(filePath))) {
        String manifestXml = apkFile.getManifestXml();
        String xml = apkFile.transBinaryXml("res/menu/main.xml");
    }
    
    3、获取dex的类信息
    DexClass[] dexClasses = apkFile.getDexClasses();
    if(dexClasses != null && dexClasses.length > 0) {
        for(DexClass dexClass : dexClasses){
            if(dexClass.getClassType().equals("Lcom/ss/android/common/lib/EventUtils;")){
                    apkInfo.setHasTodayTopClass(true);
            }else if(dexClass.getClassType().equals("Lcom/qq/gdt/action/GDTAction;")){
                    apkInfo.setHasGdtClass(true);
            }else if(dexClass.getClassType().equals("Lcom/alibaba/sdk/android/push/noonesdk/PushServiceFactory;")){
                   apkInfo.setHasAlipushClass(true);
           }else if(dexClass.getClassType().equals("Lcom/tendcloud/tenddata/TCAgent;")){
                  apkInfo.setHasTalkingDataClass(true);
           }
      }
    }
    
    4、获取apk签名信息
    List<ApkSigner> apkSingers = apkFile.getApkSingers();
         if(apkSingers != null && apkSingers.size()>0) {
              for (ApkSigner apkSigner : apkSingers) {
                  List<CertificateMeta> certificateMetas = apkSigner.getCertificateMetas();
                  for (CertificateMeta certificateMeta : certificateMetas) {
                         Log.i("min77", certificateMeta.getCertMd5());
                         if (!TextUtils.isEmpty(certificateMeta.getCertMd5())) {
                              String desc = signatures.optString(certificateMeta.getCertMd5());
                              if(!TextUtils.isEmpty(desc)){
                                   apkInfo.setSignatureMd5(certificateMeta.getCertMd5()+"("+desc+")");
                                }else {
                                   apkInfo.setSignatureMd5(certificateMeta.getCertMd5());
                                }
    
                           }
                      }
                 }
         }
    
    5、设置首选的Locales

    Apk可能针对不同的地区和语言具有不同的信息(标题,图标等),或者我们可以将其称为Locale。 如果未设置语言环境,则使用默认的“ en_US”语言环境(Locale.US)。 您可以通过以下方式设置一个首选语言环境

    try (ApkFile apkFile = new ApkFile(new File(filePath))) {
        apkFile.setPreferredLocale(Locale.SIMPLIFIED_CHINESE);
        ApkMeta apkMeta = apkFile.getApkMeta();
    }
    
    展开全文
  • 自动生成自签名HTTPS服务器,可以快速安装ipa,apk,基于开发 支持 OS X 的Ubuntu CentOS的7 其他平台未测试 需要 海湾合作委员会 0.2.9版本以上需要浏览器支持ES6 安装 $ npm install -g ipapk-server 国内可能...
  • Amdroid-APK-签名-证书提取

    千次阅读 2014-06-30 18:02:15
    Apk 包中的META-INF目录下,有一个CERT.RSA,它是一个PKCS7 格式的文件。 Linux command line

    Apk 包中的META-INF目录下,有一个CERT.RSA,它是一个PKCS7 格式的文件。

    Linux command line

    openssl pkcs7 -inform DER -in CERT.RSA -noout -print_certs –text

    输出内容

    Certificate:
        Data:
            Version: 3 (0x2)
            Serial Number: 1281971851 (0x4c69568b)
            Signature Algorithm: sha1WithRSAEncryption
            Issuer: CN=Michael Liu
            Validity
                Not Before: Aug 16 15:17:31 2010 GMT
                Not After : Aug 10 15:17:31 2035 GMT
            Subject: CN=Michael Liu
            Subject Public Key Info:
                Public Key Algorithm: rsaEncryption
                RSA Public Key: (1024 bit)
                    Modulus (1024 bit):
                        00:8d:04:84:a2:1e:c6:56:39:f2:cd:a6:f0:48:a5:
                        f7:5e:71:8f:e1:a8:af:a7:dc:66:92:a2:b9:cf:da:
                        0f:32:42:ce:83:fe:bc:e1:4f:0a:fd:d9:a8:b3:73:
                        f4:ff:97:15:17:87:d6:d0:3c:da:01:fc:11:40:7d:
                        04:da:31:cc:cd:da:d0:e7:7b:e3:c1:84:30:9f:21:
                        93:95:20:48:b1:2d:24:02:d2:b9:3c:87:0d:fa:b8:
                        e1:b1:45:f4:8d:90:0a:3b:9d:d8:8a:9a:96:d1:51:
                        23:0e:8e:c4:09:68:7d:95:be:c6:42:e9:54:a1:5c:
                        5d:3f:25:d8:5c:c3:42:73:21
                    Exponent: 65537 (0x10001)
        Signature Algorithm: sha1WithRSAEncryption
            78:3c:6b:ef:71:70:55:68:28:80:4d:f8:b5:cd:83:a9:01:21:
            2a:c1:e4:96:ad:bc:5f:67:0c:cd:c3:34:51:6d:63:90:a9:f9:
            d5:5e:c7:ef:34:43:86:7d:68:e1:99:87:92:86:34:91:6d:67:
            6d:b2:22:e9:5e:28:aa:e8:05:52:04:6e:4e:d4:7f:0f:b0:d6:
            28:f5:2b:11:38:d5:15:cb:e3:e4:c9:99:23:c1:84:4f:ce:69:
            e9:b1:59:7b:8e:30:01:1c:e1:92:ee:0d:54:61:29:f5:8e:9e:
            42:72:26:2b:aa:c7:af:d9:c9:d1:85:95:8e:4c:8d:5c:77:c5:
            ce:4e
    

    Java

    import sun.security.pkcs.PKCS7;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.security.cert.CertificateException;
    import java.security.cert.X509Certificate;
    
    public class Test {
        public static void main(String[] args) throws CertificateException, IOException {
            FileInputStream fis = new FileInputStream("/Users/wangchen/Desktop/CERT.RSA");
            PKCS7 pkcs7 = new PKCS7(fis);
            X509Certificate publicKey = pkcs7.getCertificates()[0];
    
            System.out.println("issuer1:" + publicKey.getIssuerDN());
            System.out.println("subject2:" + publicKey.getSubjectDN());
            System.out.println(publicKey.getPublicKey());
        }
    }
    

    openssl-devC API

    #include <openssl/bio.h>
    #include <openssl/x509.h>
    #include <openssl/pkcs7.h>
    #include <string>
    #include <iostream>
    using namespace std;
    string to_string(X509_NAME* name)
    {
        BIO* mem = BIO_new(BIO_s_mem());
        if (mem == NULL)
            return NULL;
    
        if (X509_NAME_print_ex(mem, name, 0, XN_FLAG_RFC2253) < 0)         return NULL;     string str;     char buf[128];     while((BIO_gets(mem, &buf[0], sizeof(buf))) > 0)
        {
            str.append(buf);
        }
        BIO_free(mem);
        return str;
    }
    
    int main()
    {
    	FILE* fp;
        if (!(fp = fopen("CERT.RSA", "rb")))
        {
            fprintf(stderr, "Error reading input pkcs7 file\n" );
            exit(1);
        }
    	/* todo: 这里可能有内存漏洞,有空查一下文档 */
        PKCS7* pkcs7 = d2i_PKCS7_fp(fp, NULL);
        X509* cert = sk_X509_pop(pkcs7->d.sign->cert);
        string subject = to_string(X509_get_subject_name(cert));
        string issuer = to_string(X509_get_issuer_name(cert));
        char *modulus = BN_bn2dec(X509_get_pubkey(cert)->pkey.rsa->n);
        cout << subject << endl;
        OPENSSL_free(modulus);
        fclose(fp);
        return 0;
    }
    

    Python

    我没在Python 2.x 的OpenSSL 库中找到从PKCS7中提取证书的方法……



    Windows

    下载openssl-windows版本https://code.google.com/p/openssl-for-windows/downloads/list

    执行以下命令

    openssl pkcs7 -inform DER -in CERT.RSA -noout -print_certs –text


    展开全文
  • 安卓逆向-修改APK-战斗直接胜利

    千次阅读 热门讨论 2018-04-15 21:35:55
    前言 很久没有总结过关于逆向编程的文章了,来写一篇实践分享给大家。主要来说说如何通过逆向修改APK来实现游戏进入后直接获得胜利领取奖励。为了学习发展就不分享游戏名称了。
  • 最近在研究Android动态加载APK技术,偶有小得,共享一下,欢迎交流。 首先是Android 动态加载已安装的APK 截图: 被调用工程TestB: 其工程已添加了字符串、颜色和图片资源,这里不写了,读者可自行添加。 ...
  • 最近在研究Android动态加载APK技术,偶有小得,共享一下,欢迎交流。 首先是Android 动态加载已安装的APK 被调用工程TestB: 其工程已添加了字符串、颜色和图片资源,这里不写了,读者可自行添加。 public ...
  • 在线apk编译器 一个网络应用程序,可从公共Github存储库...sudo apt-get install python3-pip sudo pip3 install -r requirements.txt sudo sh android_sdk_tools_installer.sh 如何在Linux上运行它(不使用Docker)?
  • Linux: 软件包管理工具 apt-get 命令(Debian/Ubuntu)

    万次阅读 多人点赞 2018-05-27 21:58:24
    apt-get 命令适用于 deb 包管理式的 Linux 操作系统(例如: Ubuntu),主要用于自动从互联网软件仓库中搜索、下载、安装、升级、卸载软件或操作系统。
  • apt-get: not found

    2021-03-23 16:07:46
    运行 apt-get update,提示apt-get: ...apk add apt-get 提示make: not found 1.apt-get update && apt-get install make 提示pecl : not found 2.apt-get update && apt-get install pecl 依此类推
  • Dockerfile执行命令报错"The command ‘/bin/sh -c apt-get install -y git’ returned a non-zero code: 100"解决 Dockerfile文件中部分编辑如下内容: # 安装用于获取机器码的命令 RUN apt-get clean && ...
  • Linux中yum和apt-get

    千次阅读 2016-09-06 21:05:25
    概述一般来说著名的linux系统基本上分两大类: 1.RedHat系列:Redhat、Centos、Fedora等 2.Debian系列:Debian、Ubuntu等 ...2 包管理工具 yum Debian系列-包管理工具 apt-get1 常见的安装包格式 deb包,安装deb包的
  • Alpine版只有50多MB, 比...apk add --update yourPackageName 如: apk add --update vim https://www.jianshu.com/p/a64bb371b4ec https://jingyan.baidu.com/article/cbcede0763a34b02f40b4da1.html ...
  • 利用Dockerfile修改容器中的apt-get

    千次阅读 2017-12-24 20:47:02
    在Ubuntu中利用apt-get安装软件时,由于网络问题,我们经常将apt-get源改为国内的源镜像,在构建docker容器时,安装软件怎么改变将apt-get源改为国内镜像呢? 只需要在执行安装命令前修改源即可 #apt-get源 使用163...
  • Linux 系统中利用 apt-get 管理软件的安装目录和安装路径 apt-get 下载软件存放路径: /var/cache/apt/archives lib 文件路径: /usr/lib 可执行文件路径: /usr/bin 配置文件路径: /etc 安装完成软件默认路径: /...
  • RUN apt-get update 【问题】网络问题导致某些包获取不到,卡在下面这个Get:18一晚上也没有反应。没有任何提示或报错,也没有显示在等待报头 Step 6/21 : RUN apt-get -o Acquire::ForceIPv4=true update ---&...
  • apt 和 apt-get的区别(建议使用apt)

    万次阅读 多人点赞 2019-01-23 22:09:43
    Ubuntu 16.04 发布时,一个引人注目的新特性便是 apt 命令的引入。...随着 apt install package 命令的使用频率和普遍性逐步超过 apt-get install package,越来越多的其它 Linux 发行版也开始遵循 Ub...
  • yum和apt-get常用命令

    2019-06-22 17:46:08
    序言: 本篇将讨论Centos和Ubuntu在日常开发中软件管理常见命令,包括: 1.yum / rpm安装卸载常用命令和参数 2.apt-get / dpkg 安装卸载常用命令和参数 Centos中yum/rpm常用命令:
  • apk_parse, use python parse APK, get package name, file md5, apk icon....
  • Android资源访问机制--getResource()

    千次阅读 2018-03-06 11:29:15
    在开发当中需要引用程序资源,如工程之...(1)将framework/framework-res.apk和应用资源apk装载为Resources对象。 (2)获取Resources对象 获取Resources对象有两种方式,第一种通过Context,第二种通过PackageM...
  • 最近在学习docker时,发现使用ubuntu构建镜像时,如果有apt-get install命令,老是出现以下错误:The command ‘/bin/sh -c apt-get install -y gedit’ returned a non-zzero code: 100 查了一下,发现很多人都说是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 163,601
精华内容 65,440
关键字:

apk-get