• Stars
    star
    198
  • Rank 196,898 (Top 4 %)
  • Language
    Java
  • Created over 4 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

This is a tool used to modify Android Manifest binary file.

ManifestEditor

This is a tool used to modify Android Manifest binary file.
此工具用于修改AndroidManifest二进制文件。比如,更改Manifest文件中的app包名,版本号,更改或新增app入口Application的类名,更改或新增debuggable的属性,增加usesPermission标签,增加meta-data标签等。 同时,为了更方便使用,提供了直接修改Apk包中的Manifest文件,并对修改后的Apk进行签名的功能。

比较常见的修改AndroidManifest二进制文件的工具,大致有:apkeditorAXMLEditor

但是,这些工具都有一个相同的问题: 新增属性无法被Android系统解析出来。
比如,在application标签下增加debuggable=true属性,安装后的App并不是debuggable的。

本工具并不存在此问题。当然,本工具可能存在其他一些问题,并未作充分测试。

此项目基于axml,并在其基础做了二次封装和一些优化,使用起来更加方便。

This tool is used in project Xpatch

Jar包下载

打开release页面下载,或点击下载V1.0.2

查看帮助文档

$ java -jar ../ManifestEditor.jar -h

得到使用文档:

options:
 -aa,--applicationAttribute <application-attribute-name-value>
                             set the application attribute,  name and value shou
                             ld be separated by : , if name is in android namesp
                             ace, prefix "android-" should be set, multi option 
                             is supported
 -an,--applicationName <new-application-name>
                             set the app entry application name
 -d,--debuggable <0 or 1>    set 1 to make the app debuggable = true, set 0 to m
                             ake the app debuggable = false
 -dmd,--deleteMetaDataList <delete-meta-data-name>
                             delete the meta data name, multi option is supporte
                             d
 -f,--force                  force overwrite
 -h,--help                   Print this help message
 -ma,--manifestAttribute <manifest-attribute-name-value>
                             set the app manifest attribute,  name and value sho
                             uld be separated by : , if name is in android names
                             pace, prefix "android-" should be set, multi option
                              is supported
 -md,--metaData <meta-data-name-value>add the meta data,  name and value should be separa
                             ted by :, multi option is supported
 -o,--output <output-file>   output modified xml or apk file, default is $source
                             _apk_dir/[file-name]-new.xml or [file-name]-new-uns
                             igned.apk
 -pkg,--packageName <new-package-name>set the android manifest package name
 -s,--signApk                use jarsigner to sign the output apk file
 -up,--usesPermission <uses-permission-name>
                             add the app uses permission name to the manifest fi
                             le, multi option is supported
 -vc,--versionCode <new-version-code>set the app version code
 -vn,--versionName <new-version-name>set the app version name
version: 1.0.2

修改Manifest文件

1. 修改Manifest中app包名: -pkg

$ java -jar ../ManifestEditor.jar ../AndroidManifest.xml -pkg com.test.newpackage

在AndroidManifest.xml文件相同的目录下,会生成一个新的xml文件:AndroidManifest-new.xml

这个新的manifest文件中,package被改成了com.test.newpackage

2. 新增debuggable = true的属性: -d

$ java -jar ../ManifestEditor.jar ../AndroidManifest.xml -d 1

新的manifest文件中,Application标签下,增加了android:debuggable = "true"属性。 如果需要将debuggable改为false,只需:

$ java -jar ../ManifestEditor.jar ../AndroidManifest.xml -d 0

3. 修改Manifest文件中的versionCode和versionName: -vc -vn

$ java -jar ../ManifestEditor.jar ../AndroidManifest.xml -vc 100 -vn 1.0.0

新的manifest文件中,versionCode被改成了100,versionName被改成了1.0.0

4. 修改Manifest文件中的applicationName: -an

$ java -jar ../ManifestEditor.jar ../AndroidManifest.xml -an com.test.new.MyApplication

新的manifest文件中,application标签下的name被改为:android:name="com.test.new.MyApplication"

5. 新增Manifest文件中的usesPermission标签:-up

$ java -jar ../ManifestEditor.jar ../AndroidManifest.xml -up android.permission.READ_EXTERNAL_STORAGE -up android.permission.WRITE_EXTERNAL_STORAGE

新的manifest文件中,新增了读写sdcard两个权限标签。假如原Manifest文件中已经存在相关权限标签,则不会增加新的。

6. 增加或修改顶层的manifest标签下的其他属性:-ma

$ java -jar ../ManifestEditor.jar ../AndroidManifest.xml -ma android-compileSdkVersion:28 -ma android-compileSdkVersionCodename:9

新的manifest文件中,顶层的manifest标签下新增或者修改的标签为:

<manifest
   ...
    android:compileSdkVersion="28"
    android:compileSdkVersionCodename="9">

对于非android命名空间下的属性,去掉命令中的android-即可,暂不支持其他命名空间下的属性的更改。比如:

$ java -jar ../ManifestEditor.jar ../AndroidManifest.xml -ma platformBuildVersionCode:100

改动的属性是platformBuildVersionCode:

<manifest
   ...
   platformBuildVersionCode="100">

7. 增加或修改application标签下的其他属性: -aa

$ java -jar ../ManifestEditor.jar ../AndroidManifest.xml -aa android-allowBackup:false

新的manifest文件中,application标签下新增或者修改的标签为:

<application
   ...
   android:allowBackup="false"
    ...
>

对于非android命名空间下的属性,去掉命令中的android-即可,暂不支持其他命名空间下的属性的更改。

8. 新Manifest文件输出到指定目录: -o

$ java -jar ../ManifestEditor.jar ../AndroidManifest.xml -o ../new_androidmanifest.xml -d 1

将debuggable改为true后的Manifest文件输出为new_androidmanifest.xml

