㈠ android 开发apktool.jar怎么用
APKTool是GOOGLE提供的APK编译工具,需要java运行环境,推荐使用JDK1.6或者JDK1.7。 如果你想对APK文件进行修改,那么就不可避免的要使用到APKTool。
一.APKTOOL使用环境配置 1.安装JAVA并设置环境变量。 下载安装都很简单,关键是安装完后还需要亲自设置环境变量以方便其他程序能够条用JAVA。 以WIN7为例,在桌面上右键点击计算机——>属性——>高级系统设置——>环境变量——>在下边的系统变量里新建一个变量,变量名为JAVA_HOME,值为JAVA的安装路径,比如我的是H:\ProgramFiles\Java\jdk1.6.0_26
二.APKTool的安装 1.其实这个谈不上安装,不过如果你愿意的话可以把下载到的APKTOOL中的三个文件(aapt.exe、apktool.bat、apktool.jar)解压缩到你的Windows安装目录下,以方便使用Dos命令. 2.可能有些人下载的APKTOOL里有个安装的bat文件,
三.APKTool的使用 1.decode 该命令用于进行反编译apk文件,一般用法为 apktool d <file.apk> <dir>
<file.apk>代表了要反编译的apk文件的路径,最好写绝对路径,比如C:\MusicPlayer.apk <dir>代表了反编译后的文件的存储位置,比如C:\MusicPlayer 如果你给定的<dir>已经存在,那么输入完该命令后会提示你,并且无法执行,需要你重新修改命令加入-f指令 apktool d –f <file.apk> <dir> 这样就会强行覆盖已经存在的文件 2.build 该命令用于编译修改好的文件,一般用法为 apktool b <dir> 这里的<dir>就是刚才你反编译时输入的<dir>(如C:\MusicPlayer),输入这行命令后,如果一切正常,你会发现C:\MusicPlayer内多了2个文件夹build和dist,其中分别存储着编译过程中逐个编译的文件以及最终打包的apk文件。 3.install-framework 该命令用于为APKTool安装特定的framework-res.apk文件,以方便进行反编译一些与ROM相互依赖的APK文件。具体情况请看常见问题
四.常见问题 1.关于安装和管理framework文件 ,一般来说,你在使用apktool进行反编译前不需要做其他的事情,然而由于有的厂商,,他们定制了framework文件并且在他们的系统应用中使用了这些文件,这时,为了能正常的反编译这些apk文件,你就必须从你的设备中拷贝出framework文件并且安装到apktool中。
你需要复制两个framework文件来进行安装,framework-res.apk和tzframework-res.apk,一般来说,这两个文件在手机中的位置应该是system\framework\ 使用以下代码进行安装 apktool if C:\framework-res.apk apktool if C:\tzframework-res.apk 这里假设2个文件都放在C盘根目录
2.直接用build编译后在dist中找到的apk文件无法使用 其实这个问题我也不是特别理解,目前知道的就是,APK文件虽然本质是个zip文件,但是事实上zip包中的文件是按照两种方式压缩的,即XML文件进行deflate压缩,其他文件不进行压缩(使用store存储),而直接编译得到的APK文件对任何的文件都进行了deflate压缩,因此你会发现编译得到的文件比原文件小好多。 同样的,当你使用build文件夹中的文件替换原apk文件中的资源时,请务必确认是使用store存储还是deflate压缩
3.其他错误 其实在编译过程中会遇到很多其他的问题,大多数是由于删除、修改、添加了资源后,没有对应的修改res\values\public.xml文件而造成的。
修改的原则:
第一,public.xml文件中的资源不能重复定义。
第二,public.xml文件中的任意两个资源的ID不能一样。
第三,public.xml文件中定义的资源必须能找到该文件(如果你删除了一些文件,必须要对应的删除public.xml中的该行)
第四,public.xml文件中尽可能全面(如果你添加了某资源,最好确保在public.xml中也添加)
第五,public.xml文件中的资源的ID尽可能连续(当你为添加的文件添加声明时,赋予的ID尽可能是连续的
㈡ Android项目里如何混淆自己打的jar包或者防止被反编译
Android之防止反编译技巧:
1. 判断程序是否运行在模拟器上
boolean isRunningInEmualtor() {
boolean qemuKernel = false;
Process process = null;
DataOutputStream os = null;
try{
process = Runtime.getRuntime().exec("getprop ro.kernel.qemu");
os = new DataOutputStream(process.getOutputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream(),"GBK"));
os.writeBytes("exit\n");
os.flush();
process.waitFor();
// getprop ro.kernel.qemu == 1 在模拟器
// getprop ro.proct.model == "sdk" 在模拟器
// getprop ro.build.tags == "test-keys" 在模拟器
qemuKernel = (Integer.valueOf(in.readLine()) == 1);
Log.d("com.droider.checkqemu", "检测到模拟器:" + qemuKernel);
} catch (Exception e){
qemuKernel = false;
Log.d("com.droider.checkqemu", "run failed" + e.getMessage());
} finally {
try{
if (os != null) {
os.close();
}
process.destroy();
} catch (Exception e) {
}
Log.d("com.droider.checkqemu", "run finally");
}
return qemuKernel;
}
2. 检测keystore签名,再与之前得做比较
public int getSignature(String packageName) {
PackageManager pm = this.getPackageManager();
PackageInfo pi = null;
int sig = 0;
try {
pi = pm.getPackageInfo(packageName, PackageManager.GET_SIGNATURES);
Signature[] s = pi.signatures;
sig = s[0].hashCode();
} catch (Exception e1) {
sig = 0;
e1.printStackTrace();
}
return sig;
}
3. 检测包名,版本名和版本号,然后做判断:
private String getAppInfo() {
try {
String pkName = this.getPackageName();
String versionName = this.getPackageManager().getPackageInfo(
pkName, 0).versionName;
int versionCode = this.getPackageManager()
.getPackageInfo(pkName, 0).versionCode;
return pkName + " " + versionName + " " + versionCode;
} catch (Exception e) {
}
return null;
}
4. 把jpg图片写成是png格式得图片 但是最新版本的apktool已经修复了
5. 花指令,影响jd-gui 但是最新版本的jd-gui已经修复
private static final char[] wJ = "0123456789abcdef".toCharArray();
public static String imsi = "204046330839890";
public static String p = "0";
public static String keyword = "电话";
public static String tranlateKeyword = "%E7%94%B5%E8%AF%9D";
在每个类里面加入 如上字段。。。。
https://***/ 一个第三方得”爱加密“网站 1.需要使用官方的打包key工具打包后上传到"爱加密"网站进行处理,然后到网站上面下载,下载后还要用"爱加密"的打包工具再次进行打包即可。
㈢ Android中将资源文件打包进jar文件出现的问题
可以提供个lib project (http://developer.android.com/tools/projects/projects-eclipse.html)
先建个lib project,将 res 的内容拷过去,
将源码编译弄成jar包,放到lib project的libs路径下
使用者可以直接将这个lib project导入到自己的项目中
PS: 注意设置好 proguard,如果有用到的话
㈣ android studio怎样把jar打包成aar文件
文本我们将讲解android studio打包apk,aar,jar包的相关知识。apk包就是android系统的安装包,这里没什么好说的,aar包是android中独有的类库包,而jar包是java中特有的类库包,在具体的介绍打包之前,我们先来aar包和jar包的区别。
http://blog.csdn.net/androidstarjack/article/details/52368877
㈤ android studio怎么把jar打包到apk
你可以将jar拷贝lib库中,然后在build.gradle文件中,填写好依赖关系即可
㈥ 怎么让android生成jar包
将Android打包成jar包供人使用,可利用Java的反射技术,获取相应的id.方便使用者替换自己所需要的。
1.新建Android项目:ActivityLibrary,这就是需要我们打包成jar包的项目:
2.MResource这个类的作用,就是利用J2SE反射技术获取相应的ID资源。Android SDK也提供了获取Id资源的方法:getResources().getIdentifier("main_activity", "layout", getPackageName());
看下MResource的代码:
[java] view plain
package com.example.activitylibrary;
import android.content.Context;
/**
* 根据资源的名字获取其ID值
* @author howlaa
*/
public class MResource {
//根据名称获取ID
㈦ 如何使用Android Studio打包混淆的Jar
使用AS打包混淆Jar包,网络一下,一片一片的,但是很多都是零零散散的写得不是很详细或是直接拷贝,按照他们的教程测试总不是很顺利,所以这里我就把我个人学习AS打包混淆Jar的成果总结出来,希望对大家有帮助。个人觉得写得还是比较详细的
使用gradle混淆打包Jar
使用AS开发项目,引入第三方库是非常方便的,我们只需要在build.gradle中配置一行代码就可以轻松引入我们需要的开发库。那么gradle可以帮我们混淆打包Jar吗?答案是当然可以!
那么我们如何打包Jar呢?其实我们在编译项目的时候,AS已经帮我们在目录build/intermediates/bundles/release/classes.jar打好了Jar。那么我们需要做的就是把Jar进行混淆的工作了。这里以个人项目bannerDemo为例,混淆步骤如下:
在你的library的build.gradle文件中加入如下代码:
task makeJar(type: proguard.gradle.ProGuardTask, dependsOn: "build") {
// 未混淆的jar路径
injars 'build/intermediates/bundles/release/classes.jar'
// 混淆后的jar输出路径
outjars 'build/outputs/cocolove2-banner-1.1.0.jar'
// 混淆协议
configuration 'proguard-rules.pro'}
配置混淆协议
1.我们先把AS自带的协议配置进来中文注释,笔者添加
# This is a configuration file for ProGuard.# http://proguard.sourceforge.net/index.html#manual/usage.html## Starting with version 2.2 of the Android plugin for Gradle, these files are no longer used. Newer# versions are distributed with the plugin and unpacked at build time. Files in this directory are# no longer maintained.#表示混淆时不使用大小写混合类名-dontusemixedcaseclassnames#表示不跳过library中的非public的类-#打印混淆的详细信息-verbose# Optimization is turned off by default. Dex does not like code run# through the ProGuard optimize and preverify steps (and performs some# of these optimizations on its own).-dontoptimize##表示不进行校验,这个校验作用 在java平台上的-dontpreverify# Note that if you want to enable optimization, you cannot just# include optimization flags in your own project configuration file;# instead you will need to point to the# "proguard-android-optimize.txt" file instead of this one from your# project.properties file.-keepattributes *Annotation*
-keep public class com.google.vending.licensing.ILicensingService-keep public class com.android.vending.licensing.ILicensingService# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native-keepclasseswithmembernames class * {
native <methods>;
}# keep setters in Views so that animations can still work.# see http://proguard.sourceforge.net/manual/examples.html#beans-keepclassmembers public class * extends android.view.View {
void set*(***);
*** get*();
}# We want to keep methods in Activity that could be used in the XML attribute onClick-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keepclassmembers class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator CREATOR;
}
-keepclassmembers class **.R$* {
public static <fields>;
}# The support library contains references to newer platform versions.# Don't warn about those in case this app is linking against an older# platform version. We know about them, and they are safe.-dontwarn android.support.**# Understand the @Keep support annotation.-keep class android.support.annotation.Keep-keep @android.support.annotation.Keep class * {*;}-keepclasseswithmembers class * {
@android.support.annotation.Keep <methods>;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <fields>;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <init>(...);
}
2.AS自带的配置文档还是不够的,我们还需要加入如下配置
这里只展示基本操作,在实际开发中可能需要更多依赖,要根据具体情况引入自己需要的依赖包
#下面代码中的xx是指我个人的配置路径,涉及个人信息,这里以xx代替
#引入依赖包rt.jar(jdk路径)
-libraryjars /xxx/xx/xx/jdk1.8.0_77.jdk/Contents/Home/jre/lib/rt.jar
#引入依赖包android.jar(android SDK路径)
-libraryjars /xx/xx/xx/Android/sdk/platforms/android-24/android.jar
#如果用到Appcompat包,需要引入
-libraryjars /xxx/xxx/xx/xxx/MyApplication/library-banner/build/intermediates/exploded-aar/com.android.support/appcompat-v7/24.1.1/jars/classes.jar
-libraryjars /xx/xx/xx/xx/MyApplication/library-banner/build/intermediates/exploded-aar/com.android.support/support-v4/24.1.1/jars/classes.jar
#忽略警告
-ignorewarnings
#保证是独立的jar,没有任何项目引用,如果不写就会认为我们所有的代码是无用的,从而把所有的代码压缩掉,导出一个空的jar
-dontshrink
#保护泛型
-keepattributes Signature
3.加入自己不想混淆的配置根据实际需求配置
-keep class com.cocolove2.library_banner.view.**{*;}
在命令行执行命令混淆Jar,提示BUILD SUCCESFUL表示成功!
//mac./gradlew makeJar//windowsgradlew makeJar
示例展示
我这里以混淆library-banner库为例
1.首先我们要看看下我们的buildTool的配置,如下图:
混淆报错解决办法个人遇到的
proguard5.2.1下载地址
阅读
㈧ android如何将res文件夹下的资源打包到jar中
1:我现在正好也是碰到这个问题,就算把res文件夹打包进jar包中也不可以使用,如果jar包中某些类牵涉到res文件夹下的文件,则报错。
2:你所说的像android sdk那种方式,你可以看一下android.jar这个包,里面的res目录显示也是灰色的,里面的图片或者xml文件你同样无法查看,所以不存在想android.jar那种方式一样的情况。
3:有一种折中的方式,不过需要你的工程源码。即在eclipse下,导入你的工程,然后右键----->Properties----- >Android------>Library 下面的Is Library 选中。 之后在你新建的工程中右键----->Properties----- >Android------>Library 右侧 Add 选中你的工程名(jar)即可。
㈨ android怎么使用jar包
Android项目常常需要引用自定义的或者外部的jar包,这里提供一些经验,供参考。
一. 一般做法:
1. 通常情况下,直接将jar包在Eclipse工程中的libs目录下,就可以了,Eclipse就会自动引用过来,代码中有红叉的地方也就会消失了。
2. 查看build path中order and export中的private Libaries和Dependencies是否勾选,正确的做法是勾选。
再clean整个工程,再运行可否。
3. 你的jar文件必须也是由Android工程创建的,否则,会发生“"java.lang.NoClassDefFoundError“等错误,下面是一个错误:
12-09 00:43:05.172: E/dalvikvm(4456): Could not find class 'com.example.test4androidjar2.Jar4Android', referenced from method com.example.filemanagertest4android.MainActivity$1.onClick
4. 你的jar包必须是在Android下面编辑和编译,打包,不能在java中进行打包。FileMnager就是一例。
二.可能引起的异常:
1. Could not find class ......
2. VFY: unable to resolve new-instance 643 .....
3. Could not find class 'com.example.test4androidjar2.Jar4Android'
4. java.lang.NoClassDefFoundError...
三. 解决方法:
参考上面"一.一般做法"中提到的来做。