[AIR接入Android 平台]ane中jar包中有资源文件处理

jar包有资源文件时:可以使用原生打包然后在解包查看资源文件位置

如:移动mm的jar中的资源文件解包后资源文件在manifest同级:

需要打包后用zip 解压然后将资源文件放进去再 签名。

最好的判断方式是:解压demo apk,然后和自己的apk解压对比

[Android 开发]android webview里设置cookie

我们在android中访问网络经常会用到Apache的HttpClient,用此类去访问网络获取数据,

但是在写android界面的时候又时不时的会用到一些WebView组件,这时候访问一个以经登录的页面的时候cookie设置就有个问题

在HttpClient中保存下来的Cookie怎么设置到WebView组件里,让WebView也保持住Cookie状态,也就是登录状态呢?

CookieSyncManager和CookieManager就是做这种事的,下面来看代码里怎么设置Cookie让WebView也保持登录状态:

1
2
3
4
5
6
7
8
public static void synCookies(Context context, String url) {  
    CookieSyncManager.createInstance(context);  
    CookieManager cookieManager = CookieManager.getInstance();  
    cookieManager.setAcceptCookie(true);  
    cookieManager.removeSessionCookie();//移除  
    cookieManager.setCookie(url, cookies);//cookies是在HttpClient中获得的    cookie("JSESSIONID="+token+";")  
    CookieSyncManager.getInstance().sync();  
}

[AIR接入Android 平台]Android 开发自定义启动

有Ane和air运行期绑定之类的用java纯生 太繁琐可以使用如下方法:

1.照常用flashBuilder开发Flash方面的

2.写一个Ane ,Ane中有一个Activity .这个Activity包含了Air的加载

3.一样用FlashBuilder加载Ane,不需要调用上面Activity相关的。用FlashBuilder打包Apk,可以是运行时绑定的

4.使用APKTool 对APk 解压,修改manifest中的启动Activity(.AppEntry),删除res/raw/debuginfo中的所有东西

5.用APKTool还原,就可以用我们自定义的APK加载flash的东西了

[AIR接入Android 平台]运营商登录付费接入ANE打包心得

国内除了91等几家声名显赫的运营商会提供已经做好的ANE给ADOBE 的移动开发者之外。其他的运营商一般只会提供IOS封装库 或者是Android 的JAR 封装库。这对于Air For Android 开发的移动应用来说。接入这些运营商就需要应用开发者自己实现ANE。

这几天一直在做android运营商的接入。这里就先把这几天的心得先发上来。大概下一次就会把Air For IOS Of ANE 的心得一并发在这里。

针对Android的ANE打包:

配置JAVA android开发环境 配置各自系统变量等略过。

首先说说我这次拿到运营商提供的JAR库的结构。(如果你拿到的SDK组成和我这次的大同小异,那你可以看完省很多弯路 如果你拿到的SDK比我拿到的复杂 那你仅仅可以参考其中的一些资源打包等方法。很多情况还是有不同的)

[AIR接入Android 平台]Ane getActivity 与 原生的不一样

Ane getActivity 与 原生activity的不一样

用如下方法获取与原生一样的activity:

1
2
3
4
5
6
7
8
9
10
11
12
13
package com.adobe.air;
import android.app.Activity;
public class Bridge {
 private static AndroidActivityWrapper aaw;
 static{
  aaw = AndroidActivityWrapper.GetAndroidActivityWrapper();
 }
 
 public static Activity getActivity()
 {
  return aaw.getActivity();
 }
}

[AIR接入Android 平台]Ane 生命周期控制

I struggled for a while with this issue and finally found a solution. I haven’t seen it posted anywhere so I thought I would share it here.

  • In ANE extension’s native java project, we include runtimeClasses.jar from AIR’s lib folder (AIR\lib\android\lib), along with FlashRuntimeExtension.jar. This gives us access to AIR’s AndroidActivityWrapper class.

  • Since some interfaces in runtimeClasses are defined as protected, we need to make them accessible to our extension. So we create two interfaces in com.adobe.air package namespace:

ActivityResultCallback.java

package com.adobe.air;
import com.adobe.air.AndroidActivityWrapper;
public abstract interface ActivityResultCallback extends AndroidActivityWrapper.ActivityResultCallback{}

[AIR接入Android 平台]Ane Activity onActivityResult 处理

1
2
3
4
5
6
7
8
9
10
11
12
protected void onCreate(Bundle savedInstanceState) {
  requestWindowFeature(Window.FEATURE\_NO\_TITLE);
  LinearLayout layout;
  layout = new LinearLayout(this);
  layout.setGravity(Gravity.BOTTOM | Gravity.LEFT);
  layout.setBackgroundDrawable(null);
  setContentView(layout);
  setRequestedOrientation(1);
  super.onCreate(savedInstanceState);
   Intent intent = new Intent(this, PaymentsActivity.class);
   startActivityForResult(...);
}

思路:用一个透明的Activity 去启动SDK的Activity。这样就可以在透明的Activity中处理onActivityResult

需要限制透明Activity的横竖屏切换。

1
2
android:configChanges="keyboardHidden|orientation|screenSize"
      android:screenOrientation="portrait"/>

[AIR接入Android 平台]ane 获取主视图+添加layout

1
2
3
4
5
6
7
8
9
10
11
public void buildLayout(Activity act)
  {
    log("ExtensionContext - buildLayout");
   
    this.mAdLayout = new RelativeLayout(act);
   
    ViewGroup fl = (ViewGroup)act.findViewById(16908290);
    fl = (ViewGroup)fl.getChildAt(0);
   
    fl.addView(this.mAdLayout, new FrameLayout.LayoutParams(-1, -1));
  }

可以使用:android.view.Window.ID_ANDROID_CONTENT 替换