相关疑难解决方法(0)

如何构建一个APK和应用程序动态加载的独立库

简短的总结是:我如何构建一个APK和单独的库(我指的是某些形式的类集合(理想情况下也是资源),例如JAR,AAR或DEX文件),但不包括那些库中的库. APK; 相反,应用程序在运行时加载它们?

详情

所以我的主要问题是如何构建这样的应用程序(例如Gradle配置).如何指定哪些类进入哪些JAR或DEX文件?我是否为每个想要最终使用的DEX文件创建了一个Android Studio模块?

一个密切相关的问题是Java代码应该如何加载外部库并在运行时访问它们的类.对于后者,我希望通过类加载器从dex文件访问app类时显示的方法可行.

我试着在说明https://developer.android.com/studio/projects/android-library.html,但是这是建立一个APK 包括依赖库.

我也尝试过Multidex(https://developer.android.com/studio/build/multidex.html),但这似乎并没有让开发人员控制哪些类进入哪个DEX文件,此外,将它们打包成一个APK.AFAICT无法在运行时控制这些DEX文件的加载.

背景

这里有" XY问题 " 的可能性,所以我最好解释一下背景.

我正在为客户构建一个应用程序.它不会通过应用程序商店分发,因此它无法访问正常的更新机制.相反,客户希望应用程序能够通过下载自身的新组件来更新自己,以替换旧组件,而无需手动加载新的APK.这里的主要动机是非技术用户的更新必须容易.如果应用程序可以控制更新过程,它可以使其流畅并引导用户.

此外,该应用程序将用于互联网访问稀缺和昂贵的领域,因此客户希望能够以较小的块(例如2MB)发布应用程序更新,而不是强迫用户重新下载整个应用程序以接收小更新.

如果重要的话,我应该提到的要求的一个方面是,在运行时加载的库应该存在于microSD卡上.这也有助于在没有互联网访问的情况下分发更新.

该应用程序的当前状态是大约50%写入:即,已发布了几个早期版本,但现在需要修改(重组)应用程序以满足上述要求以及其他要求.

android dynamic-class-loaders mobile-application android-gradle-plugin

31
推荐指数
1
解决办法
2946
查看次数

以编程方式安装来自/ system/app的具有INSTALL_PACKAGES权限的应用程序

我正在尝试以编程方式安装应用程序而无需用户交互,我收到此错误

 SecurityException: Neither user 10057 nor current process has android.permission.INSTALL_PACKAGES
Run Code Online (Sandbox Code Playgroud)

我的安装程序位于root系统上的/ system/app中,选中"安装非市场应用程序",安装程序具有权限

<uses-permission android:name="android.permission.INSTALL_PACKAGES"/>
Run Code Online (Sandbox Code Playgroud)

这是我的通话功能

 private void puk(Context context) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException{

    String fileName = PAKAGE_FILE_NAME ;
    String dir_type = Environment.DIRECTORY_DOWNLOADS;

    File dir= Environment.getExternalStoragePublicDirectory(dir_type);
    java.io.File file = new java.io.File(dir ,fileName);
    Uri packageUri = Uri.fromFile(file);

    PackageManager pm = context.getPackageManager();

    Class<? extends PackageManager> o = pm.getClass();
    Method[] allMethods=o.getMethods();

    for (Method m : allMethods) {
        if (m.getName().equals("installPackage")) { 
            Log.e(TAG, "installing the app.." );
            m.invoke(pm,new Object[] { packageUri, null, 1, "com.mic.zapp"});
            break;
        } …
Run Code Online (Sandbox Code Playgroud)

permissions installation android permission-denied

13
推荐指数
1
解决办法
8138
查看次数

如何在文件下载完成后自动安装APK(托管在私有)

我是android的新手,我过去两天一直在网上搜索这个.我发现以下链接,但我没有得到如何以及在何处实现此代码以在完全下载后开始自动安装apk文件以及如何在安装后删除下载的apk文件.请指导我正确的方法帮助我.

如何以编程方式安装apk文件

在另一个Android应用程序中调用APK的活动

Android以编程方式安装apk

以编程方式在android上安装APK

http://www.anddev.org/viewtopic.php?p=23928

编辑:

我在清单文件中写了这段代码:

<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
    <!-- <uses-permission android:name="android.permission.INSTALL_PACKAGES"/> -->
    <application android:icon="@drawable/biz_logo"
        android:permission="android.permission.WRITE_CONTACTS">
        <activity android:name="com.biz.mlm.Main">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="content" />
                <data android:scheme="file" />
                <data android:mimeType="application/vnd.android.package-archive" />
            </intent-filter>
        </activity>
Run Code Online (Sandbox Code Playgroud)

installation android download

8
推荐指数
1
解决办法
5万
查看次数

以编程方式安装Android apk作为测试框架的一部分

我正在尝试以编程方式安装apk,但我没有太多运气.我正在建立一个针对物理设备的自动化测试框架,我想让测试设备在运行测试之前从构建服务器中检索最新的apk.虽然我知道没有一般方法在未经用户同意的情况下实际安装apk,但我很好奇是否在开发人员拥有apk和设备的情况下可能有一些方法可用.

我过去尝试过的方法(apk已下载到pathName/apkFilename):

String command = "adb install " + pathName + apkFilename;
Runtime.getRuntime().exec(command);
Run Code Online (Sandbox Code Playgroud)

和:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(pathName + apkFilename)), "application/vnd.android.package-archive");
getActivity().startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

虽然我还没有能够获得第一种工作方法,但第二次尝试创建了一个系统对话框,要求用户确认安装(几乎在那里,但不完全).由于它是一个系统对话框,遗憾的是,我无法使用Robotium进行确认.

android automated-tests robotium

7
推荐指数
1
解决办法
7743
查看次数

Android安装apk使用busybox命令行

我想在Android手机中默默安装apk,我发现这个解决方案 (链接),是如何使用busybox命令行安装apk,但当我的磁带busybox安装路径/到/ apkfile,它不起作用,有人可以帮助我请举一些例子.

command-line android install busybox apk

6
推荐指数
1
解决办法
2万
查看次数

如何在 Android 设备上静默安装应用程序?

所以,我在这里找到了 #CommonsWare 的答案,关于允许应用程序像 Google Play 一样以静默方式将应用程序安装到手机上。在那里,提到应用程序应该使用固件签名证书等进行签名,或者将应用程序添加到系统文件夹。我需要知道的是,如果我将应用程序添加到system\app\或system\priv-app\,那么是否可以将应用程序静默安装到Android设备上?或者我需要利用 INSTALL_PACKAGES 权限吗?如果是这样,怎么办?

我问这个问题是因为我只有 10 个声誉,所以我无法在那里发表评论。

我在这里找到了 #inazaruk 的答案,但它很复杂,而且提供的链接已失效。

android rom silentpush

6
推荐指数
1
解决办法
3909
查看次数

无需 root 设备即可静默安装 apk

是否可以在设备不 root 的情况下静默安装 apk 文件?Stackoverflow 中有关此主题的大多数帖子都有些过时,并且尚不清楚较新版本的 Android (Kit Kat) 是否支持此功能。

android

5
推荐指数
1
解决办法
1563
查看次数

不使用Activity或Dialog安装.apk

我的应用程序下载.apk并使用以下活动安装它: Android:以编程方式安装.apk

但是,它会导致出现对话框并需要用户操作.所以我的问题是:

有没有办法以编程方式而不需要用户交互?

根据评论,我必须提供更多信息:

  • 是的,有安全隐患.我只想知道是否有可能.
  • 实际上,我确实拥有自己的手机.

android android-install-apk

4
推荐指数
1
解决办法
2647
查看次数

如何在Android上静默安装应用程序?未经用户许可?

如何在Android上静默安装应用程序?未经用户许可?

我已阅读此 链接 ,但我没有得到关于这个问题的正确答案的想法,这个问题与PackageInstaller有关???

另外,我看看这个问题,我已经测试过,但仍需要用户的许可才能完成安装!

我不打算建立病毒,我只是为了安全性的研究问题

permissions android install silent-installer android-install-apk

4
推荐指数
1
解决办法
3750
查看次数

像Google Play一样无声地安装Android应用程序

我需要安装apk文件而不需要Google PlayStore之类的任何用户提示.我知道这个问题已被多次询问,但我仍未找到任何可解答的答案.我只是从我的SD卡安装应用程序,我尝试了以下方式,

public void getInstall(Context context) {


        File file = new File(Environment.getExternalStorageDirectory()
                + "/Demo.apk");
        Uri mPackageURI = Uri.fromFile(file);

        ApplicationManager appMgr = null;

        try {
            appMgr = new ApplicationManager(context);
        } catch (SecurityException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (NoSuchMethodException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        int installFlags = 1;
        PackageManager pm = context.getPackageManager();

        Method method = null;

        try {
            method = pm.getClass().getMethod(
                    "installPackage",
                    new Class[] { android.net.Uri.class,
                            android.content.pm.IPackageInstallObserver.class,
                            Integer.TYPE, String.class });
        } catch (SecurityException …
Run Code Online (Sandbox Code Playgroud)

android android-install-apk device-admin

-3
推荐指数
1
解决办法
5988
查看次数