9. Manifest文件中的新增MetaData标签: -md

$ java -jar ../ManifestEditor.jar ../AndroidManifest.xml -md xposedminversion:53 -md xposedmodule:true

如此,文件中新增了一个Meta-data标签:

         <meta-data
            android:name="xposedminversion"
            android:value="53" />
         <meta-data
            android:name="xposedmodule"
            android:value="true" />

10. Manifest文件中的删除MetaData标签: -dmd

$ java -jar ../ManifestEditor.jar ../AndroidManifest.xml -dmd xposedminversion -dmd xposedmodule

如此,文件中,meta-data里的name为xposedminversion和xposedmodule的标签会被清空:

         <meta-data />
         <meta-data />

通过删除和新增两个操作可以实现对某个指定的<meta-data/>的修改。

修改Apk中的Manifest文件

$ java -jar ../ManifestEditor.jar ../original.apk -o ../new_build_unsigned.apk -d 1

将original.apk文件里的manifest的debuggable属性改为true后,输出未签名的新apk: new_build_unsigned.apk。 如果需要用内置的签名文件对apk进行签名,加上-s即可:

$ java -jar ../ManifestEditor.jar ../original.apk -o ../new_build.apk -d 1 -s

new_build.apk文件目录会生成另外一个签名后的apk:new_build_signed.apk

默认使用的是jarsigner命令对apk签名,假如签名失败,可自行对new_build.apk进行签名。

Android或者Java代码中使用

也可以将ManifestEditor.jar文件导入到Android或Java工程中使用,接入方法为:

    ModificationProperty property = new ModificationProperty();

    property.addManifestAttribute(new AttributeItem(NodeValue.Manifest.PACKAGE, "wind.new.pkg.name").setNamespace(null))
                .addManifestAttribute(new AttributeItem(NodeValue.Manifest.VERSION_CODE, 1))
                .addManifestAttribute(new AttributeItem(NodeValue.Manifest.VERSION_NAME, "1123"))
                .addUsesPermission("android.permission.READ_EXTERNAL_STORAGE")
                .addUsesPermission("android.permission.WRITE_EXTERNAL_STORAGE")
                .addMetaData(new ModificationProperty.MetaData("aa", "11"))
                .addMetaData(new ModificationProperty.MetaData("aa", "22"))
                .addApplicationAttribute(new AttributeItem(NodeValue.Application.DEBUGGABLE, true))
                .addApplicationAttribute(new AttributeItem(NodeValue.Application.NAME, "my.app.name.MyTestApplication"))
                .addApplicationAttribute(new AttributeItem("appComponentFactory", "my.app.name.MyAppComponentFactory"));

    String inputManifestFilePath = "../../AndroidManifest_old.xml";
    String outputManifestFilePath = "../../AndroidManifest.xml";

    // 处理manifest文件方法
    FileProcesser.processManifestFile(inputManifestFilePath, outputManifestFilePath, property);

    String inputApkFilePath = "../../original_old.apk";
    String outputApkFilePath = "../../new_build_unsigned.apk";

    // 处理得到的apk是未签名的,需要自行签名使用
    FileProcesser.processApkFile(inputApkFilePath, outputApkFilePath, property);

License

Originally forked from axml.

Copyright 2020, WindySha

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work 
except in compliance with the License. You may obtain a copy of the License in the 
LICENSE file, or at:

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the
License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
ANY KIND, either express or implied. See the License for the specific language governing
permissions and limitations under the License.

More Repositories

1

Xpatch

This is a tool to repackage apk file, then the apk can load any xposed modules installed in the device. It is another way to hook an app without root device.
Java
2,550
star
2

XSkinLoader

侵入性最低,功能强大的Android换肤框架XSkinLoader
Java
165
star
3

bypassHiddenApiRestriction

This is a library that can bypass the hidden api restriction on Android 9-12.
C++
92
star
4

xposed_module_loader

This is a library that can load installed xposed modules and load xposed modules by file path. And native libraries in the xposed module can also be loaded.
Java
83
star
5

xposed-tool-app

This is the app based on Xpatch.
82
star
6

bypass_dlfunctions

This is another way to bypass the restriction of calling dl functions for system lib.
C
65
star
7

FridaXposedModule

This is a Xposed module for using Frida in non-root device.
Java
56
star
8

RemoveVideoAdsPlugin

This is a Xposed plugin that can remove the ads of some Videos.
Kotlin
52
star
9

jdwp-xposed-injector

This is an injection tool that can inject xposed module to debuggable app by jdwp.
Python
41
star
10

xposed-hook-based-on-whale

This is a xposed hook api based on whale.
C++
22
star
11

EasyBypassRestrictions

This is a project that can bypass the android hidden api restictrion and bypass dlfcn restriction for system lib.
C
15
star
12

XInjector

This is a tool used to inject so to any app by ptrace.
C
14
star
13

AndFixProject

use three method to accomplish the java method fix
C++
13
star
14

DiskDataCacher

This is a tool to cache data in disk.
3
star
15

XposedModuleSample

This is a xposed module showing how to hook java and native code.
C++
3
star
16

VerticalLayoutTextView

竖排的文字控件,中英文混合时,中文正向,英文侧向
Java
2
star
17

flutter_sample_stopwatch

This is a stopwatch app write by Flutter.
Dart
1
star
18

FixModifiedUtf8ConvertError

This is a library that can fix the crash on android 5.0 and 5.1 caused by modified utf8 converting.
C++
1
star
19

Movie_detail_sample_using_flutter

This is a practise sample project using flutter.It is a movie detail page which is a litter like Douban Movie Page.
Dart
1
star
20

my_hexo_blog_comments

This is my hexo blog comments repository.
1
star
21

WindySha.github.io

This is my hexo blog
HTML
1
star