Linux源码环境下编译apk实践

29 篇文章 0 订阅
14 篇文章 0 订阅

模拟点击的ap实现中,需要在源码环境下对ap进行编译,

android:sharedUserId="android.uid.system

让ap具有INJEST_EVENT权限。


之前在Linux源码中进行过编译测试,但是编译出来的apk打开就出错。

这次继续研究,还是出错。

01-01 12:01:22.285: E/AndroidRuntime(4807): FATALEXCEPTION: main

01-01 12:01:22.285: E/AndroidRuntime(4807):Process: com.example.test2, PID: 4807

01-01 12:01:22.285: E/AndroidRuntime(4807):java.lang.RuntimeException: Unable to instantiate activityComponentInfo{com.example.test2/com.example.test2.MainActivity}:java.lang.ClassNotFoundException: Didn't find class "com.example.test2.MainActivity"on path: DexPathList[[zip file"/system/app/Test2/Test2.apk"],nativeLibraryDirectories=[/system/app/Test2/lib/arm,/vendor/lib, /system/lib]]

01-01 12:01:22.285: E/AndroidRuntime(4807):       atandroid.app.ActivityThread.performLaunchActivity(ActivityThread.java:2493)

01-01 12:01:22.285: E/AndroidRuntime(4807):       atandroid.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2691)

01-01 12:01:22.285: E/AndroidRuntime(4807):       atandroid.app.ActivityThread.-wrap11(ActivityThread.java)

01-01 12:01:22.285: E/AndroidRuntime(4807):       atandroid.app.ActivityThread$H.handleMessage(ActivityThread.java:1491)

01-01 12:01:22.285: E/AndroidRuntime(4807):       atandroid.os.Handler.dispatchMessage(Handler.java:111)

01-01 12:01:22.285: E/AndroidRuntime(4807):       at android.os.Looper.loop(Looper.java:207)

01-01 12:01:22.285: E/AndroidRuntime(4807):       atandroid.app.ActivityThread.main(ActivityThread.java:5779)

01-01 12:01:22.285: E/AndroidRuntime(4807):       at java.lang.reflect.Method.invoke(NativeMethod)

01-01 12:01:22.285: E/AndroidRuntime(4807):       atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)

01-01 12:01:22.285: E/AndroidRuntime(4807):       atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:739)

01-01 12:01:22.285: E/AndroidRuntime(4807): Causedby: java.lang.ClassNotFoundException: Didn't find class"com.example.test2.MainActivity" on path: DexPathList[[zip file"/system/app/Test2/Test2.apk"],nativeLibraryDirectories=[/system/app/Test2/lib/arm,/vendor/lib, /system/lib]]

01-01 12:01:22.285: E/AndroidRuntime(4807):       atdalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)

01-01 12:01:22.285: E/AndroidRuntime(4807):       atjava.lang.ClassLoader.loadClass(ClassLoader.java:511)

01-01 12:01:22.285: E/AndroidRuntime(4807):       at java.lang.ClassLoader.loadClass(ClassLoader.java:469)

01-01 12:01:22.285: E/AndroidRuntime(4807):       atandroid.app.Instrumentation.newActivity(Instrumentation.java:1072)

01-01 12:01:22.285: E/AndroidRuntime(4807):       atandroid.app.ActivityThread.performLaunchActivity(ActivityThread.java:2483)

01-01 12:01:22.285: E/AndroidRuntime(4807):       ... 9 more

01-01 12:01:22.285: E/AndroidRuntime(4807):       Suppressed: java.io.IOException: Nooriginal dex files found for dex location /system/app/Test2/Test2.apk

01-01 12:01:22.285: E/AndroidRuntime(4807):              atdalvik.system.DexFile.openDexFileNative(Native Method)

01-01 12:01:22.285: E/AndroidRuntime(4807):              atdalvik.system.DexFile.openDexFile(DexFile.java:295)

01-01 12:01:22.285: E/AndroidRuntime(4807):              atdalvik.system.DexFile.<init>(DexFile.java:80)

01-01 12:01:22.285: E/AndroidRuntime(4807):              atdalvik.system.DexFile.<init>(DexFile.java:59)

