Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

修改包的,需要把自定义权限的包名也改一下 #4

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.wind.meditor.property;

import com.wind.meditor.utils.NodeValue;

import java.util.ArrayList;
import java.util.List;

Expand All @@ -9,7 +11,7 @@
* @author windysha
*/
public class ModificationProperty {

private List<String> usesPermissionList = new ArrayList<>();
private List<MetaData> metaDataList = new ArrayList<>();
private List<MetaData> deleteMetaDataList = new ArrayList<>();
Expand All @@ -20,11 +22,29 @@ public class ModificationProperty {
public List<String> getUsesPermissionList() {
return usesPermissionList;
}

private String originPackageName;
public ModificationProperty addUsesPermission(String permissionName) {
usesPermissionList.add(permissionName);
return this;
}
//打包后的包名
public String getModifyPackageName(){
for(int i = 0; i< manifestAttributeList.size(); i++){
AttributeItem attributeItem = manifestAttributeList.get(i);
if(NodeValue.Manifest.PACKAGE.equals(attributeItem.getName())){
return (String) attributeItem.getValue();
}
}
return originPackageName;
}

public String getOriginPackageName() {
return originPackageName;
}

public void setOriginPackageName(String packageName) {
this.originPackageName = packageName;
}

public List<AttributeItem> getApplicationAttributeList() {
return applicationAttributeList;
Expand Down
22 changes: 22 additions & 0 deletions lib/src/main/java/com/wind/meditor/utils/NodeValue.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.wind.meditor.utils;

import java.util.Arrays;
import java.util.List;

public final class NodeValue {
private NodeValue(){}

Expand Down Expand Up @@ -34,6 +37,9 @@ public static final class UsesPermission{
public static final String NAME="name";
public static final String MAX_SDK_VERSION="maxSdkVersion";
}
public static final class Permission{
public static final String TAG_NAME = "permission";
}

public static final class MetaData{
public static final String TAG_NAME = "meta-data";
Expand Down Expand Up @@ -63,6 +69,22 @@ public static final class Application{
public static final String ENABLED="enabled";
public static final String DESCRIPTION="description";
public static final String PROCESS="process";

public static final class Component {
public static final String ACTIVITY = "activity";
public static final String SERVICE = "service";
public static final String PROVIDER = "provider";
public static final String RECEIVER = "receiver";


public static final List<String> TAG_NAMES = Arrays.asList(ACTIVITY, SERVICE, PROVIDER, RECEIVER);
public static final String NAME="name";
public static final String VALUE="value";
public static final String PERMISSION = "permission";
public static final String READ_PERMISSION = "readPermission";
public static final String WRITE_PERMISSION = "writePermission";
public static final String AUTHORITIES = "authorities";
}
}


Expand Down
2 changes: 1 addition & 1 deletion lib/src/main/java/com/wind/meditor/utils/Utils.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public static byte[] getBytesFromInputStream(InputStream inputStream) {
ByteArrayOutputStream bos = null;
try {
bos = new ByteArrayOutputStream();
byte[] b = new byte[1024];
byte[] b = new byte[1024*128];
int n;
while ((n = inputStream.read(b)) != -1) {
bos.write(b, 0, n);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,15 @@ public class ApplicationTagVisitor extends ModifyAttributeVisitor {
private List<ModificationProperty.MetaData> metaDataList;
private List<ModificationProperty.MetaData> deleteMetaDataList;
private ModificationProperty.MetaData curMetaData;
private ModificationProperty properties;

private static final String META_DATA_FLAG = "meta_data_flag";

ApplicationTagVisitor(NodeVisitor nv, List<AttributeItem> modifyAttributeList,
ApplicationTagVisitor(NodeVisitor nv, ModificationProperty properties, List<AttributeItem> modifyAttributeList,
List<ModificationProperty.MetaData> metaDataList,
List<ModificationProperty.MetaData> deleteMetaDataList) {
super(nv, modifyAttributeList);
this.properties = properties;
this.metaDataList = metaDataList;
this.deleteMetaDataList = deleteMetaDataList;
}
Expand All @@ -38,6 +40,9 @@ public NodeVisitor child(String ns, String name) {
&& deleteMetaDataList != null && !deleteMetaDataList.isEmpty()) {
NodeVisitor nv = super.child(ns, name);
return new DeleteMetaDataVisitor(nv, deleteMetaDataList);
} else if (NodeValue.Application.Component.TAG_NAMES.contains(name)){
NodeVisitor nv = super.child(ns, name);
return new ComponentTagVisitor(nv, name, properties);
}
return super.child(ns, name);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.wind.meditor.visitor;

import com.wind.meditor.property.ModificationProperty;
import com.wind.meditor.utils.NodeValue;

import pxb.android.axml.NodeVisitor;

/**
* @author liangxiwei
* @version 1.0
* @since 2020/10/15
*/
public class ComponentTagVisitor extends NodeVisitor {
private ModificationProperty properties;
private String componentName;
public ComponentTagVisitor(NodeVisitor nv, String componentName, ModificationProperty propertes) {
super(nv);
this.properties = propertes;
this.componentName = componentName;
}

@Override
public void attr(String ns, String name, int resourceId, int type, Object obj) {
//权限名字也要把包名换掉
String modifyPackageName = properties.getModifyPackageName();
String originPackageName = properties.getOriginPackageName();

if (!originPackageName.equals(modifyPackageName) && type == TYPE_STRING ) {
boolean isPermissionAttr = NodeValue.Application.Component.PERMISSION.equals(name) ||
NodeValue.Application.Component.WRITE_PERMISSION.equals(name)||
NodeValue.Application.Component.READ_PERMISSION.equals(name);
boolean isAuthorities = NodeValue.Application.Component.AUTHORITIES.equals(name);
if (isPermissionAttr || isAuthorities) {
String permission = ((String) obj);
obj = permission.replaceFirst(originPackageName, modifyPackageName);
}
}
super.attr(ns, name, resourceId, type, obj);
}

@Override
public NodeVisitor child(String ns, String name) {

return super.child(ns, name);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,17 +28,17 @@ public NodeVisitor child(String ns, String name) {

if (ns != null && (NodeValue.UsesPermission.TAG_NAME).equals(name)) {
NodeVisitor child = super.child(null, NodeValue.UsesPermission.TAG_NAME);
return new UserPermissionTagVisitor(child, null, ns);
return new UserPermissionTagVisitor(child, null, ns, properties);
}

NodeVisitor child = super.child(ns, name);
if (NodeValue.Application.TAG_NAME.equals(name)) {
return new ApplicationTagVisitor(child, properties.getApplicationAttributeList(),
return new ApplicationTagVisitor(child, properties, properties.getApplicationAttributeList(),
properties.getMetaDataList(), properties.getDeleteMetaDataList());
}

if (NodeValue.UsesPermission.TAG_NAME.equals(name)) {
return new UserPermissionTagVisitor(child, getUsesPermissionGetter(), null);
} else if (NodeValue.UsesPermission.TAG_NAME.equals(name)) {
return new UserPermissionTagVisitor(child, getUsesPermissionGetter(), null, properties);
} else if(NodeValue.Permission.TAG_NAME.equals(name)){
return new PermissionTagVisitor(child, properties);
}
return child;
}
Expand All @@ -47,6 +47,9 @@ public NodeVisitor child(String ns, String name) {
public void attr(String ns, String name, int resourceId, int type, Object obj) {
Log.d(" ManifestTagVisitor attr --> ns = " + ns + " name = " +
name + " resourceId=" + resourceId + " obj = " + obj);
if (NodeValue.Manifest.PACKAGE.equals(name) && type == TYPE_STRING) {
properties.setOriginPackageName((String) obj);
}
super.attr(ns, name, resourceId, type, obj);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.wind.meditor.visitor;

import com.wind.meditor.property.ModificationProperty;

import pxb.android.axml.NodeVisitor;

/**
* @author liangxiwei
* @since 2020/10/16
*/
public class PermissionTagVisitor extends NodeVisitor {
private ModificationProperty properties;
PermissionTagVisitor(NodeVisitor nv, ModificationProperty properties) {
super(nv);
this.properties = properties;
}

@Override
public void attr(String ns, String name, int resourceId, int type, Object obj) {
//权限名字也要把包名换掉
String modifyPackageName = properties.getModifyPackageName();
String originPackageName = properties.getOriginPackageName();
if (!originPackageName.equals(modifyPackageName) && type == TYPE_STRING) {
String permission = ((String)obj);
obj = permission.replaceFirst(originPackageName, modifyPackageName);

}
super.attr(ns, name, resourceId, type, obj);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.wind.meditor.visitor;

import com.wind.meditor.property.AttributeItem;
import com.wind.meditor.property.ModificationProperty;
import com.wind.meditor.utils.NodeValue;
import com.wind.meditor.utils.Utils;

Expand All @@ -9,11 +10,11 @@
class UserPermissionTagVisitor extends NodeVisitor {

private IUsesPermissionGetter permissionGetter;

UserPermissionTagVisitor(NodeVisitor nv, IUsesPermissionGetter permissionGetter, String permissionTobeAdded) {
private ModificationProperty properties;
UserPermissionTagVisitor(NodeVisitor nv, IUsesPermissionGetter permissionGetter, String permissionTobeAdded, ModificationProperty properties) {
super(nv);
this.permissionGetter = permissionGetter;

this.properties = properties;
if (!Utils.isNullOrEmpty(permissionTobeAdded)) {
AttributeItem attributeItem = new AttributeItem(NodeValue.UsesPermission.NAME, permissionTobeAdded);
super.attr(attributeItem.getNamespace(),
Expand All @@ -29,6 +30,14 @@ public void attr(String ns, String name, int resourceId, int type, Object obj) {
if (obj instanceof String && permissionGetter != null) {
permissionGetter.onPermissionGetted((String) obj);
}
//权限名字也要把包名换掉
String modifyPackageName = properties.getModifyPackageName();
String originPackageName = properties.getOriginPackageName();
if (!originPackageName.equals(modifyPackageName) && type == TYPE_STRING) {
String permission = ((String)obj);
obj = permission.replaceFirst(originPackageName, modifyPackageName);

}
super.attr(ns, name, resourceId, type, obj);
}

Expand Down