CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
查看: 8930|回复: 9

android 静默安装问题

[复制链接]
发表于 2015-9-29 09:22:10 | 显示全部楼层 |阅读模式
本帖最后由 xiaolonghun1 于 2015-9-30 16:41 编辑

我通过配置相对应的权限和进行系统加密,下载到android a20的android 系统里面,但是就是在执行这条指令的时候老是执行不成功。
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INSTALL_PACKAGES" />
然后也进行了相应的私有签名和系统签名。
java -jar signapk.jar platform.x509.pem platform.pk8 NxecoII.apk NxecoII_20150929-1.apk


LD_LIBRARY_PATH=/vendor/lib:/system/lib pm install -r /NxecoII.apk
问题:在终端里面是直接可以进行执行的,但是到了使用代码来执行这条语句的时候,就出现了报错。
不知道是什么原因导致的。尝试了好多变了都还是不可以。
也通过chmod 777把所要安装的.apk文件进行了相应的权限改变。


对apk签名安装,升级的apk也要签名

签名方法:
1)在Eclipse中导出无签名的应用文件
   在工程中:右键->Android Tools -> Export Unsigned Application Package导出应用
2)找出系统签名密钥
   系统密钥为:platform.pk8和platform.x509.pem
   路径: build\target\product\security
3)找出系统签名工具
   工具为:signApk.jar
   路径:/out/host/linux-x86/framework/ signApk.jar
4)开始签名
  将第2、3、4步找到的无签名应用、platform.pk8、platform.x509.pem和signApk.jar放到同一文件夹下如F:\sign。
  打开 dos 操作界面,定们到F:\sign,输入命令:
  java -jar signapk.jar platform.x509.pem platform.pk8 a.apk b.apk
(a.apk 为未签名应用 b.apk 为签名之后应用)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

 楼主| 发表于 2015-9-30 15:49:57 | 显示全部楼层
本帖最后由 xiaolonghun1 于 2015-9-30 15:52 编辑

