简短的总结是:我如何构建一个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
我正在尝试以编程方式安装应用程序而无需用户交互,我收到此错误
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) 我是android的新手,我过去两天一直在网上搜索这个.我发现以下链接,但我没有得到如何以及在何处实现此代码以在完全下载后开始自动安装apk文件以及如何在安装后删除下载的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) 我正在尝试以编程方式安装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手机中默默安装apk,我发现这个解决方案 (链接),是如何使用busybox命令行安装apk,但当我的磁带busybox安装路径/到/ apkfile,它不起作用,有人可以帮助我请举一些例子.
是否可以在设备不 root 的情况下静默安装 apk 文件?Stackoverflow 中有关此主题的大多数帖子都有些过时,并且尚不清楚较新版本的 Android (Kit Kat) 是否支持此功能。
我的应用程序下载.apk并使用以下活动安装它: Android:以编程方式安装.apk
但是,它会导致出现对话框并需要用户操作.所以我的问题是:
有没有办法以编程方式而不需要用户交互?
根据评论,我必须提供更多信息:
如何在Android上静默安装应用程序?未经用户许可?
我已阅读此 链接 ,但我没有得到关于这个问题的正确答案的想法,这个问题与PackageInstaller有关???
另外,我看看这个问题,我已经测试过,但仍需要用户的许可才能完成安装!
我不打算建立病毒,我只是为了安全性的研究问题
permissions android install silent-installer android-install-apk
我需要安装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 ×10
install ×2
installation ×2
permissions ×2
apk ×1
busybox ×1
command-line ×1
device-admin ×1
download ×1
robotium ×1
rom ×1
silentpush ×1