现在的位置: 首页 > 综合 > 正文

Android4.2 静默安装应用

2018年04月30日 ⁄ 综合 ⁄ 共 2884字 ⁄ 字号 评论关闭

1.先解决怎么调用一些隐藏的API: 找到SDK的路径下的platforms里面有对应的很多Android-10文件夹(由于我是在4.2下测试的我用的是Android-17)打开后里面有个Android.jar包

   然后将IPackageInstallObserver.class    IPackageInstallObserver$Stub.class    PackageManage.class 拷贝到(Android.jar用WinRAR打开)android/      content/pm/目录下保存即可,记住拷贝之前自己要先备份一下Android.jar,等程序写完后记得把Android.jar改回去.

2.然后在Eclipse中建立项目编写源码,记得API要选中自己修改的那个Android.jar包对应的API啊.

       import android.content.pm.IPackageInstallObserver;   //手工导入类

        public void Install(String fileName,String packageName)    //安装方法第一个参数是apk所在的路径, 第二个是包名
   {  
      
    Uri uri = Uri.fromFile(new File(fileName, "MoireAnim.apk"));  
       int installFlags = 0;  
       PackageManager pm = getPackageManager();  
       try {  
           PackageInfo pi = pm.getPackageInfo(packageName,PackageManager.GET_UNINSTALLED_PACKAGES);//  
           if(pi != null) {  
               installFlags |= PackageManager.INSTALL_REPLACE_EXISTING;  
           }  
       } catch (NameNotFoundException e) {  
       }  
       Toast.makeText(MainActivity.this, "安装开始", Toast.LENGTH_SHORT).show();  
       PackageInstallObserver observer = new PackageInstallObserver();  
       pm.installPackage(uri, observer, installFlags, packageName);
   }  
 

       //用于显示结果  
   class PackageInstallObserver extends IPackageInstallObserver.Stub {  
       public void packageInstalled(String packageName, int returnCode) {//如果returnCode == 1就为成功  
        
if(returnCode == 1){
        
Toast.makeText(getApplicationContext(), "安装成功", 0) .show() ;
        
}
       }  
   }; 

     @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//执行安装操作
String fileName = Environment.getExternalStorageDirectory().getAbsolutePath(); //当然,自己必须前uc.apk放到这个文件夹里
Install(fileName, "com.example.moireanim") ;
}

3.在AndroidManifest.xml下增加以下权限,加进去后回出现很多错误,直接点击Project选项Clean.. 清除以下缓存就没事了

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.example.demo"
    android:versionCode="1"

    android:versionName="1.0" 

                 android:sharedUserId="android.uid.system"         >>系统级权限

         >

    <uses-permission android:name="android.permission.INSTALL_LOCATION_PROVIDER" />
    <uses-permission android:name="android.permission.INSTALL_PACKAGES"/>  
    <uses-permission android:name="android.permission.DELETE_PACKAGES"/>  
    <uses-permission android:name="android.permission.CLEAR_APP_USER_DATA"/>  
    <uses-permission android:name="android.permission.CLEAR_APP_CACHE"/>  
    <uses-permission android:name="android.permission.INTERNET" />
    

D:\android-sdk-windows\platforms

 

4:在运行程序会出现INSTALL_FAILED_SHARED_USER_INCOMPATIBLE 的错误信息.出现是因为我们的程序没有系统级的签名,签名过程:

      将platform.x509.pem platform.pk8 SignApk.jar 和刚刚编译出来的Demo.apk放在同一目录下面,然后打开CMD命令进入到改目录下执行:

java -jar signapk.jar platform.x509.pem  platform.pk8 Demo.apk  Demo_signed.apk即可,Demo_sigend.apk就是签名之后的文件了,直接用adb install Demo_signed.apk运行就行了。

IPackageInstallObserver.class    IPackageInstallObserver$Stub.class
   PackageManage.class 三个class和signapk.jar platform.x509.pem  platform.pk8这几个签名文件在这下载即可:

http://download.csdn.net/detail/xl2567893/8491253

          

抱歉!评论已关闭.