eclipse 在android tools 直接导出未被签名的.apk文件就,可以了,不用再进行自己的私有签名。
但是报了如下错误了,不知道是什么烟瘾
09-30 15:05:28.281: D/AndroidRuntime(27971): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
09-30 15:05:28.281: D/AndroidRuntime(27971): CheckJNI is OFF
09-30 15:05:28.341: D/dalvikvm(27971): Trying to load lib libjavacore.so 0x0
09-30 15:05:28.361: D/dalvikvm(27971): Added shared lib libjavacore.so 0x0
09-30 15:05:28.381: D/dalvikvm(27971): Trying to load lib libnativehelper.so 0x0
09-30 15:05:28.381: D/dalvikvm(27971): Added shared lib libnativehelper.so 0x0
09-30 15:05:28.461: W/dalvikvm(27971): Exception Ljava/lang/NullPointerException; thrown while initializing Ljava/lang/System;
09-30 15:05:28.461: W/dalvikvm(27971): Exception Ljava/lang/ExceptionInInitializerError; thrown while initializing Ljava/lang/ClassLoader$SystemClassLoader;
09-30 15:05:28.461: W/dalvikvm(27971): WARNING: system class loader is NULL (setting main ctxt)
09-30 15:05:28.461: W/dalvikvm(27971): Warning: tracked references remain post-initialization
09-30 15:05:28.461: W/dalvikvm(27971): MAIN reference table (0xb8cb0390) dump:
09-30 15:05:28.461: W/dalvikvm(27971):   Last 1 entries (of 1):
09-30 15:05:28.471: E/dalvikvm(27971): Class lookup Ljava/lang/Daemons; attempted with exception pending
09-30 15:05:28.471: W/dalvikvm(27971): Pending exception is:
09-30 15:05:28.471: I/dalvikvm(27971): java.lang.ExceptionInInitializerError:
09-30 15:05:28.471: I/dalvikvm(27971):         at java.lang.ClassLoader.getSystemClassLoader(ClassLoader.java:125)
09-30 15:05:28.471: I/dalvikvm(27971):         at dalvik.system.NativeStart.main(Native Method)
09-30 15:05:28.471: I/dalvikvm(27971): Caused by:
09-30 15:05:28.471: I/dalvikvm(27971): java.lang.ExceptionInInitializerError:
09-30 15:05:28.471: I/dalvikvm(27971):         at java.lang.ClassLoader.createSystemClassLoader(ClassLoader.java:100)
09-30 15:05:28.471: I/dalvikvm(27971):         at java.lang.ClassLoader.access$000(ClassLoader.java:65)
09-30 15:05:28.471: I/dalvikvm(27971):         at java.lang.ClassLoader$SystemClassLoader.<clinit>(ClassLoader.java:81)
09-30 15:05:28.471: I/dalvikvm(27971):         at java.lang.ClassLoader.getSystemClassLoader(ClassLoader.java:125)
09-30 15:05:28.481: I/dalvikvm(27971):         at dalvik.system.NativeStart.main(Native Method)
09-30 15:05:28.481: I/dalvikvm(27971): Caused by:
09-30 15:05:28.481: I/dalvikvm(27971): java.lang.NullPointerException: value == null
09-30 15:05:28.481: I/dalvikvm(27971):         at java.util.Hashtable.put(Hashtable.java:367)
09-30 15:05:28.481: I/dalvikvm(27971):         at java.lang.System.initSystemProperties(System.java:286)
09-30 15:05:28.481: I/dalvikvm(27971):         at java.lang.System.getProperties(System.java:260)
09-30 15:05:28.481: I/dalvikvm(27971):         at java.lang.System.getProperty(System.java:425)
09-30 15:05:28.481: I/dalvikvm(27971):         at java.lang.System.getProperty(System.java:406)
09-30 15:05:28.481: I/dalvikvm(27971):         at java.lang.System.<clinit>(System.java:90)
09-30 15:05:28.481: I/dalvikvm(27971):         at java.lang.ClassLoader.createSystemClassLoader(ClassLoader.java:100)
09-30 15:05:28.481: I/dalvikvm(27971):         at java.lang.ClassLoader.access$000(ClassLoader.java:65)
09-30 15:05:28.481: I/dalvikvm(27971):         at java.lang.ClassLoader$SystemClassLoader.<clinit>(ClassLoader.java:81)
09-30 15:05:28.481: I/dalvikvm(27971):         at java.lang.ClassLoader.getSystemClassLoader(ClassLoader.java:125)
09-30 15:05:28.491: I/dalvikvm(27971):         at dalvik.system.NativeStart.main(Native Method)
09-30 15:05:28.491: I/dalvikvm(27971): DALVIK THREADS:
09-30 15:05:28.491: I/dalvikvm(27971): (mutexes: tll=0 tsl=0 tscl=0 ghl=0)
09-30 15:05:28.491: I/dalvikvm(27971): "main" prio=5 tid=1 RUNNABLE
09-30 15:05:28.491: I/dalvikvm(27971):   | group="main" sCount=0 dsCount=0 obj=0xa65579a0 self=0xb8cafd38
09-30 15:05:28.491: I/dalvikvm(27971):   | sysTid=27971 nice=0 sched=0/0 cgrp=apps handle=-1225030692
09-30 15:05:28.491: I/dalvikvm(27971):   | state=R schedstat=( 0 0 0 ) utm=13 stm=10 core=0
09-30 15:05:28.491: I/dalvikvm(27971):   at dalvik.system.NativeStart.main(Native Method)
09-30 15:05:28.491: E/dalvikvm(27971): VM aborting
09-30 15:05:28.501: A/libc(27971): Fatal signal 11 (SIGSEGV) at 0xdeadd00d (code=1), thread 27971 (app_process)
09-30 15:05:28.601: I/DEBUG(1187): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
09-30 15:05:28.601: I/DEBUG(1187): Build fingerprint: 'softwinners/sugar_cubieboard2/sugar-cubieboard2:4.2.2/JDQ39/20150901:eng/test-keys'
09-30 15:05:28.601: I/DEBUG(1187): Revision: '0'
09-30 15:05:28.601: I/DEBUG(1187): pid: 27971, tid: 27971, name: app_process  >>> app_process <<<
09-30 15:05:28.601: I/DEBUG(1187): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadd00d

变颜色的那行是执行了那个pm install    -r    xx.apk之后报的错误,具体是什么错误还不是很了解。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-7 10:56:36 | 显示全部楼层
本帖最后由 xiaolonghun1 于 2015-10-7 11:00 编辑

如果要将apk安装在system分区下还要在mantifest中加入系统权限

你在 mantifest 里加入下面一句话:
android:sharedUserId="android.uid.system"


<mantifest

    ...

    android:sharedUserId="android.uid.system" >

我在android Mainifest 里面添加了,然后相关的系统签名也设置了,不知道为什么还是不可以。

还是报上面之前的那个错误

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-7 16:25:55 | 显示全部楼层
是那一部分安装的代码有点问题,我重新替换了另外的安装的代码就可以了。
但是就是不知道为什么只能通过别的app来安装你说要安装的app,也就是是说安装不能够自身的app。
不然就在pm install -r xxx.apk 的时候,就把之前的app覆盖掉了。之后还有一句am start -n 包名称/activity名称的命令行语句还需要使用到之前的代码来进行执行。

