文章目录:
- 1、如何保证自己打的jar包不会被别人窃取源代码
- 2、android library 怎么不让看源码
- 3、编写好的程序 怎么样打包发送呢?(使其不能够看到源代码)
- 4、如何将安卓源代码打包
- 5、怎样防止Android apk被反编译,用什么加密方法来保护dex源码文件不被注入恶意代码杜绝二次打包的出现?
- 6、如何运行打包的android源代码文件
如何保证自己打的jar包不会被别人窃取源代码
不可能的,就算你打包为.class文件,也可以反编译的。
一般你能给人家.jar,打包.class文件就足够了吧,防贼一样
android library 怎么不让看源码
Android Library Project(库工程)是一个可以被其他Android工程所引用的工程。那为什么需要使用这个工程呢,打个比方,我们在开发Android项目的时候,常常会遇到这样的问题,几个Android项目的开发过程中,会有可以重复利用的代码段或者资源。如果每个项目都要重复编写或者添加这些代码或者资源,将会非常的影响效率。为了避免重复发明轮子,我们可以将这些重复的资源添加到Android Library Project中。那么以后,我们要复用这些东西的时候,只要在当前项目中引用这个Android Library Project就可以了。当然我们的Android Lib Library不仅仅是给我们自己使用,如果我们要把这个Android Lib Project共享给别人,但是又不希望暴露自己的源代码,那么,这就是我们这篇文章要讲的内容。
How
首先,这篇文章中我们会提到三个项目。
LibraryProject : 我们需要共享给别人的不包含源代码的工程。
LibraryProjectSource : LibraryProject包含源代码的版本。
AndroidProject : 引用LibraryProject的版本。
和我们开发正常的Android项目一样,我们先建立一个项目,但是在开始正常的编码之前,我们需要先弄清楚原理和注意事项。不暴露源码的方式是将LibraryProjectSource中的源代码打包成JAR包,然后添加到我们要共享给他人的工程中。如果这个工程中没有引用到资源(res目录下的文件),那么就很容易实现了。但是如果有引用到资源(例如通过R.id.resource方式),我们就可以能会遇到资源引用错乱的问题。
打个比方,在AndroidProject中如果引用TextView可以会定位到一个ImageView上。这是因为,如果在源代码中有使用R.id.resource引用资源,在编译成JAR包的时候,R.id.resource会用R.java文件中相应的十六进制的int值替换。但是在AndroidProject文件中资源的会结合LibraryProject中的资源重新生成一个新的十六进制int值。而同一个资源,在LibraryProjectSource中的这个int值和AndroidProject中的就可能不相同了。
所以我们必须实时的获取这个十六进制的数值。有两个方式可以选择:
1.(推荐)通过android.content.res.Resources类的`int getIdentifier(String name, String defType, String defPackage)` . 比如,我们需要在Activity中设置布局,我们要得到res/layout/目录下的 “main_layout.xml” 布局文件的ID.
@Overrideprotected void onCreate(Bundle savedInstanceState) { ... int id = getResources().getIdentifier(“main_layout“, "layout", getPackageName()); setContentView(id); ...}
2.使用Java语言的反射机制。但是使用反射毕竟麻烦。
Field field = R.layout.class.getField("main_layout");int i = field.getInt(new R.layout());return i;
Publish
最后,我们需要将编写好的源代码导成JAR包,添加到LibraryProject中。然后我们就可以将这个工程共享给其他人了。具体步骤如下:
1. 将LibraryProjectSource的类文件导出:打开工程文件夹目录-打开bin目录-将与工程名相同的JAR文件复制出来。将原工程依赖的JAR包导出:打开工程文件夹目录-打开libs目录-其中的JAR文件复制出来。
2. 建立一个与 LibraryProjectSource 的包名相同的 LibraryProject(包名是Android系统辨识应用程序的标志),创建的时候不选择创建Activity,将这个工程作为Lib工程。
3. 将1中导出两种包复制到Lib工程的libs文件夹下,右键Lib工程-Properties-Android-勾选“Is Library”-确定。将 LibraryProjectSource 文件夹下的资源文件复制到Lib工程下(主要是assets和res文件夹,替换原来的文件)。把原工程中AndroidManifest.xml替换此工程的AndroidManifest.xml。这样Lib Project就完成了。
4. 之后,写一个Demo(AndroidProject)测试一下 LibraryProject 能否使用:
新建工程-右键工程-Properties-Android-Add-选择2中建立的LibraryProject-OK;
接着从LibraryProject导入1中导出的类文件:右键工程-Properties-Java Build Path-Add JARs-选中2中的Lib 工程下的libs文件下的与1中原工程同名的JAR包,再选择Order and Export,将加入的包打钩。
把Lib中的AndroidManifest.xml中必要的部分复制到Demo工程中,例如:原工程中需要用到的权限声明,activity,service,broadcast部分。
编写好的程序 怎么样打包发送呢?(使其不能够看到源代码)
把编译后的
EXE
给别人就可以了。
如果你是用的
.NET
平台,则必须依赖
.NET
Framework
才能运行。
否则不必须
如何将安卓源代码打包
不需要什么特别的软件,在Ubuntu下面,直接使用tar命令或者gzip命令就可以了,Windows下直接使用压缩工具打包即可。
怎样防止Android apk被反编译,用什么加密方法来保护dex源码文件不被注入恶意代码杜绝二次打包的出现?
1、混淆java代码。增加无用代码,或者重命名,使反编译后的源代码难于看懂。
2、关键代码使用jni调用本地代码,用c或c++编写,相对于class文件,so相对比较难于反编译。 需要开发者熟悉如何写c或c++代码。
3、如果自身时间或者技术有局限的话,现在国内有第三方加密平台。最近有家叫做 爱加密的非常活跃建议一试而且是免费的。
总的来说APP加密保护是一项比较难精的技术,易学的安全性能不佳。技术也在不断的更新,是没有绝对安全的。到不如直接交给专业的处理。
如何运行打包的android源代码文件
android源码目录下的build/envsetup.sh文件,描述编译的命令
-
m:
makes
from
the
top
of
the
tree.
-
mm:
builds
all
of
the
modules
in
the
current
directory.
-
mmm:
builds
all
of
the
modules
in
the
supplied
directories.
要想使用这些命令,首先需要在android源码根目录执行.
build/envsetup.sh
脚本设置环境
m:编译所有的模块
mm:编译当前目录下的模块,当前目录下要有android.mk文件
mmm:编译指定路径下的模块,指定路径下要有android.mk文件
下面举个例子说明,假设我要编译android下的\hardware\libhardware_legacy\power模块,当前目录为源码根目录,方法如下:
1、.
build/envsetup.sh
2、mmm
hardware/libhardware_legacy/power/
编译完后
运行
make
snod
会重新将你改过的模块打入到system.img中
二次打包的出现?1、混淆java代码。增加无用代码,或者重命名,使反编译后的源代码难于看懂。2、关键代码使用jni调用本地代码,用c或c++编写,相对于class文件,so相对比较难于反编译。 需要开发