01-01 12:01:22.285: E/AndroidRuntime(4807):              atdalvik.system.DexPathList.loadDexFile(DexPathList.java:279)

01-01 12:01:22.285: E/AndroidRuntime(4807):              atdalvik.system.DexPathList.makePathElements(DexPathList.java:248)

01-01 12:01:22.285: E/AndroidRuntime(4807):              atdalvik.system.DexPathList.<init>(DexPathList.java:120)

01-01 12:01:22.285: E/AndroidRuntime(4807):              atdalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:48)

01-01 12:01:22.285: E/AndroidRuntime(4807):              atdalvik.system.PathClassLoader.<init>(PathClassLoader.java:65)

01-01 12:01:22.285: E/AndroidRuntime(4807):              atandroid.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:58)

01-01 12:01:22.285: E/AndroidRuntime(4807):              atandroid.app.LoadedApk.getClassLoader(LoadedApk.java:385)

01-01 12:01:22.285: E/AndroidRuntime(4807):              atandroid.app.LoadedApk.makeApplication(LoadedApk.java:580)

01-01 12:01:22.285: E/AndroidRuntime(4807):              atandroid.app.ActivityThread.handleBindApplication(ActivityThread.java:4983)

01-01 12:01:22.285: E/AndroidRuntime(4807):              atandroid.app.ActivityThread.-wrap1(ActivityThread.java)

01-01 12:01:22.285: E/AndroidRuntime(4807):              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1552)

01-01 12:01:22.285: E/AndroidRuntime(4807):              ... 6 more

01-01 12:01:22.285: E/AndroidRuntime(4807):       Suppressed:java.lang.ClassNotFoundException: com.example.test2.MainActivity

01-01 12:01:22.285: E/AndroidRuntime(4807):              atjava.lang.Class.classForName(Native Method)

01-01 12:01:22.285: E/AndroidRuntime(4807):              atjava.lang.BootClassLoader.findClass(ClassLoader.java:781)

01-01 12:01:22.285: E/AndroidRuntime(4807):              at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)

01-01 12:01:22.285: E/AndroidRuntime(4807):              atjava.lang.ClassLoader.loadClass(ClassLoader.java:504)

01-01 12:01:22.285: E/AndroidRuntime(4807):              ... 12 more

01-01 12:01:22.285: E/AndroidRuntime(4807):       Caused by: java.lang.NoClassDefFoundError:Class not found using the boot class loader; no stack trace available

01-01 12:01:25.986: E/AndroidRuntime(4977): FATALEXCEPTION: main

01-01 12:01:25.986: E/AndroidRuntime(4977):Process: com.example.test2, PID: 4977

01-01 12:01:25.986: E/AndroidRuntime(4977):java.lang.RuntimeException: Unable to instantiate activityComponentInfo{com.example.test2/com.example.test2.MainActivity}:java.lang.ClassNotFoundException: Didn't find class "com.example.test2.MainActivity"on path: DexPathList[[zip file"/system/app/Test2/Test2.apk"],nativeLibraryDirectories=[/system/app/Test2/lib/arm,/vendor/lib, /system/lib]]


搜索 Linux源码编译apk,反复试验,终于解决,编译的apk也具有了系统权限,可以实现跨进程的屏幕点击

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

 

LOCAL_MODULE_TAGS := optional

 

LOCAL_SRC_FILES := $(call all-subdir-java-files)

LOCAL_STATIC_JAVA_LIBRARIES += android-support-v4

 

LOCAL_DEX_PREOPT := false

LOCAL_MULTILIB := 32

LOCAL_PACKAGE_NAME := Test2

LOCAL_CERTIFICATE := platform

#LOCAL_CERTIFICATE := share

 

LOCAL_OVERRIDES_PACKAGES := Home

