Android 源码下编译APK

  有些时候,我们写的 AP 需要获取系统的一些权限,比如获取联系人信息,Mail 信息等等,就需要在 android 源码下编译APK,让 AP 与系统源码具有一样的签名。

   1、Linux系统注册 -mm、 -mmm等命令

         用 gedit 打开~/.bashrc 文件,加入source [源码目录]/build/envsetup.sh,重启命令终端。

 

   2、修改  AndroidManifest.xml(非必须,除非AP需要system ID)
   添加: android:sharedUserId="android.uid.system" ---与系统一样 userID

   例:

 <manifest xmlns:Android="http://schemas.android.com/apk/res/android"
        package="com.wpstar.Wifi_Test1"
      android:versionCode="1"
      android:sharedUserId="android.uid.system"
      android:versionName="1.0">
    <uses-sdk Android:minSdkVersion="8" />

 

   3、工程目录拷贝到:[源码目录]/packages/apps/

    进入添加Android.mk文件

	LOCAL_PATH:= $(call my-dir)
     	include $(CLEAR_VARS)

      	LOCAL_MODULE_TAGS := optional

     	LOCAL_SRC_FILES := $(call all-java-files-under, src)
       
       	#生成的APK名称
       	LOCAL_PACKAGE_NAME := Wifi_Test1
	
	#libname这个名字可以自己定。注意这里的修改!!加了libname2
	LOCAL_STATIC_JAVA_LIBRARIES := libname libname2 

       	#静态 .so lib库
       	LOCAL_JNI_SHARED_LIBRARIES := libtest

       	LOCAL_CERTIFICATE := platform

       	include $(BUILD_PACKAGE)

        # Use the folloing include to make our test apk.

      	include $(call all-makefiles-under,$(LOCAL_PATH))

	#libname必须与上面自己定义的名称一致,needimport.jar是你需要导入的第三方jar包.注意这里的修改!!
	#加了libname2:lib/needimport2.jar
	LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := libname:lib/needimport.jar libname2:lib/needimport2.jar
	include $(BUILD_MULTI_PREBUILT)


      注意:对于4.0ics 以上编译 apk 需要加入 WITH_DEXPREOPT := false 或者 LOCAL_DEX_PREOPT := false 才能编译生车APK文件,默认生成的不可独立安装运行。


     4、cd [源码目录]/packages/apps/ 下自己的工程目录,直接 -mm 命令就可以了,在 [源码目录]/out//target/product/generic/system/app 下就可以看到编译生成的APK文件。


     注意:
      1、必须保证 android 源码已经 make 过了。
      2、对于 apk 安装出现 Failure [INSTALL_FAILED_OLDER_SDK]
            打开[源码目录]/build/core/version_defaults.mk 文件

	     ifeq "" "$(DEFAULT_APP_TARGET_SDK)"
             # This is the default minSdkVersion and targetSdkVersion to use for
             # all .apks created by the build system.  It can be overridden by explicitly
             # setting these in the .apk's AndroidManifest.xml.  It is either the code
             # name of the development build or, if this is a release build, the official
             # SDK version of this release.
                    ifeq "REL" "$(PLATFORM_VERSION_CODENAME)"
                          DEFAULT_APP_TARGET_SDK := $(PLATFORM_SDK_VERSION)
                    else
                          DEFAULT_APP_TARGET_SDK := $(PLATFORM_VERSION_CODENAME)
                   endif
              endif

             # 将DEFAULT_APP_TARGET_SDK直接赋值相应的API等级即可,
             # 或者 把 
                  ifeq "REL" "$(PLATFORM_VERSION_CODENAME)"
                          DEFAULT_APP_TARGET_SDK := $(PLATFORM_SDK_VERSION)
                    else
                          DEFAULT_APP_TARGET_SDK := $(PLATFORM_VERSION_CODENAME)
                   endif
             # 注释即可。

      3、对于包含.so文件的工程,编译的Android.mk文件中 LOCAL_MODULE := lib[.so文件名] 而非 NDK 编译中的 LOCAL_MODULE := [.so文件名]。
      4、编译hdpi
       android4.0的源码编译时lunch选择full-eng默认编译mdpi的apk,如果要编译hdpi,需要在./build/target/product/full.mk文件中添加:

PRODUCT_AAPT_CONFIG := normal hdpi
       PRODUCT_AAPT_PREF_CONFIG := hdpi


      5、  push apk 到模拟器
         a).获得模拟器写权限
             启动模拟器时添加参数 -partition-size 
             emulator -avd avdname -partition-size 256
             ./adb remount
         b).把模拟器中/system/app下要push的apk对应的odex文件删除

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android apktool是一款广泛使用的工具,用于反编译Android应用程序包(APK)。APK是一种Android应用程序的打包格式,包含了应用的所有代码、资源和配置信息。而反编译则是指将APK文件还原成可读性较高且易于理解的源代码形式。 使用apktool进行APK编译时,首先需要将APK文件传递给apktool工具。工具会根据APK文件的结构,解析并提取其中的所有文件和资源。然后,apktool会自动将其中的DEX文件(Dalvik Executable文件,包含了Java源代码经过编译后的字节码)转换为Java源码。此时,开发者可以通过查看反编译后的Java源码来了解应用的工作原理和实现细节。 同时,apktool还会还原APK中的XML文件,包括清单文件、布局文件以及其他配置文件。这些XML文件记录了应用的各种配置信息,如权限、活动(Activity)、服务(Service)等。反编译后的XML文件可以帮助开发者了解应用的结构和设计。 尽管apktool的反编译功能可以帮助开发者深入了解和分析应用,但需要注意的是,由于反编译是将编译后的字节码转化为源代码,所以反编译后的代码可能会存在格式混乱、变量命名不一致等问题。因此,反编译源码仅供参考和学习使用,不能完全复原原始代码。 总而言之,android apktool是一款强大的工具,通过它可以帮助开发者反编译APK文件,提取其中的代码和资源,从而更好地分析应用和进行代码审查。 ### 回答2: Android apktool是一种常用的工具,用于反编译APK文件。反编译APK可以帮助开发者分析和修改应用程序,并研究其他应用程序的功能和实现原理。 通过使用apktool工具,可以将APK文件解压成源码和资源文件。这样,开发者可以查看应用程序的源代码,理解其逻辑和结构,并根据需要进行修改。apktool还可以还原资源文件,比如图片、音频和布局文件,以供进一步分析和修改。 使用apktool反编译APK文件并不复杂。首先,需要在电脑上安装Java开发环境,然后下载并配置好apktool工具的环境变量。接下来,在命令行中运行apktool命令,指定要反编译APK文件路径。反编译完成后,可以在指定的输目录中找到反编译源码和资源文件。 然而,需要注意的是,反编译APK只能得到大致的源码和资源文件,并不完全等同于开发者的原始代码。因为在编译APK之前,原始代码会经过一系列的编译和混淆过程,这些过程会对源码进行处理,使得反编译后的代码可读性较差。此外,反编译APK可能存在法律和道德问题,因此应该遵守相关法律规定,并尊重开发者的劳动成果。 综上所述,Android apktool是一种有用的工具,可以帮助开发者反编译APK文件,分析和修改应用程序。合法合规地使用该工具,可以加深对Android应用程序的理解,并提升开发能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值