不过我之前好像有看过可以安装别的app,也可以用来自身app的更新,但是现在只能够通过app来别的app来实现app的更新。

可能还需要再研究研究,看是不是哪边没有做到位的。
回复 支持 反对

使用道具 举报

发表于 2015-10-7 16:50:26 | 显示全部楼层
1、你说,你重新替换了另外的安装的代码就可以了,是替换了哪些代码呢?

2、之后还有一句am start -n 包名称/activity名称的命令行语句还需要使用到之前的代码来进行执行,是什么意思?

3、现在是用一个app来更新另一个app对吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-8 10:49:02 | 显示全部楼层
本帖最后由 xiaolonghun1 于 2015-10-8 10:55 编辑

        /**
     * install slient
     *
     * @param context
     * @param filePath
     * @return 0 means normal, 1 means file not exist, 2 means other exception
     * error
     */
    public static int installSlient(Context context, String filePath)
    {
File file = new File(filePath);
if (filePath == null || filePath.length() == 0 || (file = new File(filePath)) == null || file.length() <= 0 || !file.exists()
  || !file.isFile())
{
     return 1;
}
System.out.println("installSlient filePath = " + filePath);
String[] args = { "pm", "install", "-r", filePath };
ProcessBuilder processBuilder = new ProcessBuilder(args);
System.out.println("installSlient 1");
Process process = null;
BufferedReader successResult = null;
BufferedReader errorResult = null;
StringBuilder successMsg = new StringBuilder();
StringBuilder errorMsg = new StringBuilder();
int result;
try
{
     process = processBuilder.start();
     System.out.println("installSlient 2");
     successResult = new BufferedReader(new InputStreamReader(process.getInputStream()));
     errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream()));
     String s;
     while ((s = successResult.readLine()) != null)
     {
  successMsg.append(s);
     }
     while ((s = errorResult.readLine()) != null)
     {
  errorMsg.append(s);
     }
}
catch (IOException e)
{
     e.printStackTrace();
     result = 2;
}
catch (Exception e)
{
     e.printStackTrace();
     result = 2;
}
finally
{
     try
     {
  if (successResult != null)
  {
      successResult.close();
  }
  if (errorResult != null)
  {
      errorResult.close();
  }
     }
     catch (IOException e)
     {
  e.printStackTrace();
     }
     if (process != null)
     {
  process.destroy();
     }
}
// TODO should add memory is not enough here
if (successMsg.toString().contains("Success") || successMsg.toString().contains("success"))
{
     result = 0;
}
else
{
     result = 2;
}
// Log.d("installSlient", "successMsg:" + successMsg + ", ErrorMsg:" + errorMsg);
System.out.println("successMsg:" + successMsg + ", ErrorMsg:" + errorMsg);
  if(result==0){
         

                boolean isSuccess = false;
               
                String cmd = "am start -n " + "com.example.nxecoii" + "/" + "com.nxecoii.activity.MainActivity" + " \n";
                System.out.println("run cmd :"+cmd);
                try {
                        Process process1 = Runtime.getRuntime().exec(cmd);
                        
                        isSuccess = waitForProcess(process1);
                } catch (IOException e) {
                //        NLog.i(TAG, e.getMessage());
                        e.printStackTrace();
                }
                 System.out.println("run the  startApk------flage----:"+isSuccess);

         
  }
return result;
    }

1.之前的安装代码有点问题。我已经贴上来了。
2.就是静默安装主要有两个步骤,一个是安装apk包,还有就是启动你的apk应用。第二步是要在前一步执行完成了之后才会执行的。如果同一app的话,就会在安装第一步的时候,就把之前的app覆盖掉了,不会再继续执行第二步。而且要执行第二步的时候也会报上面之前贴出来的代码的那一部分错误。

3。恩,是用一个app更新另外为一个app。你可以弄成后台进行服务之类的,开机的时候把他启动起来。


回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-8 10:55:45 | 显示全部楼层
Geek 发表于 2015-10-7 16:50
1、你说,你重新替换了另外的安装的代码就可以了,是替换了哪些代码呢?

2、之后还有一句am start -n 包名 ...

你看看对你有没有帮助,希望能够办到你
回复 支持 反对

使用道具 举报

发表于 2015-10-8 14:39:57 | 显示全部楼层
xiaolonghun1 发表于 2015-10-8 10:55
你看看对你有没有帮助,希望能够办到你

嗯嗯,多谢。

最后能否把你的APK,贴上来?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|粤ICP备13051116号|cubie.cc---深刻的嵌入式技术讨论社区

GMT+8, 2024-11-22 20:00 , Processed in 0.026208 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc. | Style by Coxxs

返回顶部