android如何将真三国无双7res文件夹夹下的资源打包到jar中

2894人阅读
Android(36)
&&& 项目做客服功能时候,用到了该功能。调用别人的整个jar包,(封装整个项目,打包成jar包,在直接调用。非常省事)。
&&& 然后自己也摸索下,好用是好用,但是你感觉会有局限性。加入你修改些许逻辑,就得重新打jar包。
&&& 那时候使用cordova& 加载原生自定义的进度条时候,(为什么不实用js h5写那?因为在整个项目加载js前,就得有这个进度条。为难了一段时间,还是解决了,cordova加载原生xml,网上还是少见。)想过一种解决方式就是,把进度条封装,以jar包的形式调用,但是涉及到真实数据交互,还是不好实现。。。那时候就搞过AS生成jar。
&&& 今天回过头看,发觉这个知识点生疏了好多。还是记录下吧。
&&& 至于如何生成jar包,这位哥们已经写的很好了。附上链接
只是教程中没有提到布局文件的使用,评论中也好多在问怎么使用。其中 好多提到编译成功,但是看不到jar包,这个应该就是配置问题了。应该是在库文件下的 build.gradle中添加如下代码:
task&makeJar(type:&Copy)&{
& & delete&'build/libs/mysdk.jar'
& & from('build/intermediates/bundles/release/')
& & into('build/libs/')
& & include('classes.jar')
& & rename&('classes.jar',&'mysdk.jar')
makeJar.dependsOn(build)
然后在Terminal中键入 gradlew makeJar
而不是在原项目 app下的build.gradle,按照这哥们的步骤,虽然能生成jar包。
但是这样生成的jar包里面什么有价值的东西,具体逻辑需要自己添加。
&&& 就算科普一下吧。下面是自己写了个demo ,教你如何生成jar包,如何使用映射。使用资源文件。
&&& 使用android studio生成jar包,并且使用映射来完美调用资源文件。包含两个工程,一个如何生成jar包,一个是如何使用jar包,调用资源文件。
&&& 资源文件必须放在应用jar包的工程中。
&&& 使用到工具类:ResourceUtils
&&& 使用到的技术:映射
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:28332次
排名:千里之外
原创:68篇
(4)(9)(10)(27)(12)(6)2605人阅读
今天咱们看看android studio的jar打包,但是jar包里面呢res文件是用不了的,那想用图片文件怎么办呢,这里可以把图片文件放进assets文件里面打进jar包调用还是可以得,但是有点小小的瑕疵就是jar里面assets文件夹里面的文件不能跟调用项目里面assets文件夹里面的文件重名。
好了,接下来看看到底该如何弄呢?首先第一步肯定是需要创建一个项目,这里就不演示了。
第二步:咱们需要在项目里面新new出一个module,请看图:
第三步:new了module之后呢就需要创建咱们需要调用的jar里面的代码和gradle导包需要的一些代码,这里呢我们写的代码有部分是需要调用资源图片的,所以我们这里在src\main路径里面创建一个assets文件夹,并给里面一张图片。当然了,我们打出的jar给别人用肯定是要安全点,这里呢需要加上混淆的代码了。帖完图之后我会把几个需要的代码给粘贴出来供大家参考。请看图:
这里是java代码,我这里呢就写了一个log打印,toast提示,和一个调用assets文件图片的代码。请看代码:
package com.wyw.
import android.content.C
import android.graphics.B
import android.graphics.BitmapF
import java.io.InputS
* Created by wyw on .
public class Logs {
public static void error() {
LogUtli.e();
public static Bitmap getAssets(Context context) {
Bitmap bitmap = null;
InputStream resourceAsStream = context.getClass().getClassLoader().getResourceAsStream("assets/" + "aabb");
bitmap = BitmapFactory.decodeStream(resourceAsStream);
} catch (Exception e) {
e.printStackTrace();
package com.wyw.
import android.util.L
* Created by wyw on .
public class LogUtli {
public static void e() {
Log.e("123456", "eeeeeeeee");
public static void v() {
Log.v("123456", "vvvvvvvv");
public void i() {
Log.i("123456", "iiiiiiiii");
private void d() {
Log.d("123456", "ddddddddd");
package com.wyw.
import android.content.C
import android.widget.T
* Created by wyw on .
public class ToastUtil {
public static void show(Context context, String txt) {
adshow(context, txt);
private static void adshow(Context context, String txt) {
Toast.makeText(context, txt, Toast.LENGTH_LONG).show();
接下来就是module里面的build.gradle代码,最主要的一段就是上面截图那部分。请看代码:
apply plugin: 'com.android.library'
compileSdkVersion 24
buildToolsVersion "23.0.3"
defaultConfig {
minSdkVersion 19
targetSdkVersion 24
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
buildTypes {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
compile 'com.android.support:appcompat-v7:24.2.1'
testCompile 'junit:junit:4.12'
def SDK_BASENAME = "wywSdk_V1.0";
def sdkJarPath = "build";
def zipFile = file('build/intermediates/bundles/release/classes.jar')
task makeJar(type: Jar) {
from zipTree(zipFile)
from fileTree(dir: 'src/main', includes: ['assets/**'])
baseName = SDK_BASENAME
destinationDir = file(sdkJarPath)
makeJar.dependsOn(build)
因为我们用了混淆,所以android studio 默认混淆文件proguard-rules.pro里面肯定要写一部分混淆的逻辑的,因为外部调用的代码是不能混淆的,不然外面调用的变成了a类a方法了。所以这里外面调用的是ToastUtil和Logs类,所以这2个类不能混淆,而LogUtli我们就不管了让他混淆。请看图和代码:
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keep public class com.wyw.mylibrary.ToastUtil{
public protected *;
-keep public class com.wyw.mylibrary.Logs{
public protected *;
第四步:现在咱们一切就绪了,就差打包了。好了,我们现在需要在android studio 最下面那排里面有个终端“Terminal”点击它。到终端后路径先指定到你项目的目录,然后输入gradlew makeJar这个命令。由于有的人可能打开终端的时候目录不是项目目录,你这里就需要自己手动指定到你的项目目录,至于怎么弄去百度吧,这个很多的。接下来就是按回车了,如果你是第一次用,它会先去下载文件大概几分钟吧,下完之后再运行次就可以了。请看图:
运行完之后呢,在module项目里面build文件夹下面有个jar包,这就是我们要的jar包,现在就可以把它拷贝到我们的主项目里面去了,请看图:
这里说一句就是如果改了module代码需要重新打jar包,我建议先删除build里面的部分文件,图中带红框的都需要删除,重新生成会省很多事。请看图:
第五步:把jar拷贝进了主项目,现在我们需要写一下依赖,在主项目项目的build.gradle文件里面添加这段代码compile files(‘libs/wywSdk_V1.0.jar’),添加完之后再按右上角sync Now,重新build一下。请看图:
第六步:jar和依赖都弄好了,现在我们就需要去调用了。请看图和代码:
package com.wyw.
import android.app.A
import android.graphics.B
import android.os.B
import android.widget.ImageV
import com.wyw.mylibrary.L
import com.wyw.mylibrary.ToastU
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imageView = (ImageView) findViewById(R.id.imageView);
Bitmap assets = Logs.getAssets(MainActivity.this);
if (assets != null) {
imageView.setImageBitmap(assets);
Logs.error();
ToastUtil.show(MainActivity.this, "哈哈哈哈哈哈哈");
运行验证下,看下图我们明白了jar打好了,并且assets文件夹里面的图片也调用到了。请看图:
如果细心的看下会发现我们的jar包里面的a类里面的方法就只有一个了。原本混淆类的方法是有4个的,为什么会变的只有一个了呢,这个就是混淆的规则了就是混淆的代码只有调用的部分才会打包进去,而没有混淆的代码是全部打包进去。请看图的对比(灰色的方法是没有被调用):
好了,本篇博客就到这里,如果有疑问的欢迎留言讨论。同时希望大家多多关注我的博客,多多支持我。
尊重原创转载请注明:() !
下面是地址传送门:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:42702次
排名:千里之外
原创:31篇
转载:21篇
评论:81条
(2)(2)(1)(4)(1)(2)(1)(1)(3)(1)(2)(1)(2)(2)(3)(1)(1)(4)(2)(3)(13)

我要回帖

更多关于 真三国无双7res文件夹 的文章

 

随机推荐