精华内容
下载资源
问答
  • 想要调用第三方软件首先必须知道intent 这里使用逆向工具获取清单文件的...activity android:configChanges="keyboardHidden|locale|orientation|screenSize" android:icon="@drawable/icon_title" android:name="c...

    想要调用第三方软件首先必须知道intent
    这里使用逆向工具获取清单文件的IntentFilter

    PrinterShare 清单

     <activity android:configChanges="keyboardHidden|locale|orientation|screenSize" android:icon="@drawable/icon_title" android:name="com.dynamixsoftware.printershare.ActivityWeb">
                <intent-filter>
                    <category android:name="android.intent.category.DEFAULT"/>
                    <action android:name="android.intent.action.VIEW"/>
                    <data android:scheme="file"/>
                    <data android:scheme="content"/>
                    <data android:mimeType="text/html"/>
                </intent-filter>
                <intent-filter>
                    <category android:name="android.intent.category.DEFAULT"/>
                    <action android:name="android.intent.action.VIEW"/>
                    <data android:scheme="content"/>
                    <data android:scheme="file"/>
                    <data android:host="*"/>
                    <data android:pathPattern=".*\\.htm"/>
                    <data android:pathPattern=".*\\.html"/>
                </intent-filter>
                <intent-filter>
                    <category android:name="android.intent.category.DEFAULT"/>
                    <action android:name="android.intent.action.SEND"/>
                    <data android:mimeType="text/*"/>
                </intent-filter>
    </activity>
    <activity android:configChanges="keyboardHidden|locale|orientation|screenSize" android:icon="@drawable/icon_title" android:name="com.dynamixsoftware.printershare.ActivityPrintPDF">
                <intent-filter>
                    <category android:name="android.intent.category.DEFAULT"/>
                    <action android:name="android.intent.action.VIEW"/>
                    <data android:scheme="content"/>
                    <data android:scheme="file"/>
                    <data android:mimeType="application/pdf"/>
                </intent-filter>
                <intent-filter>
                    <category android:name="android.intent.category.DEFAULT"/>
                    <action android:name="android.intent.action.SEND"/>
                    <data android:mimeType="application/pdf"/>
                </intent-filter>
                <intent-filter>
                    <category android:name="android.intent.category.DEFAULT"/>
                    <action android:name="android.intent.action.VIEW"/>
                    <data android:scheme="content"/>
                    <data android:scheme="file"/>
                    <data android:host="*"/>
                    <data android:pathPattern=".*\\.pdf"/>
                </intent-filter>
     </activity>
     <activity android:configChanges="keyboardHidden|locale|orientation|screenSize" android:icon="@drawable/icon_title" android:name="com.dynamixsoftware.printershare.ActivityPrintDocuments">
                <intent-filter>
                    <category android:name="android.intent.category.DEFAULT"/>
                    <action android:name="android.intent.action.VIEW"/>
                    <data android:scheme="content"/>
                    <data android:scheme="file"/>
                    <data android:mimeType="text/plain"/>
                    <data android:mimeType="application/vnd.ms-word"/>
                    <data android:mimeType="application/msword"/>
                    <data android:mimeType="application/doc"/>
                    <data android:mimeType="application/vnd.msword"/>
                    <data android:mimeType="application/winword"/>
                    <data android:mimeType="application/word"/>
                    <data android:mimeType="application/x-msw6"/>
                    <data android:mimeType="application/x-msword"/>
                    <data android:mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document"/>
                    <data android:mimeType="application/vnd.ms-excel"/>
                    <data android:mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"/>
                    <data android:mimeType="application/vnd.ms-powerpoint"/>
                    <data android:mimeType="application/vnd.openxmlformats-officedocument.presentationml.presentation"/>
                    <data android:mimeType="application/haansofthwp"/>
                </intent-filter>
                <intent-filter>
                    <category android:name="android.intent.category.DEFAULT"/>
                    <action android:name="android.intent.action.SEND"/>
                    <data android:mimeType="message/rfc822"/>
                    <data android:mimeType="application/vnd.ms-word"/>
                    <data android:mimeType="application/msword"/>
                    <data android:mimeType="application/doc"/>
                    <data android:mimeType="application/vnd.msword"/>
                    <data android:mimeType="application/winword"/>
                    <data android:mimeType="application/word"/>
                    <data android:mimeType="application/x-msw6"/>
                    <data android:mimeType="application/x-msword"/>
                    <data android:mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document"/>
                    <data android:mimeType="application/vnd.ms-excel"/>
                    <data android:mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"/>
                    <data android:mimeType="application/vnd.ms-powerpoint"/>
                    <data android:mimeType="application/vnd.openxmlformats-officedocument.presentationml.presentation"/>
                    <data android:mimeType="application/haansofthwp"/>
                </intent-filter>
                <intent-filter>
                    <category android:name="android.intent.category.DEFAULT"/>
                    <action android:name="android.intent.action.VIEW"/>
                    <data android:scheme="content"/>
                    <data android:scheme="file"/>
                    <data android:host="*"/>
                    <data android:pathPattern=".*\\.txt"/>
                    <data android:pathPattern=".*\\.doc"/>
                    <data android:pathPattern=".*\\.docx"/>
                    <data android:pathPattern=".*\\.xls"/>
                    <data android:pathPattern=".*\\.xlsx"/>
                    <data android:pathPattern=".*\\.ppt"/>
                    <data android:pathPattern=".*\\.pptx"/>
                    <data android:pathPattern=".*\\.hwp"/>
                </intent-filter>
    </activity>
    <activity android:configChanges="keyboardHidden|locale|orientation|screenSize" android:icon="@drawable/icon_title" android:name="com.dynamixsoftware.printershare.ActivityPrintPictures">
                <intent-filter>
                    <category android:name="android.intent.category.DEFAULT"/>
                    <action android:name="android.intent.action.VIEW"/>
                    <data android:scheme="content"/>
                    <data android:scheme="file"/>
                    <data android:mimeType="image/gif"/>
                    <data android:mimeType="image/png"/>
                    <data android:mimeType="image/jpeg"/>
                </intent-filter>
                <intent-filter>
                    <category android:name="android.intent.category.DEFAULT"/>
                    <action android:name="android.intent.action.SEND"/>
                    <action android:name="android.intent.action.SEND_MULTIPLE"/>
                    <data android:mimeType="image/gif"/>
                    <data android:mimeType="image/png"/>
                    <data android:mimeType="image/jpeg"/>
                </intent-filter>
                <intent-filter>
                    <category android:name="android.intent.category.DEFAULT"/>
                    <action android:name="android.intent.action.VIEW"/>
                    <data android:scheme="content"/>
                    <data android:scheme="file"/>
                    <data android:host="*"/>
                    <data android:pathPattern=".*\\.gif"/>
                    <data android:pathPattern=".*\\.png"/>
                    <data android:pathPattern=".*\\.jpeg"/>
                    <data android:pathPattern=".*\\.jpg"/>
                </intent-filter>
                <intent-filter>
                    <action android:name="com.sec.android.app.mobileprint.PRINT"/>
                    <action android:name="com.sec.android.app.mobileprint.PRINT_SETTING"/>
                    <category android:name="android.intent.category.DEFAULT"/>
                </intent-filter>
    </activity>
    

    主要就4个Activity

    • ActivityPrintPDF 打印PDF
    • ActivityPrintDocuments 打印文档
    • ActivityPrintPictures 打印图片
    • ActivityWeb 打印网页

    最后根据intent-filter 封装工具类

    package me.leon;
    
    import android.content.ComponentName;
    import android.content.Context;
    import android.content.Intent;
    import android.net.Uri;
    import android.os.Environment;
    import android.text.TextUtils;
    
    import java.io.File;
    
    /**
     * <p>description:</p>
     * <p>author:Leon</p>
     * <p>date:2019/7/18 0018</p>
     * <p>e-mail:deadogone@gmail.com</p>
     */
    public class PrinterShareMgr {
        private static PrinterShareMgr mgr = new PrinterShareMgr();
    
        public static PrinterShareMgr getInstance() {
            return mgr;
        }
    
        private PrinterShareMgr() {
        }
    
        public void printFile(Context context, String filePath) {
            if (TextUtils.isEmpty(filePath)) {
                return;
            }
            Intent intent = new Intent(Intent.ACTION_VIEW);
            Uri data = Uri.fromFile(new File(filePath));
            ComponentName comp = null;
            if (filePath.endsWith("pdf")) {
                intent.setDataAndType(data,"application/pdf");
                comp = new ComponentName("com.dynamixsoftware.printershare", "com.dynamixsoftware.printershare.ActivityPrintPDF");
            } else if (filePath.endsWith("doc") || filePath.endsWith("docx")||filePath.endsWith("txt")){
                intent.setDataAndType(data,"application/doc");
                comp = new ComponentName("com.dynamixsoftware.printershare", "com.dynamixsoftware.printershare.ActivityPrintDocuments");
            }else if (filePath.endsWith("jpg") || filePath.endsWith("jpeg") || filePath.endsWith("gif") || filePath.endsWith("png")){
                intent.setDataAndType(data,"image/jpeg");
                comp = new ComponentName("com.dynamixsoftware.printershare", "com.dynamixsoftware.printershare.ActivityPrintPictures");
            }else if (filePath.endsWith("html")||filePath.endsWith("htm")){
                intent.setDataAndType(data,"text/html");
                comp = new ComponentName("com.dynamixsoftware.printershare", "com.dynamixsoftware.printershare.ActivityWeb");
            }
            intent.setComponent(comp);
            context.startActivity(intent);
        }
    }
    
    

    Note:

    1. 安装PrinterShare完成后 请自行更新对应打印机驱动
    2. 请自行兼容android 7.0 及补全未包含的文件格式
    3. 隐藏导航栏时,打印成功无法返回

    参考
    https://blog.csdn.net/qilin001cs/article/details/54616108
    附件下载:
    PrinterShare
    AndroidKiller 1.3.1 csdn 蓝奏

    展开全文
  • Android使用RecyclerView绘制表格

    万次阅读 2016-12-08 15:35:29
    Android使用RecyclerView绘制表格

    一、效果图

    效果图

    二、创建步骤:

    思路:其实就是将MainActivity中写好表头布局,同时和RecyclerView的Item布局保持一致,这里面列之间使用View进行分割,边框使用layer-list和shape实现。

    1:MainActivity代码:

    public class MainActivity extends AppCompatActivity {
        private RecyclerView rv_sheet;
        private List<entity> list;
        private SheetAdapter sheetAdapter;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //数据,一般从后台通过网络请求到
            list = new ArrayList<entity>();
            for (int i = 0; i < 30; i++) {
                list.add(new entity("Wade", "James", "Kobe"));
            }
    
    
            rv_sheet = (RecyclerView) findViewById(R.id.rv_sheet);
            //设置线性布局 Creates a vertical LinearLayoutManager
            rv_sheet.setLayoutManager(new LinearLayoutManager(this));
            //设置recyclerView每个item间的分割线
            rv_sheet.addItemDecoration(new DividerItemDecoration(this,
                    DividerItemDecoration.VERTICAL_LIST));
            //创建recyclerView的实例,并将数据传输到适配器
            sheetAdapter = new SheetAdapter(list);
    
            rv_sheet.setAdapter(sheetAdapter);
    
        }
    }
    

    2、MainActivity布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:orientation="vertical"
        tools:context=".MainActivity"
        >
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/border"
            android:orientation="horizontal">
            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="2"
                android:gravity="center"
                android:paddingBottom="10dp"
                android:paddingTop="10dp"
                android:singleLine="true"
                android:text="表头1"
                android:textColor="#000000"
                android:textSize="15sp" />
    
            <View
                android:layout_width="1.5dp"
                android:layout_height="match_parent"
                android:background="#000000" />
    
            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center"
                android:paddingBottom="10dp"
                android:paddingTop="10dp"
                android:singleLine="true"
                android:text="表头2"
                android:textColor="#000000"
                android:textSize="15sp" />
    
            <View
                android:layout_width="1.5dp"
                android:layout_height="match_parent"
                android:background="#000000" />
    
            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center"
                android:paddingBottom="10dp"
                android:paddingTop="10dip"
                android:singleLine="true"
                android:text="表头3"
                android:textColor="#000000"
                android:textSize="15sp" />
        </LinearLayout>
        <android.support.v7.widget.RecyclerView
            android:id="@+id/rv_sheet"
            android:name="com.example.wjm19.sheetdemo"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        </android.support.v7.widget.RecyclerView>
    </LinearLayout>
    
    

    3、RecyclerView适配器代码

    
    /**
     * Created by wjm on 2016/12/6.
     */
    public class SheetAdapter extends RecyclerView.Adapter {
        private  List<entity> list;
    
        public SheetAdapter(List<entity> list) {
            this.list = list;
        }
    
        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.sheet_item_layout, parent, false);
            return new sheetViewHolder(view);
        }
    
        @Override
        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
            sheetViewHolder vh = (sheetViewHolder) holder;
    
            vh.getTv_sheetRow1().setText(list.get(position).getSheetRow1());
            vh.getTv_sheetRow2().setText(list.get(position).getSheetRow2());
            vh.getTv_sheetRow3().setText(list.get(position).getSheetRow3());
    
        }
    
        @Override
        public int getItemCount() {
            return list.size();
        }
    
        public class sheetViewHolder extends RecyclerView.ViewHolder{
            public final View mView;
            public final TextView tv_sheetRow1;
            public final TextView tv_sheetRow2;
            public final TextView tv_sheetRow3;
    
            public sheetViewHolder(View itemView) {
                super(itemView);
                mView = itemView;
                tv_sheetRow1 = (TextView) itemView.findViewById(R.id.tv_sheetRow1);
                tv_sheetRow2 = (TextView) itemView.findViewById(R.id.tv_sheetRow2);
                tv_sheetRow3 = (TextView) itemView.findViewById(R.id.tv_sheetRow3);
            }
    
            public TextView getTv_sheetRow1() {
                return tv_sheetRow1;
            }
    
            public TextView getTv_sheetRow2() {
                return tv_sheetRow2;
            }
    
            public TextView getTv_sheetRow3() {
                return tv_sheetRow3;
            }
        }
    }
    

    4、RecyclerView 中的Item布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/border">
        <TextView
            android:id="@+id/tv_sheetRow1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:gravity="center"
            android:paddingBottom="10dp"
            android:paddingTop="10dp"
            android:text="第一列"
            android:textColor="#000000"
            android:textSize="15sp" />
    
        <View
            android:layout_width="1.5dp"
            android:layout_height="match_parent"
            android:background="#000000" />
    
        <TextView
            android:id="@+id/tv_sheetRow2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:paddingBottom="10dp"
            android:paddingTop="10dp"
            android:text="第二列"
            android:textColor="#000000"
            android:textSize="15sp" />
    
        <View
            android:layout_width="1.5dp"
            android:layout_height="match_parent"
            android:background="#000000" />
    
        <TextView
            android:id="@+id/tv_sheetRow3"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:paddingBottom="10dp"
            android:paddingTop="10dip"
            android:text="第三列"
            android:textColor="#000000"
            android:textSize="15sp" />
    </LinearLayout>
    

    5、实体类

    /**
     * 实体类
     * Created by wjm on 2016/12/7.
     */
    public class entity {
        //第一列表头
        private String sheetRow1;
        //第二列表头
        private String sheetRow2;
        //第三列表头
        private String sheetRow3;
    
        public entity(String sheetRow1, String sheetRow2, String sheetRow3) {
            this.sheetRow1 = sheetRow1;
            this.sheetRow2 = sheetRow2;
            this.sheetRow3 = sheetRow3;
        }
    
        public String getSheetRow1() {
            return sheetRow1;
        }
    
        public void setSheetRow1(String sheetRow1) {
            this.sheetRow1 = sheetRow1;
        }
    
        public String getSheetRow2() {
            return sheetRow2;
        }
    
        public void setSheetRow2(String sheetRow2) {
            this.sheetRow2 = sheetRow2;
        }
    
        public String getSheetRow3() {
            return sheetRow3;
        }
    
        public void setSheetRow3(String sheetRow3) {
            this.sheetRow3 = sheetRow3;
        }
    }
    

    代码都非常简单,对recyclerView稍微熟一点的应该很容易看懂。
    源码地址:sheetDemo

    展开全文
  • Android使用Application总结

    万次阅读 热门讨论 2012-06-15 17:42:56
    Application 配置全局Context 第一步、写一个全局的单例模式的MyApplication继承自Application 覆盖onCreate ,在这个方法里面实例化Application 第二步、配置全局的...Android使用Google Dalvik VM,相对于

    Application 配置全局Context

    第一步、写一个全局的单例模式的MyApplication继承自Application 覆盖onCreate ,在这个方法里面实例化Application

    第二步、配置全局的Context

    <application android:name="com.appstore.service.MyApplication" ></application>

    第三步、使用,使用的时候用的时候根据类的名称访问Context

    Android程序的入口点

    Android使用Google Dalvik VM,相对于传统Java VM而言有着很大的不同,在Sun的Java体系中入口点和标准c语言一样是main(),而每个Android程序都包含着一个Application实例,一个Application实例中有多个Activity、Service、ContentProvider或Broadcast Receiver。因为大部分的应用都包含Activity所以,说很多网友认为是Activity的onCreate,但是你没有发现你的工程中有多个Activity吗? 你可能没有见过没有Activity的Android应用吧。

    其实在android.app.Application这个包的onCreate才是真正的Android入口点,只不过大多数开发者无需重写该类,他的继承关系如下图:

    java.lang.Object
    ? android.content.Context
    ? android.content.ContextWrapper
    ? android.app.Application

    android.app.Application类包含了4个公开的方法

    void  onConfigurationChanged(Configuration newConfig)
    void  onCreate()  //这里才是真正的入口点。
    void  onLowMemory()
    void  onTerminate()

    所以希望大家,记住真正的Android入口点是application的main,你可以看下androidmanifest.xml的包含关系就清楚了,并不是每个应用都必须有Activity的。

    android中application 关于全局变量

    android编程中,application这样的名词似乎变得那样的不常见,而让大家更为熟悉的是activity、intent、provider、broadcast和service。但其实android中的application也有着它自身的用处。

    打开manifest文件,会看到有一个application配置标签,这就是有关application的使用了。那究竟application有什么用处呢?来看看SDK中是如何描述的:

    Base class for those who need to maintain global application state. You can provide your own implementation by specifying its name in your AndroidManifest.xml's < application> tag, which will cause that class to be instantiated for you when the process for your application/package is created.

    就是说application是用来保存全局变量的,并且是在package创建的时候就跟着存在了。所以当我们需要创建全局变量的时候,不需要再像 j2se那样需要创建public权限的static变量,而直接在application中去实现。只需要调用Context的 getApplicationContext或者Activity的getApplication方法来获得一个application对象,再做出相应的处理。

    因小工程中涉及到的文件比较多,这里就贴代码撒。

    application文件:

    Java代码:

    public class TestApplication extends Application {

    private int curIndex;

    public int getCurIndex() {

    return curIndex;

    }

    public void setCurIndex(int curIndex) {

    this.curIndex = curIndex;

    }

    @Override

    public void onCreate() {

    super.onCreate();

    }

    @Override

    public void onTerminate() {

    super.onTerminate();

    }

    }

    application中有一个curIndex和setter getter方法。

    第一个acitivty中对application进行的操作:

    Java代码:

    TestApplication application = (TestApplication) this.getApplication();

    Log.i("data", ""+application.getCurIndex());

    application.setCurIndex(5);

    第二个Activity:

    Java代码:

    TestApplication application = (TestApplication)this.getApplication();

    Log.i("data", ""+application.getCurIndex());

    application.setCurIndex(6);

    第三个Activity:

    Java代码

    final TestApplication application = (TestApplication) this.getApplication();

    Log.i("data", ""+application.getCurIndex());

    在运行过程中,每一次都kill掉对应的Activity,再进入下一个Activity。

    展开全文
  • 本文关联文章:安卓多渠道打包:使用Gradle和安卓 Studio 官方文档:...1. 默认为debug mode,使用的签名文件在:$HOME/.android/debug.keystore 2. Release Mode 签名: build....

    本文关联文章安卓多渠道打包:使用Gradle和安卓 Studio

     

    官方文档:https://developer.android.com/tools/publishing/app-signing.html

     

    1. 默认为debug mode,使用的签名文件在: $HOME/.android/debug.keystore

     

    2. Release Mode 签名:

     build.gradle

        

    android {
    	signingConfigs {
    		releaseConfig {
    			keyAlias 'stone'
    			keyPassword 'mypwd'
    			storeFile file('/Users/stone/Documents/project_AS/myapplication/stone.keystore')
    			storePassword 'mypwd'
    		}
    	}
            buildTypes {
               release {
                 ...
                 signingConfig signingConfigs.release
               }
            }
    
    }

    ( 插一句:上文中,由于当时编辑失误, 要修正一个地方,感谢评论里的小哥哥。 release { ...   signingConfig signingConfigs.releaseConfig } )

    signingConfigs 即签名配置。 配置名releaseConfig{ //配置内容 }

    在buildTypes中指定release时的signingConfigs对应的配置名 

     

    执行gradle 命令, $ gradle assembleRelease 

    编译并发布。 在build/outputs/apk/ 下能看到未签名的apk 和 已经签名的apk

    如果未用签名文件,使用debug mode的debug签名。那就会生成一个debug签名的apk

     

    3. 签名密码写在gradle中不安全:

     

    signingConfigs { //gradle assembleRelease
    	myConfig {
    		storeFile file("stone.keystore")
    		storePassword System.console().readLine("\nKeystore password: ")
    		keyAlias "stone"
    		keyPassword System.console().readLine("\nKey password: ")
    	}
    }


    这样在命令 执行 命令时,就会被要求输入密码

     

     

    4. 使用Android Studio 签名打包

     

       菜单 Build > Generate Signed APK

     

    5. 使用Android Studio 自动签名打包

       a. 打开project structure (cmd+;)

       b. 选中需要构建的moudle,打开Signing,添加config

       

          执行完成后,会在build.gradle中自动加上 signingConfigs{ config {...} }的信息

       c. 打开build types > release

        在signing Config中选择定义的配置

        zip align enabled 默认为true, 用于启用优化Apk的操作

       d. $ gradle build

          会在build/outputs/apk/ 目录下输出 在build types中定义的 编译类型

         如:

      myapplication-debug-unaligned.apk
      myapplication-debug.apk
      myapplication-release-unaligned.apk
      myapplication-release-unsigned.apk
      myapplication-release.apk

     

    6. 使用Android SDK 和 JDK 的命令 签名打包APK

     创建签名
      keytool -genkey -v -keystore stone.keystore -alias stone -keyalg RSA -keysize 2048-validity 10000  生成签名文件
     为apk签名
      jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore stone.keystore unsigned.apk stone 不生成新文件
     检测apk是否签名
      jarsigner  -verbose -certs -verify signed.apk 
     优化apk
      zipalign -f -v 4 signed_unaligned.apk signed_aligned.apk 

     

     

    展开全文
  • Android使用Thread的interrupt与sleep,重启或暂停线程任务本文给出一个例子,简单说明如何在Android诸如Activity中,重启或者暂停一个正在无限运作的线程。需求描述:假设在Android的Activity中,有一个线程,永不...
  • Android使用@BindView

    千次阅读 2019-06-02 20:06:34
    是一个专注于Android系统的View注入框架,可以减少大量的findViewById以及setOnClickListener代码,可视化一键生成。 在buider.gradle(app中的dependencies加入): implementation '...
  • android 使用xml让animation按顺序播放

    千次阅读 2016-07-17 15:00:58
    android 使用xml让animation按顺序播放需求:想让一个View按顺序播放我已经用xml文件定义好的动画,之前我是监听动画的结束,在前一个动画结束的时候,开启第二个动画,但是这样写太麻烦。 最后发现还可以这样写。...
  • 本来准备下载个CSDN的客户端放手机上,没事可以浏览浏览资讯,下载了官方的之后,发现并不能很好的使用。恰好搜到一个大神自己写的csdn的app,下载安装了一下,感觉很不错,也很流畅,基本满足了我们 日常浏览的需求...
  • Android使用串口(基于android-serialport-api)

    万次阅读 热门讨论 2018-06-07 10:32:14
    运行平台: CPU:全志V40 Android版本:6.0.1 关于安卓设备上使用串口,谷歌官方在github上有提供代码实例,里面有JNI的代码和串口API的java文件,工程的地址如下: ...我使用Android Studio,如果直接...
  • Android使用Vector进行适配和瘦身

    万次阅读 2018-01-02 12:12:32
    Android Vector在android5.0开始google提供了Vector的支持,到现在为止google已经提供了低版本的兼容,Vector的技术也越来越完善,因此日后在android使用Vector是一个趋势。Android Vector的优势: Vector图像可以...
  • android 使用signingConfigs进行打包

    万次阅读 2017-10-10 08:45:52
    今天,简单讲讲如何使用android studio指定证书打包。 我们使用Android Studio 运行我们的app,无非两种模式:debug和release模式。 debug模式 debug模式使用一个默认的debug.keystore进行签名。 这个默认...
  • Android使用Bundle进行数据传递分析

    千次阅读 2011-12-19 10:49:50
    Android使用Intent.putSerializable()进行数据传递,或者使用Bundle进行数据传递,实质上都是进行的Serializable数据的操作,说白了都是传递的原数据的一份拷贝,因此通过对象的传递来控制Android应用是不现实的 ...
  • Android使用selector文件点击文字变色

    万次阅读 2016-09-22 22:37:21
    Android使用selector文件点击文字变色在开发中我们给按钮或者一段文字做点击事件的时候,很多时候不仅背景需要改变,文字的颜色也是要根据点击来跟着改变,今天刚好自己详细的做了这个,并且对比了一下几个参数的特点,写...
  • android 使用TableLayout 绘制表格

    万次阅读 2017-10-20 15:44:59
    前言 在android开发中 有时候要绘制表格,这时候我们就想到了tablelayout布局了。 话不多说 直接看效果图 关键代码: android:divider="@drawable/line_h" ...所有继承LinearLayout的布局都可以使用
  • android 使用浏览器打开指定页面

    万次阅读 2018-06-13 08:31:40
    今天,简单讲讲android里如何使用浏览器打开指定的网页。之前,我做一个功能时,服务器返回一个url地址,我需要跳转到指定网页。却发现自己不知道怎么做,在网上搜索了资料,最终是解决了问题。这里记录一下。启动...
  • Android 使用模拟位置(支持Android 6.0)

    万次阅读 热门讨论 2016-05-13 09:47:31
    开启系统设置中的模拟位置 Android 6.0 以下:【开发者选项 -> 允许模拟位置】 Android 6.0 及以上:【开发者选项 -> 选择模拟位置信息应用】
  • Android 使用AndroidPdfViewer显示PDF

    万次阅读 2020-03-20 16:31:21
    在我们的项目中,经常需要对WebView中加载的内容是否完成或者是否加载失败进行判别,这两天写的一个小应用就涉及到了这一点。 WebView的实质就是loadUrl,所以前提是设备接入网络,那么这个如何判断呢?...
  • Android使用SVG小结

    万次阅读 2017-05-18 16:37:47
    android也在5.0中新增了对使用svg矢量图支持,现在网上也有大把关于svg的文章但是使用时还是有遇到了许多坑,所以在这里我就总结了下我在使用svg过程中遇到的各种坑,希望对大家有所帮助。VectorDra
  • Android使用ADB启动应用程序

    万次阅读 2016-12-31 18:56:10
    Android中可以从命令行启动程序,使用的是命令行工具am。一、启动步骤1、adb shell 进入Android系统命令行 2、am start -n {包(package)名}/{包名}.{活动(activity)名称} 二、启动系统应用calendar(日历)的...
  • Android使用videoview播放res/raw下的视频

    千次阅读 2016-01-30 00:23:02
    Android使用videoview播放res/raw下的视频videoView.setVideoURI(Uri.parse("android.resource://com.leapfrog.mergelayoutswithevents/raw/videoplayback"); videoView.setVideoURI(Uri.parse("android.resource://...
  • Android使用fitsSystemWindows属性实现–状态栏【status_bar】各版本适配方案 首先我们看下qq的status bar在各个android版本系统中适配:1.Android5.0以上:半透明(APP 的内容不被上拉到状态) 2.Android4.4以上:全...
  • 在我的博客中,上次是使用ViewPager实现左右滑动的效果的,请看文章:Android使用ViewPager实现左右滑动效果 。   这次我来使用ViewFlipper实现这种效果,好了,先看看效果吧:         效果看完...
  • Android 使用Sharedpreference存储数据

    万次阅读 2018-06-07 21:11:10
    Android中,很多应用都需要存储一些参数,例如在天气app中,在某一次使用时用户添加了若干个城市,当用户下一次点开时也希望之前设置的城市会保存在手机中,以方便直接获取信息。这个时候就需要用到 ...
  • Android使用EventBus遇到的坑!

    万次阅读 2016-09-02 11:31:31
    Android中EventBus使用
  • android使用Leaks检测内存泄漏

    万次阅读 多人点赞 2016-06-06 14:33:21
    Leaks 内存泄漏检测工具使用网址:https://github.com/square/leakcanary 在你的module中添加依赖debugCompile 'com.squareup.leakcanary:leakcanary-android:1.4-beta2' releaseCompile '...
  • Android使用FtpServer开启FTP服务端

    千次阅读 热门讨论 2018-04-25 17:41:56
    使用之前需要先下载jar包,可以在官网下载或者从下文附带的DEMO源码中拿 在AndroidManifest.xml中声明权限 &lt;uses-permission android:name="android.permission.INTERNET"/&gt; &lt;...
  • android使用webview加载网页

    万次阅读 2014-04-17 14:55:52
    package com.example.webview; import android.os.Bundle; import android.annotation.SuppressLint; import android.app.Activity; import android.view.KeyEvent; import android.view.Menu; import android.webk
  • Android 使用 MuMu模拟器 进行程序调试

    万次阅读 2018-07-02 12:09:11
    MuMu模拟器速度快,体积小,版本新(目前beta已到6.0),推荐使用在调试中 本文环境: android-studio-ide-143.2739321-windows MuMu模拟器 2.0.4 android sdk 19版,即4.4 KitKat Build-Tools版本是21.1.2 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,660,055
精华内容 664,022
关键字:

android使用