include $(BUILD_PACKAGE)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
安卓系统下的bash shell,ssh服务器,gcc编译器以及vim文本编辑器等 使用vim编辑多个文件 vim file1 file2 file3 ... :next查看或编辑后一个文档的内容 :prev查看或编辑前一个文档的内容 :first查看或编辑第一个文档的内容 :last查看或编辑最后一个文档的内容 vim -o|-O file1 file2 file3 -o:水平显示多个文件 -O:垂直显示多个文件 Ctrl+w arrow(箭头) 光标移动 Ctrl+w,s讲一个文件水平分屏显示 Ctrl+w,v将一个文件垂直分屏显示 :qa 全部退出 :wa 全部保存 将其他文件中的内容填充到当前文件中 :r (/PATH/TO/SOMEFILE)这是解释 跟shell交互 :!命令(command) 部分另存为 :w(全部保存) :m,nw(从第m行到第n行) :m,+n :.,$w 默认系统中所支持的shell cat /etc/shells bash特性 命令别名:自定义命令 alias:可以用来定义和设置命令的别名 注意:使用alias命令定义的别名其生命周期仅限于当前shell的生命期;如果修改.bashrc配置文件,其中保存的别名并不会立即生效,只有在重新加载该文件内容之后才会生效且永久生效;为了能够保证设置别名有效,通常两种操作都做 撤销别名:unalias . .bashrc:将.bashrc的命令读取 命令历史: bash进程会保存其会话中用户曾经执行的命令,以方便用户重复执行某个命令通过bash提供的历史命令文件来持久保存此前执行过的命令,用户由私有历史文件 登陆shell的时候,bash会自动读取~/.bash_history文件中所记录的所有命令 history命令: -c:清空历史缓冲区中的历史命令; -d OFFSET:删除特定历史命令条目; 重复执行前一个命令的方法: 使用上方向箭头,回车执行 Ctrl+p !-1 !! 重复执行历史缓冲区的命令 !#(#=数字):重复执行历史命令中的编号为#的命令 !(string)字符串:从历史缓冲区中查找最近一次执行过的以string开头的命令并执行 !?string:从历史缓冲区中查找最近一次包含string的命令并执行 !- number:执行历史缓冲区中倒数第number个命令 Ctrl+r:在历史缓冲区中实施搜索,回车执行即可: 重复使用历史命令中的一部分: !$ 、ESC .、ALT+:表示最后一次命令中最后一个参数; !^:第一个位置的参数 !:number:最后一次命令中第number个位置的参数 !number1:number2在历史缓冲区中第number1个命令的第number2个参数 快捷键 C-->Ctrl M-->Alt E-->Esc DEL-->Backspace C-l:clear 清屏 C-a:将光标跳至命令行行首 C-e:将光标跳至命令行行尾 C-k:删除光标所在位置至行尾的命令行信息 C-u:删除光标所在位置至行首的命令行信息 C-c:结束前台进程。取消命令的运行 命令补全机制: 命令本身字符串的补全 参数的补全 使用TAB键可以完成命令补全: 如果给出的字符串不能作为唯一标识,则bash不予补全;再次敲击TAB键,bash会给出参考列表;如果参考列表中的内容过多,bash会询问是否显示该列表;根据提供的参数路径来进行补全,如果参数没有任何提示信息,则默认从工作目录进行查找; 命令行展开: ~:bash会自动将其展开为当前登陆用户的家目录 ~STRING:bash会自动将其展开为以STRING为用户名为用户的家目录 ~+:调用shell变量pwd的值 ~-:调用shell变量oldpwd的值 {}:在花括号中可以填充一个以","分隔的路径列表,bash会将其展开为多个独立的路径; 命令的执行结果 任何以个Linux命令都有两种执行结果: 命令的正常输出结果:跟用户需求相关的返回内容: ``:反向单引号,反引号 $():标准的命令引用格式 wc:统计一个文件中的行数、字数及字节数 -c:只显示字节数 -l:只显示行数 -w:只显示字数 命令的执行状态返回值;跟命令执行成与否相关的返回命令 引用功能: '':强引用 凡是被单引号引用的内容,bash一律将其视为普通字符,即便本身有特殊功能和作用也是如此,但是单引号本身是个例外 "":弱引用 被双引号引用的内容有一些特殊字符仍然会保留器特殊含义 比如:$、\、"" 转义功能:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值